├── .babelrc ├── .env ├── .eslintrc.json ├── .gitignore ├── README.md ├── index.html ├── package.json ├── public ├── app.css └── data.json ├── sources ├── addview.js ├── app.js ├── appguard.js ├── dashboard.js ├── datatable.js ├── locales │ ├── en.js │ └── es.js ├── modules │ ├── clients.js │ └── customWidgetA.js ├── plugins-locale.js ├── plugins-status.js ├── plugins-theme.js ├── plugins-unload.js ├── promises.js ├── redirects.js ├── refresh.js ├── routers-url.js ├── routes.js ├── screensize.js ├── tabbar.js ├── urlparams.js ├── viewapp.js ├── viewguard.js ├── viewresolve.js ├── views │ ├── 404.js │ ├── about.js │ ├── area │ │ ├── left │ │ │ └── form.js │ │ └── list.js │ ├── dummy.js │ ├── index.js │ ├── main.js │ └── top.js ├── webixview.js └── windows.js ├── vite.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env", 5 | { 6 | "targets": { 7 | "browsers": ["last 2 versions", "IE >= 11"] 8 | }, 9 | "modules": false, 10 | "loose": true 11 | } 12 | ] 13 | ], 14 | "plugins": [ 15 | "@babel/plugin-transform-runtime", 16 | "@babel/plugin-proposal-object-rest-spread", 17 | "@babel/plugin-syntax-dynamic-import" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | APPNAME=Demo 2 | VERSION=1.0.0 3 | BUILD_AS_MODULE=false -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es6": true 5 | }, 6 | "globals":{ 7 | "webix":true, 8 | "scheduler":true, 9 | "APPNAME":true, "VERSION":true, "PRODUCTION":true, "BUILD_AS_MODULE":true 10 | }, 11 | "extends": "eslint:recommended", 12 | "parserOptions": { 13 | "sourceType": "module", 14 | "ecmaVersion": 2020 15 | }, 16 | "rules": { 17 | "indent": [ 18 | "error", 19 | "tab", 20 | {"SwitchCase":1} 21 | ], 22 | "quotes": [ 23 | "error", 24 | "double" 25 | ], 26 | "semi": [ 27 | "error", 28 | "always" 29 | ] 30 | } 31 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | codebase/ 3 | node_modules/ 4 | *.log 5 | dist/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Webix Jet Demos 2 | ================ 3 | 4 | Repo contains demos for Jet 3.x 5 | 6 | ### How to start 7 | 8 | ``` 9 | npm install 10 | npm start 11 | ``` 12 | 13 | open ```http://localhost:8080``` 14 | 15 | 16 | ### Webix UI 17 | http://webix.com 18 | 19 | 20 | ### Webix Jet Docs 21 | https://www.gitbook.com/book/webix/webix-jet 22 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webix-jet-demos", 3 | "version": "1.6.0", 4 | "description": "Webix Jet Demos", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "lint": "eslint sources/", 8 | "build": "vite build", 9 | "start": "vite" 10 | }, 11 | "keywords": [ 12 | "webix", 13 | "jet" 14 | ], 15 | "license": "MIT", 16 | "devDependencies": { 17 | "vite": "^4.3.8", 18 | "eslint": "^8.41.0" 19 | }, 20 | "dependencies": { 21 | "webix-jet": "^3.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/app.css: -------------------------------------------------------------------------------- 1 | .webixappstart{ 2 | opacity:0; 3 | } 4 | .webixapp{ 5 | transition: opacity 500ms; 6 | opacity: 1; 7 | } 8 | 9 | /*data loading status*/ 10 | .status_good, .status_error, .status_saving{ 11 | text-align: center; 12 | margin-left:-12px; 13 | color: #666; 14 | } 15 | .status_error{ 16 | color:red; 17 | } 18 | 19 | /*login form*/ 20 | .invalid_login .webix_header > div{ 21 | background: #FC3636; 22 | transition: background 1s; 23 | } 24 | .invalid_login{ 25 | -webkit-animation: formshake .5s linear; 26 | } 27 | 28 | @-webkit-keyframes formshake { 29 | 8%, 41% { 30 | -webkit-transform: translateX(-10px); 31 | } 32 | 25%, 58% { 33 | -webkit-transform: translateX(10px); 34 | } 35 | 75% { 36 | -webkit-transform: translateX(-5px); 37 | } 38 | 92% { 39 | -webkit-transform: translateX(5px); 40 | } 41 | 0%, 100% { 42 | -webkit-transform: translateX(0); 43 | } 44 | } 45 | .theme-material-shady .webix_layout_space{ 46 | background: #BFB8D1; 47 | } 48 | 49 | -------------------------------------------------------------------------------- /public/data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "id":1, "title":"The Shawshank Redemption", "year":1994, "votes":678790, "rating":9.2, "rank":1}, 3 | { "id":2, "title":"The Godfather", "year":1972, "votes":511495, "rating":9.2, "rank":2} 4 | ] -------------------------------------------------------------------------------- /sources/addview.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | let number = 3; 3 | 4 | class AdminView1 extends JetView { 5 | config(){ 6 | return { 7 | height:50, 8 | css:"silver", 9 | template:"Admin view 1
Dashboard" 10 | }; 11 | } 12 | } 13 | 14 | class AdminView2 extends JetView { 15 | config(){ 16 | return { 17 | height:50, 18 | css:"silver", 19 | template:"Admin view 2
Meta info" 20 | }; 21 | } 22 | } 23 | 24 | class AdminView3 extends JetView { 25 | config(){ 26 | return { 27 | height:50, 28 | css:"silver", 29 | template: "Admin view #number#
The dynamic one", 30 | on:{ 31 | onBeforeRender:function(){ 32 | this.data.number = this.data.number || (number++); 33 | } 34 | } 35 | }; 36 | } 37 | } 38 | 39 | class TopView extends JetView { 40 | config(){ 41 | return { 42 | type: "space", 43 | rows: [ 44 | /* Layout */ 45 | { view:"button", inputWidth:200, value:"Add view below", type:"form", click:()=>{ 46 | this.$$("main").addView(AdminView3); 47 | }}, 48 | { id:"main", cols:[ 49 | AdminView1, 50 | AdminView2 51 | ]}, 52 | 53 | 54 | 55 | { view:"button", value:"Add view below", type:"form", inputWidth:200, click:()=>{ 56 | this.$$("main2").addView({ view:"accordionitem", header: "Admin View 3", body: AdminView3}); 57 | }}, 58 | { id:"main2", view:"accordion", cols:[ 59 | { header:"Admin View 1", body:AdminView1}, 60 | { header:"Admin View 2", body:AdminView2} 61 | ]}, 62 | 63 | 64 | { view:"button", inputWidth:200, type:"form", value:"Add view below", click:()=>{ 65 | this.$$("main5").addView( AdminView3 ); 66 | }}, 67 | { id:"main5", view:"carousel", cols:[ 68 | AdminView1, 69 | AdminView2 70 | ]}, 71 | ] 72 | }; 73 | } 74 | } 75 | 76 | 77 | const app = new JetApp({ 78 | id: "windows", 79 | start: "/top", 80 | views:{ 81 | top: TopView 82 | } 83 | }); 84 | 85 | 86 | export default app; -------------------------------------------------------------------------------- /sources/app.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, EmptyRouter } from "webix-jet"; 2 | 3 | import windows from "./windows"; 4 | import appguard from "./appguard"; 5 | import viewguard from "./viewguard"; 6 | import pluginsunload from "./plugins-unload"; 7 | import redirects from "./redirects"; 8 | import viewresolve from "./viewresolve"; 9 | import promises from "./promises"; 10 | import routes from "./routes"; 11 | import pluginslocale from "./plugins-locale"; 12 | import pluginstheme from "./plugins-theme"; 13 | import pluginsstatus from "./plugins-status"; 14 | import routersurl from "./routers-url"; 15 | import urlparams from "./urlparams"; 16 | import screensize from "./screensize"; 17 | import viewapp from "./viewapp"; 18 | import tabbar from "./tabbar"; 19 | import dashboard from "./dashboard"; 20 | import addview from "./addview"; 21 | import datatable from "./datatable"; 22 | import webixview from "./webixview"; 23 | import refresh from "./refresh"; 24 | 25 | 26 | const samples = new webix.DataCollection({ data:[ 27 | { group:1, value:"Windows", app: windows, id:"windows" }, 28 | { group:1, value:"App level Guard", app: appguard, id:"appguard" }, 29 | { group:1, value:"View level Guard", app: viewguard, id:"viewguard" }, 30 | { group:1, value:"Unload Guard", app: pluginsunload, id:"plugins-unload" }, 31 | { group:1, value:"Redirects", app: redirects, id:"redirects" }, 32 | { group:1, value:"Resolving Files", app: viewresolve, id:"viewresolve" }, 33 | { group:1, value:"Promises in views", app: promises, id:"promises" }, 34 | { group:1, value:"Url Routes", app: routes, id:"routes" }, 35 | 36 | { group:2, value:"Locales", app: pluginslocale, id:"plugins-locale" }, 37 | { group:2, value:"Themes", app: pluginstheme, id:"plugins-theme" }, 38 | { group:2, value:"Status", app: pluginsstatus, id:"plugins-status" }, 39 | 40 | { group:3, value:"URL router", app: routersurl, id:"routers-url" }, 41 | { group:3, value:"URL parameters", app: urlparams, id:"urlparams" }, 42 | 43 | { group:4, value:"Adapting to Screen Size", app: screensize, id:"screensize" }, 44 | { group:4, value:"Using App as Jet View", app: viewapp, id:"viewapp" }, 45 | { group:4, value:"Using App as Webix View", app: webixview, id:"webixview" }, 46 | { group:4, value:"Using Tabbar", app: tabbar, id:"tabbar" }, 47 | { group:4, value:"Using Dashboard", app: dashboard, id:"dashboard" }, 48 | { group:4, value:"Using Datatable with Subview",app: datatable, id:"datatable" }, 49 | { group:4, value:"Dynamic views (addView)", app: addview, id:"addview" }, 50 | { group:4, value:"Refresh view / app", app: refresh, id:"refresh" }, 51 | ]}); 52 | 53 | 54 | function showSample(id){ 55 | window.open(id+"/", "_blank"); 56 | } 57 | 58 | class SamplesNavigation extends JetView { 59 | config(){ 60 | return { 61 | view:"scrollview", scroll:"x", body:{ 62 | css:"webix_dark", margin:5, cols:[ 63 | { header:"Functionality", body: { 64 | width: 320, view:"list", localId: "list1", click : showSample 65 | }}, 66 | { rows:[ 67 | { header:"Plugins", body: { 68 | width: 320, view:"list", localId: "list2", click : showSample 69 | }}, 70 | { header:"Routers", body: { 71 | width: 320, view:"list", localId: "list3", click : showSample 72 | }} 73 | ]}, 74 | { header:"Recipes", body: { 75 | width: 320, view:"list", localId: "list4", click : showSample 76 | }} 77 | ] 78 | } 79 | }; 80 | } 81 | init(){ 82 | this.$$("list1").sync(samples, function(){ this.filter(a => a.group === 1); }); 83 | this.$$("list2").sync(samples, function(){ this.filter(a => a.group === 2); }); 84 | this.$$("list3").sync(samples, function(){ this.filter(a => a.group === 3); }); 85 | this.$$("list4").sync(samples, function(){ this.filter(a => a.group === 4); }); 86 | } 87 | } 88 | 89 | const samplesApp = new JetApp({ 90 | id: "jetsamples", 91 | start: "/top", 92 | router: EmptyRouter, 93 | views:{ 94 | top: SamplesNavigation 95 | } 96 | }); 97 | 98 | webix.ready(() => { 99 | const id = document.location.pathname.split("/")[1]; 100 | const item = samples.getItem(id); 101 | if (item){ 102 | const app = typeof item.app === "function" ? item.app() : item.app; 103 | document.title = item.value; 104 | app.render(); 105 | } else { 106 | samplesApp.render(); 107 | } 108 | }); -------------------------------------------------------------------------------- /sources/appguard.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | const allowed1 = { 4 | template:"Allowed #1" 5 | }; 6 | const allowed2 = { 7 | template:"Allowed #2" 8 | }; 9 | const blocked = { 10 | template:"Blocked" 11 | }; 12 | 13 | class TopView extends JetView { 14 | config(){ 15 | return { 16 | type:"space", rows:[ 17 | { type:"header", template:"Using windows"}, 18 | { 19 | type:"wide",cols:[ 20 | { view:"form", width: 200, rows:[ 21 | { view:"button", value:"Allowed page 1", click:() => 22 | this.show("allowed1") }, 23 | { view:"button", value:"Allowed page 2", click:() => 24 | this.show("allowed2") }, 25 | { view:"button", value:"Blocked page", click:() => 26 | this.show("blocked") }, 27 | {} 28 | ]}, 29 | { $subview: true } 30 | ] 31 | } 32 | ] 33 | }; 34 | } 35 | } 36 | 37 | 38 | const app = new JetApp({ 39 | id: "windows", 40 | start: "/top/blocked", 41 | views:{ 42 | top: TopView, 43 | allowed1: allowed1, 44 | allowed2: allowed2, 45 | blocked: blocked 46 | } 47 | }); 48 | 49 | app.attachEvent("app:guard", function(url, view, nav){ 50 | if (url.indexOf("/blocked") !== -1){ 51 | nav.redirect = "/top/allowed1"; 52 | } 53 | }); 54 | 55 | export default app; -------------------------------------------------------------------------------- /sources/dashboard.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | class AdminView1 extends JetView { 4 | config(){ 5 | return { 6 | template:"Admin view 1
Dashboard" 7 | }; 8 | } 9 | } 10 | 11 | class AdminView2 extends JetView { 12 | config(){ 13 | return { 14 | template:"Admin view 2
Meta info" 15 | }; 16 | } 17 | } 18 | 19 | class AdminView3 extends JetView { 20 | config(){ 21 | return { 22 | template:"Admin view 3
Settings " 23 | }; 24 | } 25 | } 26 | 27 | 28 | class TopView extends JetView { 29 | config(){ 30 | return { 31 | type: "space", 32 | cols: [ 33 | { rows:[ 34 | { view:"list", id:"list", 35 | width:200, 36 | drag:"source", 37 | template:"#value# - (#dx#x#dy#)", 38 | data:[ 39 | { id:"1", value:"AdminView1", dx:1, dy:1 }, 40 | { id:"2", value:"AdminView2", dx:1, dy:2 }, 41 | { id:"3", value:"AdminView3", dx:2, dy:1 } 42 | ] 43 | }, 44 | { view:"button", value:"Reset", type:"form", click:() => { 45 | this.$$("grid").clearAll(); 46 | }} 47 | ]}, 48 | { 49 | view:"scrollview", body:{ 50 | view:"dashboard", id:"grid", 51 | gridColumns:4, gridRows:4, 52 | cellHeight: 200, 53 | factory:(obj) => { 54 | obj.view = "panel"; 55 | obj.resize = true; 56 | obj.body = this[webix.$$("list").getItem(obj.name).value]; 57 | return obj; 58 | }, 59 | on:{ 60 | onChange:function(){ 61 | var state = this.serialize(); 62 | webix.storage.local.put("demo-dashboard-state", state); 63 | } 64 | } 65 | } 66 | } 67 | ] 68 | }; 69 | } 70 | init(){ 71 | this.AdminView1 = AdminView1; 72 | this.AdminView2 = AdminView2; 73 | this.AdminView3 = AdminView3; 74 | 75 | var state = webix.storage.local.get("demo-dashboard-state"); 76 | if (state) 77 | this.$$("grid").restore(state); 78 | } 79 | } 80 | 81 | 82 | const app = new JetApp({ 83 | id: "windows", 84 | start: "/top", 85 | views:{ 86 | top: TopView 87 | } 88 | }); 89 | 90 | 91 | export default app; -------------------------------------------------------------------------------- /sources/datatable.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | class SubLayout extends JetView { 4 | constructor(app, name, data){ 5 | super(app, name); 6 | this.customData = data; 7 | } 8 | config(){ 9 | return { 10 | rows:[ 11 | { type:"header", template: () => this.customData.title }, 12 | SubTemplate 13 | ] 14 | }; 15 | } 16 | } 17 | 18 | class SubTemplate extends JetView { 19 | config(){ 20 | return { 21 | template:"Subview", height: 30 22 | }; 23 | } 24 | } 25 | 26 | 27 | class TopView extends JetView { 28 | config(){ 29 | return { 30 | view:"datatable", 31 | subview: (obj, target) => { 32 | //will work only for sync JetViews 33 | var sub = new SubLayout(this.app, "", { 34 | title: obj.title 35 | }); 36 | this.ui(sub, { container: target }); 37 | return sub.getRoot(); 38 | }, 39 | columns:[ 40 | { id:"title", header:"Title", sort:"string", 41 | template:"{common.subrow()} #title#", width:220 }, 42 | { id:"year", header:"Year", width:100, sort:"int"}, 43 | { id:"votes", header:"Votes", width:100, sort:"int"} 44 | ], 45 | data:[ 46 | { id:1, title:"The Shawshank Redemption", year:1994, votes:678790 }, 47 | { id:2, title:"The Godfather", year:1972, votes:511495 }, 48 | { id:3, title:"The Godfather: Part II", year:1974, votes:319352 } 49 | ] 50 | }; 51 | } 52 | } 53 | 54 | 55 | const app = new JetApp({ 56 | id: "windows", 57 | start: "/top", 58 | views:{ 59 | top: TopView 60 | } 61 | }); 62 | 63 | 64 | export default app; -------------------------------------------------------------------------------- /sources/locales/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "Settings" : "Settings", 3 | "Language" : "Language", 4 | "Theme" : "Theme" 5 | }; -------------------------------------------------------------------------------- /sources/locales/es.js: -------------------------------------------------------------------------------- 1 | export default { 2 | "Settings" : "Ajustes", 3 | "Language" : "Idioma", 4 | "Theme" : "Tema" 5 | }; -------------------------------------------------------------------------------- /sources/modules/clients.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class TopView extends JetView { 4 | config(){ 5 | 6 | return { 7 | type:"space", rows:[ 8 | { type:"header", template:"Clients" }, 9 | { template:"Nothing here yet." } 10 | ] 11 | }; 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /sources/modules/customWidgetA.js: -------------------------------------------------------------------------------- 1 | webix.protoUI({ 2 | name:"customWidgetA", 3 | defaults:{ 4 | template:"Not so complex, actually..." 5 | } 6 | }, webix.ui.template); -------------------------------------------------------------------------------- /sources/plugins-locale.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, plugins} from "webix-jet"; 2 | 3 | // locales, optional 4 | import en from "./locales/en"; 5 | import es from "./locales/es"; 6 | 7 | const locales = { en, es }; 8 | const path = name => Promise.resolve(locales[name]); 9 | 10 | class SettingsView extends JetView { 11 | config(){ 12 | const _ = this.app.getService("locale")._; 13 | const lang = this.app.getService("locale").getLang(); 14 | 15 | 16 | return { 17 | type:"space", rows:[ 18 | { template:_("Settings"), type:"header" }, 19 | { name:"lang", optionWidth: 120, view:"segmented", label:_("Language"), options:[ 20 | {id:"en", value:"English"}, 21 | {id:"es", value:"Spanish"} 22 | ], click:() => this.toggleLanguage(), value:lang }, 23 | {} 24 | ] 25 | }; 26 | } 27 | toggleLanguage(){ 28 | const langs = this.app.getService("locale"); 29 | const value = this.getRoot().queryView({ name:"lang" }).getValue(); 30 | langs.setLang(value); 31 | } 32 | } 33 | 34 | 35 | const app = new JetApp({ 36 | id: "plugins-themes", 37 | start: "/start", 38 | views:{ 39 | start: SettingsView 40 | } 41 | }); 42 | app.use(plugins.Locale, { path }); 43 | 44 | export default app; -------------------------------------------------------------------------------- /sources/plugins-status.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, plugins} from "webix-jet"; 2 | 3 | class StartView extends JetView { 4 | config(){ 5 | return { 6 | type:"space", rows:[ 7 | { template:"Some Data", type:"header" }, 8 | { view:"datatable", id:"table", autoConfig:true, editable:true }, 9 | { view:"template", id:"app:status", height: 30 } 10 | ] 11 | }; 12 | } 13 | init(){ 14 | this.use(plugins.Status, { 15 | target: "app:status", 16 | ajax:true, 17 | expire: 5000 18 | }); 19 | 20 | const data = new webix.DataCollection({ 21 | url:"/data.json", 22 | save:"//docs.webix.com/wrongurl" 23 | }); 24 | webix.$$("table").parse(data); 25 | } 26 | } 27 | 28 | 29 | const app = new JetApp({ 30 | id: "plugins-themes", 31 | start: "/start", 32 | views:{ 33 | start: StartView 34 | } 35 | }); 36 | 37 | app.attachEvent("app:error:server", function(){ 38 | webix.alert({ 39 | title:"Data Saving Error", 40 | width: 480, 41 | text:"This sample has not server side,
so any attempt to save data will result in an error." 42 | }); 43 | }); 44 | 45 | export default app; 46 | -------------------------------------------------------------------------------- /sources/plugins-theme.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, plugins} from "webix-jet"; 2 | 3 | class SettingsView extends JetView { 4 | config(){ 5 | const theme = this.app.getService("theme").getTheme(); 6 | 7 | return { 8 | type:"space", rows:[ 9 | { template:"Settings", type:"header" }, 10 | { name:"skin", optionWidth: 120, view:"segmented", label:"Theme", options:[ 11 | {id:"material-default", value:"Default"}, 12 | {id:"material-shady", value:"Shady"}, 13 | {id:"mini-default", value:"Compact"}, 14 | {id:"flat-default", value:"Flat"} 15 | ], click:() => this.toggleTheme(), value:theme }, 16 | {} 17 | ] 18 | }; 19 | } 20 | toggleTheme(){ 21 | const themes = this.app.getService("theme"); 22 | const value = this.getRoot().queryView({ name:"skin" }).getValue(); 23 | themes.setTheme(value); 24 | } 25 | } 26 | 27 | 28 | 29 | const app = new JetApp({ 30 | id: "plugins-themes", 31 | start: "/start", 32 | views:{ 33 | start: SettingsView 34 | } 35 | }); 36 | 37 | export default function(){ 38 | //affect global styles, must be called only if you really plan to init the app 39 | debugger; 40 | app.use(plugins.Theme); 41 | return app; 42 | } -------------------------------------------------------------------------------- /sources/plugins-unload.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, plugins} from "webix-jet"; 2 | 3 | class FormView extends JetView{ 4 | config(){ 5 | return { 6 | view:"form", elements:[ 7 | { view:"text", name:"email", required:true, label:"Email" }, 8 | { view:"button", value:"save", click:() => this.show("/Details") } 9 | ] 10 | }; 11 | } 12 | 13 | init(){ 14 | this.use(plugins.UnloadGuard, () => { 15 | if (this.getRoot().validate()) 16 | return true; 17 | return new Promise((res, rej) => { 18 | webix.confirm({ 19 | text: "Are you sure ?", 20 | callback: a => a ? res() : rej() 21 | }); 22 | }); 23 | }); 24 | } 25 | } 26 | 27 | 28 | const DetailsView = () => ({ template:"Data saved" }); 29 | 30 | 31 | var app = new JetApp({ 32 | start:"/Form", 33 | views:{ 34 | "Form":FormView, 35 | "Details":DetailsView 36 | } 37 | }); 38 | 39 | export default app; -------------------------------------------------------------------------------- /sources/promises.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | const direct = { 4 | template:"Allowed #1" 5 | }; 6 | const promised = () => { 7 | var t = webix.promise.defer(); 8 | setTimeout(function(){ 9 | t.resolve({ template:"Resolved by promise" }); 10 | }, 1000); 11 | return t; 12 | }; 13 | 14 | class TopView extends JetView { 15 | config(){ 16 | var res = webix.promise.defer(); 17 | var ui = { 18 | type:"space", rows:[ 19 | { type:"header", template:"Using windows"}, 20 | { 21 | type:"wide",cols:[ 22 | { view:"form", width: 200, rows:[ 23 | { view:"button", value:"Direct loading", click:() => 24 | this.show("direct") }, 25 | { view:"button", value:"Promised", click:() => 26 | this.show("promised") }, 27 | {} 28 | ]}, 29 | { $subview: true } 30 | ] 31 | } 32 | ] 33 | }; 34 | 35 | 36 | setTimeout(function(){ 37 | res.resolve(ui); 38 | }, 1000); 39 | return res; 40 | } 41 | } 42 | 43 | 44 | 45 | const app = new JetApp({ 46 | id: "windows", 47 | start: "/top/direct", 48 | views:{ 49 | top: TopView, 50 | promised: promised, 51 | direct: direct 52 | } 53 | }); 54 | 55 | export default app; -------------------------------------------------------------------------------- /sources/redirects.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | class Page1 extends JetView { 4 | config(){ 5 | return { 6 | rows:[ 7 | { type:"header", template:"page #1" }, 8 | { $subview:true } 9 | ] 10 | }; 11 | } 12 | ready(){ 13 | this.show("page2"); 14 | } 15 | } 16 | 17 | class Page2 extends JetView { 18 | config(){ 19 | return { 20 | type:"space", rows:[ 21 | { type:"header", template:"page #2" }, 22 | { $subview:true } 23 | ] 24 | }; 25 | } 26 | ready(){ 27 | this.show("page3"); 28 | } 29 | } 30 | 31 | const Page3 = { 32 | template:"page #3, load through .ready handler" 33 | }; 34 | 35 | const Page4 = { 36 | template:"Dummy page" 37 | }; 38 | 39 | class TopView extends JetView { 40 | config(){ 41 | return { 42 | type:"space", rows:[ 43 | { type:"header", template:"Redirect inner content from .ready handler"}, 44 | { 45 | type:"wide",cols:[ 46 | { view:"form", width: 200, rows:[ 47 | { view:"button", value:"Page 1", click:() => 48 | this.show("page1") }, 49 | { view:"button", value:"Page 4", click:() => 50 | this.show("page4") }, 51 | {} 52 | ]}, 53 | { $subview: true } 54 | ] 55 | } 56 | ] 57 | }; 58 | } 59 | } 60 | 61 | 62 | const app = new JetApp({ 63 | id: "windows", 64 | start: "/top/page1", 65 | views:{ 66 | top: TopView, 67 | page1: Page1, 68 | page2: Page2, 69 | page3: Page3, 70 | page4: Page4 71 | } 72 | }); 73 | 74 | app.attachEvent("app:guard", function(url, view, nav){ 75 | if (url.indexOf("/blocked") !== -1){ 76 | nav.redirect = "/top/page1"; 77 | } 78 | }); 79 | 80 | export default app; -------------------------------------------------------------------------------- /sources/refresh.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | const format = webix.Date.dateToStr("%h:%i:%s"); 4 | 5 | class ContentView extends JetView{ 6 | constructor(app, name){ 7 | super(app, name); 8 | this.$count = 2; 9 | } 10 | config(){ 11 | const lines = []; 12 | 13 | for (var i=0; i { 23 | this.$count++; 24 | this.refresh(); 25 | }} 26 | ]}, 27 | { gravity:2, cols: lines, type:"space" }, 28 | { $subview: true } 29 | ]}; 30 | } 31 | } 32 | 33 | class ContentSubView extends JetView{ 34 | config(){ 35 | return { template:"Static footer
rendered at " + format(new Date()), height: 60 }; 36 | } 37 | } 38 | 39 | 40 | class TopView extends JetView { 41 | config(){ 42 | var ui = { 43 | type:"space", rows:[ 44 | { type:"header", template:"Top view, rendered at " + format(new Date())}, 45 | { 46 | type:"wide",cols:[ 47 | { view:"form", width: 200, rows:[ 48 | { view:"button", value:"Refresh app", click:() => 49 | this.app.refresh() }, 50 | { view:"button", value:"Refresh view", click:() => 51 | this.getSubView().refresh() }, 52 | {} 53 | ]}, 54 | { $subview: true } 55 | ] 56 | } 57 | ] 58 | }; 59 | 60 | 61 | return ui; 62 | } 63 | } 64 | 65 | 66 | 67 | const app = new JetApp({ 68 | id: "windows", 69 | start: "/top/content/subcontent", 70 | views:{ 71 | top: TopView, 72 | content: ContentView, 73 | subcontent: ContentSubView 74 | } 75 | }); 76 | 77 | export default app; -------------------------------------------------------------------------------- /sources/routers-url.js: -------------------------------------------------------------------------------- 1 | import {JetApp, UrlRouter} from "webix-jet"; 2 | 3 | const TopView = { 4 | type:"space", rows:[ 5 | { type:"header", template:"Url router"}, 6 | { 7 | type:"wide", cols:[ 8 | { width:200, css:"navblock", template:` 9 | - show start 10 | - show details 11 | `}, 12 | { $subview: true } 13 | ] 14 | } 15 | ] 16 | }; 17 | 18 | const StartView = { 19 | template:"Start page" 20 | }; 21 | 22 | const DetailsView = { 23 | template:"Details page" 24 | }; 25 | 26 | const app = new JetApp({ 27 | id: "plugins-themes", 28 | 29 | router: UrlRouter, 30 | routerPrefix: "/routers-url", 31 | 32 | start: "/top/start", 33 | views:{ 34 | top: TopView, 35 | start: StartView, 36 | details: DetailsView 37 | } 38 | }); 39 | 40 | export default app; -------------------------------------------------------------------------------- /sources/routes.js: -------------------------------------------------------------------------------- 1 | import {JetApp } from "webix-jet"; 2 | import { views } from "./views/index"; 3 | 4 | const app = new JetApp({ 5 | start: "/top/about", 6 | routes: { 7 | "/hi" : "/top/about", 8 | "/form" : "/top/area.left.form", 9 | "/list" : "/top/area.list" 10 | }, 11 | views, 12 | debug:true 13 | }); 14 | 15 | export default app; -------------------------------------------------------------------------------- /sources/screensize.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | const data = new webix.DataCollection({ 4 | url:"/data.json" 5 | }); 6 | 7 | export class ListA extends JetView { 8 | config(){ 9 | return { view:"datatable", autoConfig:true, editable:true }; 10 | } 11 | init(view){ 12 | view.parse(data); 13 | } 14 | } 15 | 16 | export class ListB extends JetView { 17 | config(){ 18 | var config = { 19 | view:"datatable", 20 | editable:true 21 | }; 22 | 23 | switch(this.app.config.size){ 24 | case "small": 25 | config.columns = [ 26 | { id:"id" }, 27 | { id:"title", fillspace:true } 28 | ]; 29 | break; 30 | default: 31 | config.autoConfig = true; 32 | break; 33 | } 34 | 35 | return config; 36 | } 37 | init(view){ 38 | view.parse(data); 39 | } 40 | } 41 | 42 | export class StartView extends JetView { 43 | config(){ 44 | switch(this.app.config.size){ 45 | case "small": 46 | return { 47 | view:"tabview", tabbar:{ optionWidth:100 }, cells:[ 48 | { body: { rows:[ ListB ]}, header:"Table 1" }, 49 | { body: { rows:[ ListA ]}, header:"Table 2" } 50 | ] 51 | }; 52 | case "wide": 53 | return { 54 | type:"space", cols:[ 55 | ListA, 56 | ListB 57 | ] 58 | }; 59 | } 60 | } 61 | } 62 | 63 | 64 | 65 | const app = new JetApp({ 66 | start: "/start", 67 | views:{ 68 | start: StartView 69 | } 70 | }); 71 | 72 | export default function(){ 73 | const size = () => document.body.offsetWidth > 800 ? "wide" : "small"; 74 | app.config.size = size(); 75 | webix.event(window, "resize", function(){ 76 | var newSize = size(); 77 | if (newSize != app.config.size){ 78 | app.config.size = newSize; 79 | app.refresh(); 80 | } 81 | }); 82 | 83 | return app; 84 | } -------------------------------------------------------------------------------- /sources/tabbar.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | let number = 3; 3 | 4 | // It is important to NOT DEFINE top level ID 5 | // for the content which will be hosted 6 | // inside of tabview 7 | class AdminView1 extends JetView { 8 | config(){ 9 | return { 10 | height:50, 11 | css:"silver", 12 | template:"Admin view 1
Dashboard" 13 | }; 14 | } 15 | } 16 | 17 | class AdminView2 extends JetView { 18 | config(){ 19 | return { 20 | height:50, 21 | css:"silver", 22 | template:"Admin view 2
Meta info" 23 | }; 24 | } 25 | } 26 | 27 | class AdminView3 extends JetView { 28 | constructor(app, name, data){ 29 | super(app, name); 30 | 31 | this.customData = data || { number: 100 }; 32 | } 33 | config(){ 34 | return { 35 | height:50, 36 | css:"silver", 37 | template: "Admin view #number#
The dynamic one", 38 | data: this.customData 39 | }; 40 | } 41 | } 42 | 43 | class TopView extends JetView { 44 | config(){ 45 | return { 46 | type: "space", 47 | rows: [ 48 | { view:"button", inputWidth:200, value:"Add view below", type:"form", click:()=>{ 49 | this.$$("main3").addView({ 50 | header: "Admin View "+number, 51 | // we can use both 52 | // body: AdminView3 53 | // and 54 | // body: new AdminView3(app, name) 55 | body: new AdminView3(this.app, "", { number: number++ }) 56 | }); 57 | }}, 58 | { id:"main3", view:"tabview", cells:[ 59 | { header:"Admin View 1", body:AdminView1}, 60 | { header:"Admin View 2", body:AdminView2} 61 | ]}, 62 | { height:50 }, 63 | { view:"button", inputWidth:200, value:"Add view below", type:"form", click:()=>{ 64 | var uid = webix.uid(); 65 | this.$$("tabs").addOption({ id:uid, value:"Admin View 100" }); 66 | this.$$("main4").addView({ id:uid, $subview: AdminView3 }); 67 | }}, 68 | { id:"tabs", view:"tabbar", multiview:true, options:[ 69 | "Admin View 1", "Admin View 2" 70 | ]}, 71 | { id:"main4", cells:[ 72 | { id:"Admin View 1", $subview:AdminView1 }, 73 | { id:"Admin View 2", $subview:AdminView2 } 74 | ]} 75 | ] 76 | }; 77 | } 78 | } 79 | 80 | 81 | const app = new JetApp({ 82 | id: "windows", 83 | start: "/top", 84 | views:{ 85 | top: TopView 86 | } 87 | }); 88 | 89 | 90 | export default app; -------------------------------------------------------------------------------- /sources/urlparams.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, plugins } from "webix-jet"; 2 | 3 | class TopView extends JetView { 4 | config(){ 5 | return { 6 | rows:[ 7 | { view:"segmented", inputWidth:300, options:["full", "brief"], localId:"ms", on:{ 8 | onChange: function(){ 9 | this.$scope.setParam("mode", this.getValue(), true); 10 | } 11 | }}, 12 | { $subview:true } 13 | ] 14 | }; 15 | } 16 | init(){ 17 | this.use(plugins.UrlParam, ["mode"]); 18 | 19 | var mode = this.getParam("mode"); 20 | if (mode){ 21 | this.$$("ms").setValue(mode); 22 | } 23 | } 24 | } 25 | 26 | class SubView extends JetView { 27 | config(){ 28 | return { 29 | view:"template" 30 | }; 31 | } 32 | urlChange(view){ 33 | var id = this.getParam("id", true); 34 | var mode = this.getParam("mode", true); 35 | view.setHTML(mode+" mode for id="+id); 36 | } 37 | } 38 | 39 | class DetailsView extends JetView { 40 | config(){ 41 | return { 42 | cols:[ 43 | { width:200, view:"list", select:true, localId:"list", 44 | on:{ 45 | onAfterSelect: (id) => { 46 | this.setParam("id", id, true); 47 | } 48 | } 49 | }, 50 | { $subview:"sub" } 51 | ] 52 | }; 53 | } 54 | init(){ 55 | this.$$("list").parse([ 56 | { id:1, value:"1. short data" }, 57 | { id:2, value:"2. short data" }, 58 | ]); 59 | } 60 | urlChange(){ 61 | var id = this.getParam("id"); 62 | if (id) 63 | this.$$("list").select(id); 64 | } 65 | } 66 | 67 | const app = new JetApp({ 68 | start: "/top/full/details", 69 | views: { 70 | top: TopView, 71 | details: DetailsView, 72 | sub: SubView 73 | }, 74 | debug:true 75 | }); 76 | 77 | export default app; -------------------------------------------------------------------------------- /sources/viewapp.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, SubRouter } from "webix-jet"; 2 | 3 | class TopView extends JetView { 4 | config(){ 5 | return { 6 | type:"wide", rows:[ 7 | { type:"header", template:"Base App"}, 8 | { $subview: true } 9 | ] 10 | }; 11 | } 12 | } 13 | 14 | class MasterTopView extends JetView { 15 | config(){ 16 | return { 17 | type:"space", rows:[ 18 | { view:"toolbar", cols:[ 19 | { view:"label", label:"Master App"}, 20 | { view:"segmented", width: 200, 21 | value:"details", 22 | options:["details","text"], click:function(){ 23 | this.$scope.show(this.getValue()); 24 | } 25 | } 26 | ]}, 27 | { $subview: true } 28 | ] 29 | }; 30 | } 31 | } 32 | 33 | class FormView extends JetView { 34 | config(){ 35 | return { 36 | view:"form", width: 200, rows:[ 37 | { label:"Name", view:"text" }, 38 | { label:"Email", view:"text" }, 39 | {} 40 | ] 41 | }; 42 | } 43 | } 44 | 45 | const TextView = () => ({ template:"Some text here" }); 46 | 47 | 48 | 49 | 50 | const baseApp1 = (app) => { 51 | return new JetApp({ 52 | start: "/top/form", 53 | router: SubRouter, 54 | debug:true, 55 | app, 56 | views:{ 57 | top: TopView, 58 | form: FormView 59 | } 60 | }); 61 | }; 62 | 63 | const masterApp = new JetApp({ 64 | start: "/top/details", 65 | debug:true, 66 | views:{ 67 | top: MasterTopView, 68 | details: baseApp1, 69 | text: TextView 70 | } 71 | }); 72 | 73 | export default masterApp; -------------------------------------------------------------------------------- /sources/viewguard.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | class allowed extends JetView{ 4 | config(){ 5 | return { template:"Some cotent here" }; 6 | } 7 | } 8 | class limited extends JetView{ 9 | config(){ 10 | var ui = { view:"form", rows:[ 11 | { label:"Name", view:"text" }, 12 | { label:"Email", view:"text" } 13 | ]}; 14 | 15 | if (this.app.config.access == "writer"){ 16 | ui.rows.push({ view:"text", label:"Salary" }); 17 | ui.rows.push({ view:"button", value:"Delete" }); 18 | } 19 | 20 | ui.rows.push({}); 21 | 22 | return ui; 23 | } 24 | } 25 | class blocked extends JetView{ 26 | config(){ 27 | if (this.app.config.access != "writer"){ 28 | return { }; 29 | } 30 | 31 | return { template:"As writer you can read this content" }; 32 | } 33 | } 34 | 35 | class TopView extends JetView { 36 | config(){ 37 | return { 38 | type:"space", rows:[ 39 | { view:"toolbar", cols:[ 40 | { view:"label", label:"Using windows"}, 41 | { view:"segmented", width: 300, 42 | label:"Access Level", labelWidth:100, 43 | value:this.app.config.access, 44 | options:["reader","writer"], click:function(){ 45 | // change access level, for demo only 46 | var app = this.$scope.app; 47 | app.config.access = this.getValue(); 48 | // repaint ui with new access level applied 49 | webix.delay(function(){ 50 | app.refresh(); 51 | }); 52 | }} 53 | ]}, 54 | { 55 | type:"wide",cols:[ 56 | { view:"form", width: 200, rows:[ 57 | { view:"button", value:"Allowed page 1", click:() => 58 | this.show("allowed") }, 59 | { view:"button", value:"Limited access", click:() => 60 | this.show("limited") }, 61 | { view:"button", value:"Blocked page", click:() => 62 | this.show("blocked") }, 63 | {} 64 | ]}, 65 | { $subview: true } 66 | ] 67 | } 68 | ] 69 | }; 70 | } 71 | } 72 | 73 | 74 | const app = new JetApp({ 75 | id: "windows", 76 | access: "reader", 77 | start: "/top/blocked", 78 | views:{ 79 | top: TopView, 80 | allowed: allowed, 81 | limited: limited, 82 | blocked: blocked 83 | } 84 | }); 85 | 86 | export default app; -------------------------------------------------------------------------------- /sources/viewresolve.js: -------------------------------------------------------------------------------- 1 | import {JetApp} from "webix-jet"; 2 | import { views } from "./views/index"; 3 | 4 | const app = new JetApp({ 5 | start: "/top/start", 6 | views: { 7 | "start" : "area.list" 8 | }, 9 | views, 10 | debug:true 11 | }); 12 | 13 | export default app; -------------------------------------------------------------------------------- /sources/views/404.js: -------------------------------------------------------------------------------- 1 | const about = { 2 | template:"404: Page not found" 3 | }; 4 | 5 | export default about; -------------------------------------------------------------------------------- /sources/views/about.js: -------------------------------------------------------------------------------- 1 | const about = { 2 | template:"This is dummy page" 3 | }; 4 | 5 | export default about; -------------------------------------------------------------------------------- /sources/views/area/left/form.js: -------------------------------------------------------------------------------- 1 | const form = { 2 | rows:[ 3 | { view:"text"}, 4 | { view:"button", value:"save"}, 5 | {} 6 | ] 7 | }; 8 | 9 | export default form; -------------------------------------------------------------------------------- /sources/views/area/list.js: -------------------------------------------------------------------------------- 1 | const list = { 2 | view:"list", 3 | data:[ 4 | {value:"Alex Brown"}, 5 | {value:"Linda Wan"} 6 | ] 7 | }; 8 | 9 | export default list; -------------------------------------------------------------------------------- /sources/views/dummy.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webix-hub/jet-demos/4150087df5267a379fb86726ef628c2cc1006ae1/sources/views/dummy.js -------------------------------------------------------------------------------- /sources/views/index.js: -------------------------------------------------------------------------------- 1 | // dynamic import of views 2 | const modules = import.meta.glob("./**/*.js"); 3 | export const views = name => { 4 | const mod = modules[`./${name.replace(/\./g, "/")}.js`]; 5 | if (!mod) 6 | return modules["./404.js"]().then(x => x.default); 7 | 8 | return mod().then(x => x.default) 9 | }; -------------------------------------------------------------------------------- /sources/views/main.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class TopView extends JetView { 4 | config(){ 5 | 6 | return { 7 | type:"space", cols:[ 8 | { view:"list", width: 200, select:true, data:[ 9 | { value:"About", id:"about", route:"about"}, 10 | { value:"Module", id:"modules.clients", route:"modules.clients"} 11 | ], click:function(id){ 12 | var item = this.getItem(id); 13 | this.$scope.show(item.route); 14 | }}, 15 | { $subview: true } 16 | ] 17 | }; 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /sources/views/top.js: -------------------------------------------------------------------------------- 1 | import {JetView} from "webix-jet"; 2 | 3 | export default class TopView extends JetView { 4 | config(){ 5 | 6 | return { 7 | type:"space", cols:[ 8 | { view:"list", width: 200, select:true, data:[ 9 | { value:"List", id:"list", route:"area.list"}, 10 | { value:"Form", id:"form", route:"area.left.form"}, 11 | { value:"About", id:"about", route:"about"} 12 | ], click:function(id){ 13 | var item = this.getItem(id); 14 | this.$scope.show(item.route); 15 | }}, 16 | { $subview: true } 17 | ] 18 | }; 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /sources/webixview.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView, EmptyRouter } from "webix-jet"; 2 | 3 | class TopView extends JetView { 4 | config(){ 5 | return { 6 | type:"wide", rows:[ 7 | { type:"header", template:"Base App"}, 8 | { $subview: true } 9 | ] 10 | }; 11 | } 12 | } 13 | 14 | class FormView extends JetView { 15 | config(){ 16 | return { 17 | view:"form", width: 200, rows:[ 18 | { label:"Name", view:"text" }, 19 | { label:"Email", view:"text" }, 20 | {} 21 | ] 22 | }; 23 | } 24 | } 25 | 26 | class MySubApp extends JetApp{ 27 | constructor(){ 28 | super({ 29 | start: "/top/form", 30 | router: EmptyRouter, 31 | debug:true, 32 | views:{ 33 | top: TopView, 34 | form: FormView 35 | } 36 | }); 37 | } 38 | } 39 | webix.protoUI({ 40 | name:"sub-app", 41 | app: MySubApp 42 | }, webix.ui.jetapp); 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | class MasterTopView extends JetView { 51 | config(){ 52 | return { 53 | type:"space", rows:[ 54 | { view:"toolbar", cols:[ 55 | { view:"label", label:"Master App"}, 56 | { view:"segmented", width: 200, 57 | value:"details", 58 | options:["details","text"], click:function(){ 59 | this.$scope.show(this.getValue()); 60 | } 61 | } 62 | ]}, 63 | { $subview: true } 64 | ] 65 | }; 66 | } 67 | } 68 | 69 | 70 | const TextView = () => ({ template:"Some text here" }); 71 | const DetailsView = () => ({ view:"sub-app" }); 72 | 73 | 74 | const masterApp = new JetApp({ 75 | start: "/top/details", 76 | debug:true, 77 | views:{ 78 | top: MasterTopView, 79 | details: DetailsView, 80 | text: TextView 81 | } 82 | }); 83 | 84 | export default masterApp; -------------------------------------------------------------------------------- /sources/windows.js: -------------------------------------------------------------------------------- 1 | import {JetApp, JetView} from "webix-jet"; 2 | 3 | const win1 = { 4 | view:"popup", 5 | position:"center", 6 | body:{ template:"Text 1 (center)" } 7 | }; 8 | 9 | class WindowsView extends JetView { 10 | config(){ 11 | return { 12 | view:"popup", 13 | top:200, left:300, 14 | body:{ template:"Text 2 (fixed position)" } 15 | }; 16 | } 17 | showWindow(){ 18 | this.getRoot().show(); 19 | } 20 | } 21 | 22 | class TopView extends JetView { 23 | config(){ 24 | return { 25 | type:"space", rows:[ 26 | { type:"header", template:"Using windows"}, 27 | { 28 | type:"wide",cols:[ 29 | { view:"form", width: 200, rows:[ 30 | { view:"button", value:"Show Window 1", click:() => 31 | this.win1.show() 32 | }, 33 | { view:"button", value:"Show Window 2", click:() => 34 | this.win2.showWindow() 35 | }, 36 | {} 37 | ]}, 38 | { $subview: true } 39 | ] 40 | } 41 | ] 42 | }; 43 | } 44 | 45 | init(){ 46 | //webix view 47 | this.win1 = this.ui(win1); 48 | 49 | //WindowsView class 50 | this.win2 = this.ui(WindowsView); 51 | } 52 | } 53 | 54 | 55 | const app = new JetApp({ 56 | id: "windows", 57 | start: "/top", 58 | views:{ 59 | top: TopView 60 | } 61 | }); 62 | 63 | export default app; -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | // vite.config.js 2 | import { defineConfig } from 'vite' 3 | 4 | export default defineConfig({ 5 | 6 | }) -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/android-arm64@0.17.19": 6 | version "0.17.19" 7 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" 8 | integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== 9 | 10 | "@esbuild/android-arm@0.17.19": 11 | version "0.17.19" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" 13 | integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== 14 | 15 | "@esbuild/android-x64@0.17.19": 16 | version "0.17.19" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" 18 | integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== 19 | 20 | "@esbuild/darwin-arm64@0.17.19": 21 | version "0.17.19" 22 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" 23 | integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== 24 | 25 | "@esbuild/darwin-x64@0.17.19": 26 | version "0.17.19" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" 28 | integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== 29 | 30 | "@esbuild/freebsd-arm64@0.17.19": 31 | version "0.17.19" 32 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" 33 | integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== 34 | 35 | "@esbuild/freebsd-x64@0.17.19": 36 | version "0.17.19" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" 38 | integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== 39 | 40 | "@esbuild/linux-arm64@0.17.19": 41 | version "0.17.19" 42 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" 43 | integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== 44 | 45 | "@esbuild/linux-arm@0.17.19": 46 | version "0.17.19" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" 48 | integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== 49 | 50 | "@esbuild/linux-ia32@0.17.19": 51 | version "0.17.19" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" 53 | integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== 54 | 55 | "@esbuild/linux-loong64@0.17.19": 56 | version "0.17.19" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" 58 | integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== 59 | 60 | "@esbuild/linux-mips64el@0.17.19": 61 | version "0.17.19" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" 63 | integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== 64 | 65 | "@esbuild/linux-ppc64@0.17.19": 66 | version "0.17.19" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" 68 | integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== 69 | 70 | "@esbuild/linux-riscv64@0.17.19": 71 | version "0.17.19" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" 73 | integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== 74 | 75 | "@esbuild/linux-s390x@0.17.19": 76 | version "0.17.19" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" 78 | integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== 79 | 80 | "@esbuild/linux-x64@0.17.19": 81 | version "0.17.19" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" 83 | integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== 84 | 85 | "@esbuild/netbsd-x64@0.17.19": 86 | version "0.17.19" 87 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" 88 | integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== 89 | 90 | "@esbuild/openbsd-x64@0.17.19": 91 | version "0.17.19" 92 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" 93 | integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== 94 | 95 | "@esbuild/sunos-x64@0.17.19": 96 | version "0.17.19" 97 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" 98 | integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== 99 | 100 | "@esbuild/win32-arm64@0.17.19": 101 | version "0.17.19" 102 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" 103 | integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== 104 | 105 | "@esbuild/win32-ia32@0.17.19": 106 | version "0.17.19" 107 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" 108 | integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== 109 | 110 | "@esbuild/win32-x64@0.17.19": 111 | version "0.17.19" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" 113 | integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== 114 | 115 | "@eslint-community/eslint-utils@^4.2.0": 116 | version "4.4.0" 117 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 118 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 119 | dependencies: 120 | eslint-visitor-keys "^3.3.0" 121 | 122 | "@eslint-community/regexpp@^4.4.0": 123 | version "4.5.1" 124 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 125 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 126 | 127 | "@eslint/eslintrc@^2.0.3": 128 | version "2.0.3" 129 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" 130 | integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== 131 | dependencies: 132 | ajv "^6.12.4" 133 | debug "^4.3.2" 134 | espree "^9.5.2" 135 | globals "^13.19.0" 136 | ignore "^5.2.0" 137 | import-fresh "^3.2.1" 138 | js-yaml "^4.1.0" 139 | minimatch "^3.1.2" 140 | strip-json-comments "^3.1.1" 141 | 142 | "@eslint/js@8.41.0": 143 | version "8.41.0" 144 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.41.0.tgz#080321c3b68253522f7646b55b577dd99d2950b3" 145 | integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== 146 | 147 | "@humanwhocodes/config-array@^0.11.8": 148 | version "0.11.8" 149 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 150 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 151 | dependencies: 152 | "@humanwhocodes/object-schema" "^1.2.1" 153 | debug "^4.1.1" 154 | minimatch "^3.0.5" 155 | 156 | "@humanwhocodes/module-importer@^1.0.1": 157 | version "1.0.1" 158 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 159 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 160 | 161 | "@humanwhocodes/object-schema@^1.2.1": 162 | version "1.2.1" 163 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 164 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 165 | 166 | "@nodelib/fs.scandir@2.1.5": 167 | version "2.1.5" 168 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 169 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 170 | dependencies: 171 | "@nodelib/fs.stat" "2.0.5" 172 | run-parallel "^1.1.9" 173 | 174 | "@nodelib/fs.stat@2.0.5": 175 | version "2.0.5" 176 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 177 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 178 | 179 | "@nodelib/fs.walk@^1.2.8": 180 | version "1.2.8" 181 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 182 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 183 | dependencies: 184 | "@nodelib/fs.scandir" "2.1.5" 185 | fastq "^1.6.0" 186 | 187 | acorn-jsx@^5.3.2: 188 | version "5.3.2" 189 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 190 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 191 | 192 | acorn@^8.8.0: 193 | version "8.8.2" 194 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 195 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 196 | 197 | ajv@^6.10.0, ajv@^6.12.4: 198 | version "6.12.6" 199 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 200 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 201 | dependencies: 202 | fast-deep-equal "^3.1.1" 203 | fast-json-stable-stringify "^2.0.0" 204 | json-schema-traverse "^0.4.1" 205 | uri-js "^4.2.2" 206 | 207 | ansi-regex@^5.0.1: 208 | version "5.0.1" 209 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 210 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 211 | 212 | ansi-styles@^4.1.0: 213 | version "4.3.0" 214 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 215 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 216 | dependencies: 217 | color-convert "^2.0.1" 218 | 219 | argparse@^2.0.1: 220 | version "2.0.1" 221 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 222 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 223 | 224 | balanced-match@^1.0.0: 225 | version "1.0.2" 226 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 227 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 228 | 229 | brace-expansion@^1.1.7: 230 | version "1.1.11" 231 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 232 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 233 | dependencies: 234 | balanced-match "^1.0.0" 235 | concat-map "0.0.1" 236 | 237 | callsites@^3.0.0: 238 | version "3.1.0" 239 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 240 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 241 | 242 | chalk@^4.0.0: 243 | version "4.1.2" 244 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 245 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 246 | dependencies: 247 | ansi-styles "^4.1.0" 248 | supports-color "^7.1.0" 249 | 250 | color-convert@^2.0.1: 251 | version "2.0.1" 252 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 253 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 254 | dependencies: 255 | color-name "~1.1.4" 256 | 257 | color-name@~1.1.4: 258 | version "1.1.4" 259 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 260 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 261 | 262 | concat-map@0.0.1: 263 | version "0.0.1" 264 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 265 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 266 | 267 | cross-spawn@^7.0.2: 268 | version "7.0.3" 269 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 270 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 271 | dependencies: 272 | path-key "^3.1.0" 273 | shebang-command "^2.0.0" 274 | which "^2.0.1" 275 | 276 | debug@^4.1.1, debug@^4.3.2: 277 | version "4.3.3" 278 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 279 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 280 | dependencies: 281 | ms "2.1.2" 282 | 283 | deep-is@^0.1.3: 284 | version "0.1.4" 285 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 286 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 287 | 288 | doctrine@^3.0.0: 289 | version "3.0.0" 290 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 291 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 292 | dependencies: 293 | esutils "^2.0.2" 294 | 295 | esbuild@^0.17.5: 296 | version "0.17.19" 297 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" 298 | integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== 299 | optionalDependencies: 300 | "@esbuild/android-arm" "0.17.19" 301 | "@esbuild/android-arm64" "0.17.19" 302 | "@esbuild/android-x64" "0.17.19" 303 | "@esbuild/darwin-arm64" "0.17.19" 304 | "@esbuild/darwin-x64" "0.17.19" 305 | "@esbuild/freebsd-arm64" "0.17.19" 306 | "@esbuild/freebsd-x64" "0.17.19" 307 | "@esbuild/linux-arm" "0.17.19" 308 | "@esbuild/linux-arm64" "0.17.19" 309 | "@esbuild/linux-ia32" "0.17.19" 310 | "@esbuild/linux-loong64" "0.17.19" 311 | "@esbuild/linux-mips64el" "0.17.19" 312 | "@esbuild/linux-ppc64" "0.17.19" 313 | "@esbuild/linux-riscv64" "0.17.19" 314 | "@esbuild/linux-s390x" "0.17.19" 315 | "@esbuild/linux-x64" "0.17.19" 316 | "@esbuild/netbsd-x64" "0.17.19" 317 | "@esbuild/openbsd-x64" "0.17.19" 318 | "@esbuild/sunos-x64" "0.17.19" 319 | "@esbuild/win32-arm64" "0.17.19" 320 | "@esbuild/win32-ia32" "0.17.19" 321 | "@esbuild/win32-x64" "0.17.19" 322 | 323 | escape-string-regexp@^4.0.0: 324 | version "4.0.0" 325 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 326 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 327 | 328 | eslint-scope@^7.2.0: 329 | version "7.2.0" 330 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 331 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 332 | dependencies: 333 | esrecurse "^4.3.0" 334 | estraverse "^5.2.0" 335 | 336 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 337 | version "3.4.1" 338 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 339 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 340 | 341 | eslint@^8.41.0: 342 | version "8.41.0" 343 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.41.0.tgz#3062ca73363b4714b16dbc1e60f035e6134b6f1c" 344 | integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== 345 | dependencies: 346 | "@eslint-community/eslint-utils" "^4.2.0" 347 | "@eslint-community/regexpp" "^4.4.0" 348 | "@eslint/eslintrc" "^2.0.3" 349 | "@eslint/js" "8.41.0" 350 | "@humanwhocodes/config-array" "^0.11.8" 351 | "@humanwhocodes/module-importer" "^1.0.1" 352 | "@nodelib/fs.walk" "^1.2.8" 353 | ajv "^6.10.0" 354 | chalk "^4.0.0" 355 | cross-spawn "^7.0.2" 356 | debug "^4.3.2" 357 | doctrine "^3.0.0" 358 | escape-string-regexp "^4.0.0" 359 | eslint-scope "^7.2.0" 360 | eslint-visitor-keys "^3.4.1" 361 | espree "^9.5.2" 362 | esquery "^1.4.2" 363 | esutils "^2.0.2" 364 | fast-deep-equal "^3.1.3" 365 | file-entry-cache "^6.0.1" 366 | find-up "^5.0.0" 367 | glob-parent "^6.0.2" 368 | globals "^13.19.0" 369 | graphemer "^1.4.0" 370 | ignore "^5.2.0" 371 | import-fresh "^3.0.0" 372 | imurmurhash "^0.1.4" 373 | is-glob "^4.0.0" 374 | is-path-inside "^3.0.3" 375 | js-yaml "^4.1.0" 376 | json-stable-stringify-without-jsonify "^1.0.1" 377 | levn "^0.4.1" 378 | lodash.merge "^4.6.2" 379 | minimatch "^3.1.2" 380 | natural-compare "^1.4.0" 381 | optionator "^0.9.1" 382 | strip-ansi "^6.0.1" 383 | strip-json-comments "^3.1.0" 384 | text-table "^0.2.0" 385 | 386 | espree@^9.5.2: 387 | version "9.5.2" 388 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" 389 | integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== 390 | dependencies: 391 | acorn "^8.8.0" 392 | acorn-jsx "^5.3.2" 393 | eslint-visitor-keys "^3.4.1" 394 | 395 | esquery@^1.4.2: 396 | version "1.5.0" 397 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 398 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 399 | dependencies: 400 | estraverse "^5.1.0" 401 | 402 | esrecurse@^4.3.0: 403 | version "4.3.0" 404 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 405 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 406 | dependencies: 407 | estraverse "^5.2.0" 408 | 409 | estraverse@^5.1.0, estraverse@^5.2.0: 410 | version "5.3.0" 411 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 412 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 413 | 414 | esutils@^2.0.2: 415 | version "2.0.3" 416 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 417 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 418 | 419 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 420 | version "3.1.3" 421 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 422 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 423 | 424 | fast-json-stable-stringify@^2.0.0: 425 | version "2.1.0" 426 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 427 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 428 | 429 | fast-levenshtein@^2.0.6: 430 | version "2.0.6" 431 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 432 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 433 | 434 | fastq@^1.6.0: 435 | version "1.13.0" 436 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 437 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 438 | dependencies: 439 | reusify "^1.0.4" 440 | 441 | file-entry-cache@^6.0.1: 442 | version "6.0.1" 443 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 444 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 445 | dependencies: 446 | flat-cache "^3.0.4" 447 | 448 | find-up@^5.0.0: 449 | version "5.0.0" 450 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 451 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 452 | dependencies: 453 | locate-path "^6.0.0" 454 | path-exists "^4.0.0" 455 | 456 | flat-cache@^3.0.4: 457 | version "3.0.4" 458 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 459 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 460 | dependencies: 461 | flatted "^3.1.0" 462 | rimraf "^3.0.2" 463 | 464 | flatted@^3.1.0: 465 | version "3.2.4" 466 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" 467 | integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== 468 | 469 | fs.realpath@^1.0.0: 470 | version "1.0.0" 471 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 472 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 473 | 474 | fsevents@~2.3.2: 475 | version "2.3.2" 476 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 477 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 478 | 479 | glob-parent@^6.0.2: 480 | version "6.0.2" 481 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 482 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 483 | dependencies: 484 | is-glob "^4.0.3" 485 | 486 | glob@^7.1.3: 487 | version "7.2.0" 488 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 489 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 490 | dependencies: 491 | fs.realpath "^1.0.0" 492 | inflight "^1.0.4" 493 | inherits "2" 494 | minimatch "^3.0.4" 495 | once "^1.3.0" 496 | path-is-absolute "^1.0.0" 497 | 498 | globals@^13.19.0: 499 | version "13.20.0" 500 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 501 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 502 | dependencies: 503 | type-fest "^0.20.2" 504 | 505 | graphemer@^1.4.0: 506 | version "1.4.0" 507 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 508 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 509 | 510 | has-flag@^4.0.0: 511 | version "4.0.0" 512 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 513 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 514 | 515 | ignore@^5.2.0: 516 | version "5.2.0" 517 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 518 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 519 | 520 | import-fresh@^3.0.0, import-fresh@^3.2.1: 521 | version "3.3.0" 522 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 523 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 524 | dependencies: 525 | parent-module "^1.0.0" 526 | resolve-from "^4.0.0" 527 | 528 | imurmurhash@^0.1.4: 529 | version "0.1.4" 530 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 531 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 532 | 533 | inflight@^1.0.4: 534 | version "1.0.6" 535 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 536 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 537 | dependencies: 538 | once "^1.3.0" 539 | wrappy "1" 540 | 541 | inherits@2: 542 | version "2.0.4" 543 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 544 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 545 | 546 | is-extglob@^2.1.1: 547 | version "2.1.1" 548 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 549 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 550 | 551 | is-glob@^4.0.0, is-glob@^4.0.3: 552 | version "4.0.3" 553 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 554 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 555 | dependencies: 556 | is-extglob "^2.1.1" 557 | 558 | is-path-inside@^3.0.3: 559 | version "3.0.3" 560 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 561 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 562 | 563 | isexe@^2.0.0: 564 | version "2.0.0" 565 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 566 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 567 | 568 | js-yaml@^4.1.0: 569 | version "4.1.0" 570 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 571 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 572 | dependencies: 573 | argparse "^2.0.1" 574 | 575 | json-schema-traverse@^0.4.1: 576 | version "0.4.1" 577 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 578 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 579 | 580 | json-stable-stringify-without-jsonify@^1.0.1: 581 | version "1.0.1" 582 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 583 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 584 | 585 | levn@^0.4.1: 586 | version "0.4.1" 587 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 588 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 589 | dependencies: 590 | prelude-ls "^1.2.1" 591 | type-check "~0.4.0" 592 | 593 | locate-path@^6.0.0: 594 | version "6.0.0" 595 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 596 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 597 | dependencies: 598 | p-locate "^5.0.0" 599 | 600 | lodash.merge@^4.6.2: 601 | version "4.6.2" 602 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 603 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 604 | 605 | minimatch@^3.0.4: 606 | version "3.0.4" 607 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 608 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 609 | dependencies: 610 | brace-expansion "^1.1.7" 611 | 612 | minimatch@^3.0.5, minimatch@^3.1.2: 613 | version "3.1.2" 614 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 615 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 616 | dependencies: 617 | brace-expansion "^1.1.7" 618 | 619 | ms@2.1.2: 620 | version "2.1.2" 621 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 622 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 623 | 624 | nanoid@^3.3.6: 625 | version "3.3.6" 626 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" 627 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== 628 | 629 | natural-compare@^1.4.0: 630 | version "1.4.0" 631 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 632 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 633 | 634 | once@^1.3.0: 635 | version "1.4.0" 636 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 637 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 638 | dependencies: 639 | wrappy "1" 640 | 641 | optionator@^0.9.1: 642 | version "0.9.1" 643 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 644 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 645 | dependencies: 646 | deep-is "^0.1.3" 647 | fast-levenshtein "^2.0.6" 648 | levn "^0.4.1" 649 | prelude-ls "^1.2.1" 650 | type-check "^0.4.0" 651 | word-wrap "^1.2.3" 652 | 653 | p-limit@^3.0.2: 654 | version "3.1.0" 655 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 656 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 657 | dependencies: 658 | yocto-queue "^0.1.0" 659 | 660 | p-locate@^5.0.0: 661 | version "5.0.0" 662 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 663 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 664 | dependencies: 665 | p-limit "^3.0.2" 666 | 667 | parent-module@^1.0.0: 668 | version "1.0.1" 669 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 670 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 671 | dependencies: 672 | callsites "^3.0.0" 673 | 674 | path-exists@^4.0.0: 675 | version "4.0.0" 676 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 677 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 678 | 679 | path-is-absolute@^1.0.0: 680 | version "1.0.1" 681 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 682 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 683 | 684 | path-key@^3.1.0: 685 | version "3.1.1" 686 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 687 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 688 | 689 | picocolors@^1.0.0: 690 | version "1.0.0" 691 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 692 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 693 | 694 | postcss@^8.4.23: 695 | version "8.4.23" 696 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" 697 | integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== 698 | dependencies: 699 | nanoid "^3.3.6" 700 | picocolors "^1.0.0" 701 | source-map-js "^1.0.2" 702 | 703 | prelude-ls@^1.2.1: 704 | version "1.2.1" 705 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 706 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 707 | 708 | punycode@^2.1.0: 709 | version "2.1.1" 710 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 711 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 712 | 713 | queue-microtask@^1.2.2: 714 | version "1.2.3" 715 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 716 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 717 | 718 | resolve-from@^4.0.0: 719 | version "4.0.0" 720 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 721 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 722 | 723 | reusify@^1.0.4: 724 | version "1.0.4" 725 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 726 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 727 | 728 | rimraf@^3.0.2: 729 | version "3.0.2" 730 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 731 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 732 | dependencies: 733 | glob "^7.1.3" 734 | 735 | rollup@^3.21.0: 736 | version "3.23.0" 737 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.23.0.tgz#b8d6146dac4bf058ee817f92820988e9b358b564" 738 | integrity sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ== 739 | optionalDependencies: 740 | fsevents "~2.3.2" 741 | 742 | run-parallel@^1.1.9: 743 | version "1.2.0" 744 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 745 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 746 | dependencies: 747 | queue-microtask "^1.2.2" 748 | 749 | shebang-command@^2.0.0: 750 | version "2.0.0" 751 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 752 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 753 | dependencies: 754 | shebang-regex "^3.0.0" 755 | 756 | shebang-regex@^3.0.0: 757 | version "3.0.0" 758 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 759 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 760 | 761 | source-map-js@^1.0.2: 762 | version "1.0.2" 763 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 764 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 765 | 766 | strip-ansi@^6.0.1: 767 | version "6.0.1" 768 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 769 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 770 | dependencies: 771 | ansi-regex "^5.0.1" 772 | 773 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 774 | version "3.1.1" 775 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 776 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 777 | 778 | supports-color@^7.1.0: 779 | version "7.2.0" 780 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 781 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 782 | dependencies: 783 | has-flag "^4.0.0" 784 | 785 | text-table@^0.2.0: 786 | version "0.2.0" 787 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 788 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 789 | 790 | type-check@^0.4.0, type-check@~0.4.0: 791 | version "0.4.0" 792 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 793 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 794 | dependencies: 795 | prelude-ls "^1.2.1" 796 | 797 | type-fest@^0.20.2: 798 | version "0.20.2" 799 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 800 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 801 | 802 | uri-js@^4.2.2: 803 | version "4.4.1" 804 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 805 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 806 | dependencies: 807 | punycode "^2.1.0" 808 | 809 | vite@^4.3.8: 810 | version "4.3.8" 811 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.8.tgz#70cd6a294ab52d7fb8f37f5bc63d117dd19e9918" 812 | integrity sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ== 813 | dependencies: 814 | esbuild "^0.17.5" 815 | postcss "^8.4.23" 816 | rollup "^3.21.0" 817 | optionalDependencies: 818 | fsevents "~2.3.2" 819 | 820 | webix-jet@^3.0.0: 821 | version "3.0.0" 822 | resolved "https://registry.yarnpkg.com/webix-jet/-/webix-jet-3.0.0.tgz#fafe40242ecb2bbb7d8473b029680a4f01f0c86c" 823 | integrity sha512-y/TEh0ECB/iZvkNCIGrmmHpBouzE0pSR+WJxWLHCy3sFpyTe9xJ4AUHJm0VxwS6F8h4f2SVowi91oJo6Ds38ng== 824 | 825 | which@^2.0.1: 826 | version "2.0.2" 827 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 828 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 829 | dependencies: 830 | isexe "^2.0.0" 831 | 832 | word-wrap@^1.2.3: 833 | version "1.2.3" 834 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 835 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 836 | 837 | wrappy@1: 838 | version "1.0.2" 839 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 840 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 841 | 842 | yocto-queue@^0.1.0: 843 | version "0.1.0" 844 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 845 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 846 | --------------------------------------------------------------------------------