bugfixes.
This commit is contained in:
parent
ef9a0853a0
commit
e0abcdaa0e
|
@ -1 +1,75 @@
|
||||||
{"levels":[{"name":"owner","permissions":[{"type":"create record","nodeKey":"/customers/1-{id}"},{"type":"delete record","nodeKey":"/customers/1-{id}"},{"type":"update record","nodeKey":"/customers/1-{id}"},{"type":"read record","nodeKey":"/customers/1-{id}"},{"type":"create record","nodeKey":"/customers/1-{id}/invoices/2-{id}"},{"type":"update record","nodeKey":"/customers/1-{id}/invoices/2-{id}"},{"type":"delete record","nodeKey":"/customers/1-{id}/invoices/2-{id}"},{"type":"read record","nodeKey":"/customers/1-{id}/invoices/2-{id}"},{"type":"write templates"},{"type":"create user"},{"type":"set password"},{"type":"create temporary access"},{"type":"enable or disable user"},{"type":"write access levels"},{"type":"list users"},{"type":"list access levels"},{"type":"manage index"},{"type":"set user access levels"},{"type":"manage collection"}]}],"version":0}
|
{
|
||||||
|
"levels": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"type": "create record",
|
||||||
|
"nodeKey": "/customers/1-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "delete record",
|
||||||
|
"nodeKey": "/customers/1-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "update record",
|
||||||
|
"nodeKey": "/customers/1-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "read record",
|
||||||
|
"nodeKey": "/customers/1-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "create record",
|
||||||
|
"nodeKey": "/customers/1-{id}/invoices/2-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "update record",
|
||||||
|
"nodeKey": "/customers/1-{id}/invoices/2-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "delete record",
|
||||||
|
"nodeKey": "/customers/1-{id}/invoices/2-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "read record",
|
||||||
|
"nodeKey": "/customers/1-{id}/invoices/2-{id}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "write templates"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "create user"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "set password"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "create temporary access"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "enable or disable user"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "write access levels"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "list users"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "list access levels"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "manage index"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "set user access levels"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "manage collection"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 0
|
||||||
|
}
|
||||||
|
|
|
@ -74,13 +74,19 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"actions": {
|
"actions": {
|
||||||
"output_to_file":
|
"output_to_file": {
|
||||||
{
|
|
||||||
"name": "output_to_file",
|
"name": "output_to_file",
|
||||||
"behaviourSource": "main",
|
"behaviourSource": "main",
|
||||||
"behaviourName": "outputToFile",
|
"behaviourName": "outputToFile",
|
||||||
"initialOptions": {}
|
"initialOptions": {}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"props": {
|
||||||
|
"main": {
|
||||||
|
"_component": "some_component"
|
||||||
|
},
|
||||||
|
"unauthenticated": {
|
||||||
|
"_component": "some_other_component"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"_lib": "index.js",
|
||||||
"textbox" : {
|
"textbox" : {
|
||||||
"path": "./textbox",
|
"path": "./textbox",
|
||||||
"name": "Textbox",
|
"name": "Textbox",
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "testapp",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "plugins.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"budibase-client": "file:../../../client/dist",
|
||||||
|
"budibase-standard-components": "file:../../../standard-components/dist"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,6 @@
|
||||||
{
|
{
|
||||||
"main": {
|
"main": {
|
||||||
"index" : {
|
"index": {},
|
||||||
|
|
||||||
},
|
|
||||||
"appBody": "./main.app.json"
|
"appBody": "./main.app.json"
|
||||||
},
|
},
|
||||||
"unauthenticated": {
|
"unauthenticated": {
|
||||||
|
@ -15,5 +13,13 @@
|
||||||
},
|
},
|
||||||
"appBody": "./unauthenticated.app.json"
|
"appBody": "./unauthenticated.app.json"
|
||||||
},
|
},
|
||||||
"componentLibraries": ["./customComponents", "./moreCustomComponents"]
|
"componentLibraries": [
|
||||||
|
"./customComponents",
|
||||||
|
"./moreCustomComponents",
|
||||||
|
"budibase-standard-components"
|
||||||
|
],
|
||||||
|
"stylesheets": [
|
||||||
|
"https://css-r-us.com/myawesomestyles.css",
|
||||||
|
"/local.css"
|
||||||
|
]
|
||||||
}
|
}
|
|
@ -1 +0,0 @@
|
||||||
console.log("test app 1 - main");
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
window['##BUDIBASE_APPDEFINITION##'] = {"hierarchy":{"name":"root","type":"root","children":[{"name":"customer","type":"record","fields":[{"name":"name","type":"string","typeOptions":{"maxLength":1000,"values":null,"allowDeclaredValuesOnly":false},"label":"name","getInitialValue":"default","getUndefinedValue":"default"}],"children":[{"name":"invoiceyooo","type":"record","fields":[{"name":"amount","type":"number","typeOptions":{"minValue":99999999999,"maxValue":99999999999,"decimalPlaces":2},"label":"amount","getInitialValue":"default","getUndefinedValue":"default"}],"children":[],"validationRules":[],"nodeId":2,"indexes":[],"allidsShardFactor":1,"collectionName":"invoices","isSingle":false}],"validationRules":[],"nodeId":1,"indexes":[],"allidsShardFactor":64,"collectionName":"customers","isSingle":false}],"pathMaps":[],"indexes":[],"nodeId":0},"componentLibraries":["./customComponents","./moreCustomComponents","budibase-standard-components"],"appRootPath":"","props":{"_component":"some_component"}}
|
|
@ -1,3 +1,21 @@
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<body>MAIN - TEST APP 1</body>
|
<head>
|
||||||
|
<meta charset='utf8'>
|
||||||
|
<meta name='viewport' content='width=device-width'>
|
||||||
|
|
||||||
|
<title>Budibase App</title>
|
||||||
|
<link rel='icon' type='image/png' href='//assets/favicon.png'>
|
||||||
|
|
||||||
|
<link rel='stylesheet' href='https://css-r-us.com/myawesomestyles.css'>
|
||||||
|
<link rel='stylesheet' href='///local.css'>
|
||||||
|
|
||||||
|
<script src='/budibase-client.js'></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body id="app">
|
||||||
|
<script src='/clientAppDefinition.js'></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
window['##BUDIBASE_APPDEFINITION##'] = {"hierarchy":{"name":"root","type":"root","children":[{"name":"customer","type":"record","fields":[{"name":"name","type":"string","typeOptions":{"maxLength":1000,"values":null,"allowDeclaredValuesOnly":false},"label":"name","getInitialValue":"default","getUndefinedValue":"default"}],"children":[{"name":"invoiceyooo","type":"record","fields":[{"name":"amount","type":"number","typeOptions":{"minValue":99999999999,"maxValue":99999999999,"decimalPlaces":2},"label":"amount","getInitialValue":"default","getUndefinedValue":"default"}],"children":[],"validationRules":[],"nodeId":2,"indexes":[],"allidsShardFactor":1,"collectionName":"invoices","isSingle":false}],"validationRules":[],"nodeId":1,"indexes":[],"allidsShardFactor":64,"collectionName":"customers","isSingle":false}],"pathMaps":[],"indexes":[],"nodeId":0},"componentLibraries":["./customComponents","./moreCustomComponents","budibase-standard-components"],"appRootPath":"","props":{"_component":"some_other_component"}}
|
|
@ -1,3 +1,21 @@
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<body>UNAUTHENTICATED - TEST APP 1</body>
|
<head>
|
||||||
|
<meta charset='utf8'>
|
||||||
|
<meta name='viewport' content='width=device-width'>
|
||||||
|
|
||||||
|
<title>Test App 1 - Login</title>
|
||||||
|
<link rel='icon' type='image/png' href='//assets/favicon.png'>
|
||||||
|
|
||||||
|
<link rel='stylesheet' href='https://css-r-us.com/myawesomestyles.css'>
|
||||||
|
<link rel='stylesheet' href='///local.css'>
|
||||||
|
|
||||||
|
<script src='/budibase-client.js'></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body id="app">
|
||||||
|
<script src='/clientAppDefinition.js'></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -0,0 +1,9 @@
|
||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"budibase-client@file:../../../client/dist":
|
||||||
|
version "0.0.1"
|
||||||
|
|
||||||
|
"budibase-standard-components@file:../../../standard-components/dist":
|
||||||
|
version "1.0.0"
|
|
@ -129,6 +129,7 @@
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
|
[
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
@ -150,7 +151,10 @@
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"mainUi": {},
|
"props": {
|
||||||
"unauthenticatedUi": {}
|
"main": {},
|
||||||
|
"unauthenticated": {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Joes Button",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/button",
|
|
||||||
"props": {
|
|
||||||
"className": "btn btn-danger"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"button"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Mikes Panel",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/stackpanel",
|
|
||||||
"props": {
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"_component": "Mikes Panel:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Primary Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_component": "Mikes Panel:children",
|
|
||||||
"control": {
|
|
||||||
"_component": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_component": "Mikes Panel",
|
|
||||||
"children[0].control": {
|
|
||||||
"_component": "Primary Button",
|
|
||||||
"contentText": "yeo",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"disabled": false
|
|
||||||
},
|
|
||||||
"direction": "vertical",
|
|
||||||
"height": "200px",
|
|
||||||
"width": "200px"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"div",
|
|
||||||
"container",
|
|
||||||
"layout",
|
|
||||||
"panel"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,11 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "Primary Button",
|
"name": "Primary Button",
|
||||||
"description": "",
|
"description": "",
|
||||||
"inherits": "./standard-components/button",
|
"inherits": "budibase-standard-components/button",
|
||||||
"props": {
|
"props": {
|
||||||
"className": "btn btn-primary",
|
"className": "btn btn-pimary"
|
||||||
"_component": "Primary Button",
|
|
||||||
"disabled": false
|
|
||||||
},
|
},
|
||||||
"tags": [
|
"tags": [
|
||||||
"button"
|
"button"
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Random Button",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/button",
|
|
||||||
"props": {
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": "./standard-components/button",
|
|
||||||
"contentText": "Inner Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "default",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"button"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Success Button",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/button",
|
|
||||||
"props": {
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"_component": "Success Button"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"button"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"name": "another noubtbtk",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/button",
|
|
||||||
"props": {
|
|
||||||
"contentText": "Mike"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"button"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
{
|
|
||||||
"name": "listofstuff",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/stackpanel",
|
|
||||||
"props": {
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"_component": "listofstuff:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Primary Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_component": "listofstuff:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Joes Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-danger",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_component": "listofstuff",
|
|
||||||
"direction": "vertical"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"div",
|
|
||||||
"container",
|
|
||||||
"layout",
|
|
||||||
"panel"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,9 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "login2",
|
"name": "login",
|
||||||
"description": "",
|
"description": "",
|
||||||
"inherits": "./standard-components/login",
|
"inherits": "budibase-standard-components/login",
|
||||||
"props": {
|
"props": {
|
||||||
"usernameLabel": "User"
|
"logo": "/assets/budibase-logo.png"
|
||||||
},
|
},
|
||||||
"tags": [
|
"tags": [
|
||||||
"login",
|
"login",
|
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
"name": "login_screen",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/login",
|
|
||||||
"props": {
|
|
||||||
"usernameLabel": "User",
|
|
||||||
"_component": "login_screen",
|
|
||||||
"passwordLabel": "Secret"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"login",
|
|
||||||
"credentials",
|
|
||||||
"password",
|
|
||||||
"logon"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"name": "mikes",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/stackpanel",
|
|
||||||
"props": {
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"_component": "undefined:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Primary Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_component": "mikes"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"div",
|
|
||||||
"container",
|
|
||||||
"layout",
|
|
||||||
"panel"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"name": "schpanel",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/stackpanel",
|
|
||||||
"props": {
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"_component": "undefined:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Primary Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"div",
|
|
||||||
"container",
|
|
||||||
"layout",
|
|
||||||
"panel"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"name": "subfolder/path/buttony",
|
||||||
|
"description": "",
|
||||||
|
"inherits": "budibase-standard-components/button",
|
||||||
|
"props": {},
|
||||||
|
"tags": [
|
||||||
|
"button"
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,51 +0,0 @@
|
||||||
{
|
|
||||||
"name": "yeeeeo",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "./standard-components/stackpanel",
|
|
||||||
"props": {
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"_component": "yeeeeo:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Primary Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "btn btn-primary",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"_component": "yeeeeo:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "Random Button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": "./standard-components/button",
|
|
||||||
"contentText": "Inner Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "default",
|
|
||||||
"disabled": false
|
|
||||||
},
|
|
||||||
"className": "default",
|
|
||||||
"disabled": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"_component": "yeeeeo",
|
|
||||||
"height": "400px",
|
|
||||||
"width": "400px",
|
|
||||||
"direction": "vertical",
|
|
||||||
"itemContainerClass": "",
|
|
||||||
"containerClass": ""
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"div",
|
|
||||||
"container",
|
|
||||||
"layout",
|
|
||||||
"panel"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -7,6 +7,8 @@
|
||||||
"index": {},
|
"index": {},
|
||||||
"appBody": ""
|
"appBody": ""
|
||||||
},
|
},
|
||||||
"componentLibraries": [],
|
"componentLibraries": [
|
||||||
|
"budibase-standard-components"
|
||||||
|
],
|
||||||
"stylesheets": []
|
"stylesheets": []
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
window['##BUDIBASE_APPDEFINITION##'] = {"hierarchy":{"name":"root","type":"root","children":[{"name":"customer","type":"record","fields":[{"name":"name","type":"string","typeOptions":{"maxLength":1000,"values":null,"allowDeclaredValuesOnly":false},"label":"name","getInitialValue":"default","getUndefinedValue":"default"}],"children":[{"name":"invoiceyooo","type":"record","fields":[{"name":"amount","type":"number","typeOptions":{"minValue":99999999999,"maxValue":99999999999,"decimalPlaces":2},"label":"amount","getInitialValue":"default","getUndefinedValue":"default"}],"children":[],"validationRules":[],"nodeId":2,"indexes":[],"allidsShardFactor":1,"collectionName":"invoices","isSingle":false}],"validationRules":[],"nodeId":1,"indexes":[{"name":"customer_invoices","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[2],"nodeId":5}],"allidsShardFactor":64,"collectionName":"customers","isSingle":false}],"pathMaps":[],"indexes":[{"name":"Yeo index","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[1],"nodeId":4},{"name":"everyones_invoices","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[2],"nodeId":6}],"nodeId":0},"componentLibraries":["budibase-standard-components"],"appRootPath":"/testApp2","props":{}}
|
|
@ -1,3 +1,19 @@
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<body>MAIN - TEST APP 1</body>
|
<head>
|
||||||
|
<meta charset='utf8'>
|
||||||
|
<meta name='viewport' content='width=device-width'>
|
||||||
|
|
||||||
|
<title>Budibase App</title>
|
||||||
|
<link rel='icon' type='image/png' href='/testApp2//assets/favicon.png'>
|
||||||
|
|
||||||
|
|
||||||
|
<script src='/testApp2/budibase-client.js'></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body id="app">
|
||||||
|
<script src='/testApp2/clientAppDefinition.js'></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1 @@
|
||||||
|
window['##BUDIBASE_APPDEFINITION##'] = {"hierarchy":{"name":"root","type":"root","children":[{"name":"customer","type":"record","fields":[{"name":"name","type":"string","typeOptions":{"maxLength":1000,"values":null,"allowDeclaredValuesOnly":false},"label":"name","getInitialValue":"default","getUndefinedValue":"default"}],"children":[{"name":"invoiceyooo","type":"record","fields":[{"name":"amount","type":"number","typeOptions":{"minValue":99999999999,"maxValue":99999999999,"decimalPlaces":2},"label":"amount","getInitialValue":"default","getUndefinedValue":"default"}],"children":[],"validationRules":[],"nodeId":2,"indexes":[],"allidsShardFactor":1,"collectionName":"invoices","isSingle":false}],"validationRules":[],"nodeId":1,"indexes":[{"name":"customer_invoices","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[2],"nodeId":5}],"allidsShardFactor":64,"collectionName":"customers","isSingle":false}],"pathMaps":[],"indexes":[{"name":"Yeo index","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[1],"nodeId":4},{"name":"everyones_invoices","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[2],"nodeId":6}],"nodeId":0},"componentLibraries":["budibase-standard-components"],"appRootPath":"/testApp2","props":{}}
|
|
@ -1,3 +1,19 @@
|
||||||
|
<!doctype html>
|
||||||
<html>
|
<html>
|
||||||
<body>UNAUTHENTICATED - TEST APP 1</body>
|
<head>
|
||||||
|
<meta charset='utf8'>
|
||||||
|
<meta name='viewport' content='width=device-width'>
|
||||||
|
|
||||||
|
<title>Budibase App</title>
|
||||||
|
<link rel='icon' type='image/png' href='/testApp2//assets/favicon.png'>
|
||||||
|
|
||||||
|
|
||||||
|
<script src='/testApp2/budibase-client.js'></script>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body id="app">
|
||||||
|
<script src='/testApp2/clientAppDefinition.js'></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -1,43 +1,43 @@
|
||||||
main.svelte-j8mzr7{height:100%;width:100%;font-family:"Lato", Helvetica, Arial, sans-serif}
|
main.svelte-j8mzr7{height:100%;width:100%;font-family:"Lato", Helvetica, Arial, sans-serif}
|
||||||
.root.svelte-e4n7zy{position:fixed;margin:0 auto;text-align:center;top:20%;width:100%}.inner.svelte-e4n7zy{display:inline-block;margin:auto}.logo.svelte-e4n7zy{width:300px;margin-bottom:40px}.root.svelte-e4n7zy .option{width:250px}.app-link.svelte-e4n7zy{margin-top:10px;display:block}
|
.root.svelte-e4n7zy{position:fixed;margin:0 auto;text-align:center;top:20%;width:100%}.inner.svelte-e4n7zy{display:inline-block;margin:auto}.logo.svelte-e4n7zy{width:300px;margin-bottom:40px}.root.svelte-e4n7zy .option{width:250px}.app-link.svelte-e4n7zy{margin-top:10px;display:block}
|
||||||
.root.svelte-fkeby9{height:100%;width:100%;display:flex;flex-direction:column}.top-nav.svelte-fkeby9{flex:0 0 auto;height:25px;background:white;border-style:solid;border-width:0px 0px 1px 0px;border-color:var(--lightslate);padding:5px;width:100%}.content.svelte-fkeby9{flex:1 1 auto;width:100%;height:100px}.content.svelte-fkeby9>div.svelte-fkeby9{height:100%;width:100%}.topnavitem.svelte-fkeby9{cursor:pointer;color:var(--slate);padding:0px 15px}.topnavitem.svelte-fkeby9:hover{color:var(--secondary75)}.active.svelte-fkeby9{color:var(--secondary100)}
|
.root.svelte-fkeby9{height:100%;width:100%;display:flex;flex-direction:column}.top-nav.svelte-fkeby9{flex:0 0 auto;height:25px;background:white;border-style:solid;border-width:0px 0px 1px 0px;border-color:var(--lightslate);padding:5px;width:100%}.content.svelte-fkeby9{flex:1 1 auto;width:100%;height:100px}.content.svelte-fkeby9>div.svelte-fkeby9{height:100%;width:100%}.topnavitem.svelte-fkeby9{cursor:pointer;color:var(--slate);padding:0px 15px}.topnavitem.svelte-fkeby9:hover{color:var(--secondary75)}.active.svelte-fkeby9{color:var(--secondary100)}
|
||||||
button.svelte-bxuckr{border-style:none;background-color:rgba(0,0,0,0);cursor:pointer;outline:none}button.svelte-bxuckr:hover{color:var(--hovercolor)}button.svelte-bxuckr:active{outline:none}
|
|
||||||
.border-normal.svelte-7rfkdx{border-radius:var(--borderradiusall)}.border-left.svelte-7rfkdx{border-radius:var(--borderradius) 0 0 var(--borderradius)}.border-right.svelte-7rfkdx{border-radius:0 var(--borderradius) var(--borderradius) 0}.border-middle.svelte-7rfkdx{border-radius:0}button.svelte-7rfkdx{border-style:solid;padding:7px 15px;cursor:pointer}.primary.svelte-7rfkdx{background-color:var(--primary100);border-color:var(--primary100);color:var(--white)}.primary.svelte-7rfkdx:hover{background-color:var(--primary75);border-color:var(--primary75)}.primary.svelte-7rfkdx:active{background-color:var(--primarydark);border-color:var(--primarydark)}.primary-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--primary100);color:var(--primary100)}.primary-outline.svelte-7rfkdx:hover{background-color:var(--primary10)}.primary-outline.svelte-7rfkdx:pressed{background-color:var(--primary25)}.secondary.svelte-7rfkdx{background-color:var(--secondary100);border-color:var(--secondary100);color:var(--white)}.secondary.svelte-7rfkdx:hover{background-color:var(--secondary75);border-color:var(--secondary75)}.secondary.svelte-7rfkdx:pressed{background-color:var(--secondarydark);border-color:var(--secondarydark)}.secondary-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--secondary100);color:var(--secondary100)}.secondary-outline.svelte-7rfkdx:hover{background-color:var(--secondary10)}.secondary-outline.svelte-7rfkdx:pressed{background-color:var(--secondary25)}.success.svelte-7rfkdx{background-color:var(--success100);border-color:var(--success100);color:var(--white)}.success.svelte-7rfkdx:hover{background-color:var(--success75);border-color:var(--success75)}.success.svelte-7rfkdx:pressed{background-color:var(--successdark);border-color:var(--successdark)}.success-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--success100);color:var(--success100)}.success-outline.svelte-7rfkdx:hover{background-color:var(--success10)}.success-outline.svelte-7rfkdx:pressed{background-color:var(--success25)}.deletion.svelte-7rfkdx{background-color:var(--deletion100);border-color:var(--deletion100);color:var(--white)}.deletion.svelte-7rfkdx:hover{background-color:var(--deletion75);border-color:var(--deletion75)}.deletion.svelte-7rfkdx:pressed{background-color:var(--deletiondark);border-color:var(--deletiondark)}.deletion-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--deletion100);color:var(--deletion100)}.deletion-outline.svelte-7rfkdx:hover{background-color:var(--deletion10)}.deletion-outline.svelte-7rfkdx:pressed{background-color:var(--deletion25)}
|
|
||||||
.root.svelte-q8uz1n{height:100%;display:flex}.content.svelte-q8uz1n{flex:1 1 auto;height:100%;background-color:var(--white);margin:0}.nav.svelte-q8uz1n{flex:0 1 auto;width:300px;height:100%}
|
.root.svelte-q8uz1n{height:100%;display:flex}.content.svelte-q8uz1n{flex:1 1 auto;height:100%;background-color:var(--white);margin:0}.nav.svelte-q8uz1n{flex:0 1 auto;width:300px;height:100%}
|
||||||
|
.border-normal.svelte-7rfkdx{border-radius:var(--borderradiusall)}.border-left.svelte-7rfkdx{border-radius:var(--borderradius) 0 0 var(--borderradius)}.border-right.svelte-7rfkdx{border-radius:0 var(--borderradius) var(--borderradius) 0}.border-middle.svelte-7rfkdx{border-radius:0}button.svelte-7rfkdx{border-style:solid;padding:7px 15px;cursor:pointer}.primary.svelte-7rfkdx{background-color:var(--primary100);border-color:var(--primary100);color:var(--white)}.primary.svelte-7rfkdx:hover{background-color:var(--primary75);border-color:var(--primary75)}.primary.svelte-7rfkdx:active{background-color:var(--primarydark);border-color:var(--primarydark)}.primary-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--primary100);color:var(--primary100)}.primary-outline.svelte-7rfkdx:hover{background-color:var(--primary10)}.primary-outline.svelte-7rfkdx:pressed{background-color:var(--primary25)}.secondary.svelte-7rfkdx{background-color:var(--secondary100);border-color:var(--secondary100);color:var(--white)}.secondary.svelte-7rfkdx:hover{background-color:var(--secondary75);border-color:var(--secondary75)}.secondary.svelte-7rfkdx:pressed{background-color:var(--secondarydark);border-color:var(--secondarydark)}.secondary-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--secondary100);color:var(--secondary100)}.secondary-outline.svelte-7rfkdx:hover{background-color:var(--secondary10)}.secondary-outline.svelte-7rfkdx:pressed{background-color:var(--secondary25)}.success.svelte-7rfkdx{background-color:var(--success100);border-color:var(--success100);color:var(--white)}.success.svelte-7rfkdx:hover{background-color:var(--success75);border-color:var(--success75)}.success.svelte-7rfkdx:pressed{background-color:var(--successdark);border-color:var(--successdark)}.success-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--success100);color:var(--success100)}.success-outline.svelte-7rfkdx:hover{background-color:var(--success10)}.success-outline.svelte-7rfkdx:pressed{background-color:var(--success25)}.deletion.svelte-7rfkdx{background-color:var(--deletion100);border-color:var(--deletion100);color:var(--white)}.deletion.svelte-7rfkdx:hover{background-color:var(--deletion75);border-color:var(--deletion75)}.deletion.svelte-7rfkdx:pressed{background-color:var(--deletiondark);border-color:var(--deletiondark)}.deletion-outline.svelte-7rfkdx{background-color:var(--white);border-color:var(--deletion100);color:var(--deletion100)}.deletion-outline.svelte-7rfkdx:hover{background-color:var(--deletion10)}.deletion-outline.svelte-7rfkdx:pressed{background-color:var(--deletion25)}
|
||||||
|
button.svelte-bxuckr{border-style:none;background-color:rgba(0,0,0,0);cursor:pointer;outline:none}button.svelte-bxuckr:hover{color:var(--hovercolor)}button.svelte-bxuckr:active{outline:none}
|
||||||
.root.svelte-1dih19s{display:grid;grid-template-columns:[uiNav] 250px [preview] auto [properties] 300px;height:100%;width:100%}.ui-nav.svelte-1dih19s{grid-column-start:uiNav;background-color:var(--primary10);height:100%}.properties-pane.svelte-1dih19s{grid-column-start:properties;background-color:var(--primary10);height:100%}.pages-list-container.svelte-1dih19s{padding-top:20px}.nav-group-header.svelte-1dih19s{font-size:10pt;padding-left:10px}.nav-items-container.svelte-1dih19s{padding-top:10px}.nav-group-header.svelte-1dih19s{display:grid;grid-template-columns:[icon] auto [title] 1fr [button] auto;padding:10px 2px 0px 7px}.nav-group-header.svelte-1dih19s>div.svelte-1dih19s:nth-child(1){padding:0px 7px 0px 0px;vertical-align:bottom;grid-column-start:icon;margin-right:5px}.nav-group-header.svelte-1dih19s>span.svelte-1dih19s:nth-child(2){margin-left:5px;vertical-align:bottom;grid-column-start:title;margin-top:auto}.nav-group-header.svelte-1dih19s>div.svelte-1dih19s:nth-child(3){vertical-align:bottom;grid-column-start:button;cursor:pointer;color:var(--slate)}.nav-group-header.svelte-1dih19s>div.svelte-1dih19s:nth-child(3):hover{color:var(--primary75)}
|
.root.svelte-1dih19s{display:grid;grid-template-columns:[uiNav] 250px [preview] auto [properties] 300px;height:100%;width:100%}.ui-nav.svelte-1dih19s{grid-column-start:uiNav;background-color:var(--primary10);height:100%}.properties-pane.svelte-1dih19s{grid-column-start:properties;background-color:var(--primary10);height:100%}.pages-list-container.svelte-1dih19s{padding-top:20px}.nav-group-header.svelte-1dih19s{font-size:10pt;padding-left:10px}.nav-items-container.svelte-1dih19s{padding-top:10px}.nav-group-header.svelte-1dih19s{display:grid;grid-template-columns:[icon] auto [title] 1fr [button] auto;padding:10px 2px 0px 7px}.nav-group-header.svelte-1dih19s>div.svelte-1dih19s:nth-child(1){padding:0px 7px 0px 0px;vertical-align:bottom;grid-column-start:icon;margin-right:5px}.nav-group-header.svelte-1dih19s>span.svelte-1dih19s:nth-child(2){margin-left:5px;vertical-align:bottom;grid-column-start:title;margin-top:auto}.nav-group-header.svelte-1dih19s>div.svelte-1dih19s:nth-child(3){vertical-align:bottom;grid-column-start:button;cursor:pointer;color:var(--slate)}.nav-group-header.svelte-1dih19s>div.svelte-1dih19s:nth-child(3):hover{color:var(--primary75)}
|
||||||
h4.svelte-o0id5a{margin-top:20px}
|
h4.svelte-o0id5a{margin-top:20px}
|
||||||
.root.svelte-1cnqtw{color:var(--secondary50)}.hierarchy-item.svelte-1cnqtw{cursor:pointer;padding:5px 0px}.hierarchy-item.svelte-1cnqtw:hover{color:var(--secondary75)}.component.svelte-1cnqtw{margin-left:5px}.currentfolder.svelte-1cnqtw{color:var(--secondary100)}.selected.svelte-1cnqtw{color:var(--primary100)}.title.svelte-1cnqtw{margin-left:10px}
|
|
||||||
.root.svelte-183dehm{height:100%;border-style:solid;border-color:var(--lightslate);border-width:0px 0px 0px 1px}.padding.svelte-183dehm{padding:0px 5px 0px 10px}.title.svelte-183dehm{background-color:white;padding:3px;display:grid;grid-template-columns:[name] 1fr [actions] auto}.title.svelte-183dehm>div.svelte-183dehm:nth-child(1){grid-column-start:name;color:var(--secondary100)}.title.svelte-183dehm>div.svelte-183dehm:nth-child(2){grid-column-start:actions}.section-header.svelte-183dehm{font-style:italic;color:var(--slate);border-style:solid;border-color:var(--lightslate);border-width:0px 0px 1px 0px}.section-header.svelte-183dehm{vertical-align:middle;margin-top:20px}
|
|
||||||
h1.svelte-2ukyrk{font-size:1.2em}
|
|
||||||
.root.svelte-ffb307{padding-bottom:10px;padding-left:10px;font-size:16px;color:var(--secondary50)}.hierarchy-item.svelte-ffb307{cursor:pointer;padding:5px 0px}.hierarchy-item.svelte-ffb307:hover{color:var(--secondary75)}.component.svelte-ffb307{margin-left:5px}.selected.svelte-ffb307{color:var(--primary100)}.title.svelte-ffb307{margin-left:10px}
|
|
||||||
.section-container.svelte-1t0x31f{padding:15px;border-style:dotted;border-width:1px;border-color:var(--lightslate);border-radius:2px}.section-container.svelte-1t0x31f:nth-child(1){margin-bottom:15px}.row-text.svelte-1t0x31f{margin-right:15px;color:var(--primary100)}input.svelte-1t0x31f{margin-right:15px}p.svelte-1t0x31f>span.svelte-1t0x31f{margin-left:30px}.header.svelte-1t0x31f{display:grid;grid-template-columns:[title] 1fr [icon] auto}.header.svelte-1t0x31f>div.svelte-1t0x31f:nth-child(1){grid-column-start:title}.header.svelte-1t0x31f>div.svelte-1t0x31f:nth-child(2){grid-column-start:icon}
|
|
||||||
.root.svelte-1ersoxu{padding:15px}.help-text.svelte-1ersoxu{color:var(--slate);font-size:10pt}
|
|
||||||
.component-preview.svelte-1jir83x{display:grid;grid-template-rows:[top] 1fr [middle] auto [bottom] 1fr;grid-template-columns:[left] 1fr [middle] auto [right] 1fr;grid-column-start:preview;height:100%}.component-container.svelte-1jir83x{grid-row-start:middle;grid-column-start:middle}
|
|
||||||
.root.svelte-zy9ybu{height:100%;background-color:var(--primary10)}.items-root.svelte-zy9ybu{display:flex;flex-direction:column;max-height:100%;height:10px}.hierarchy.svelte-zy9ybu{flex:1 1 auto}.hierarchy-title-row.svelte-zy9ybu{padding:15px 7px;font-size:12pt;display:flex;font-weight:bold}.hierarchy-title.svelte-zy9ybu{flex:auto 1 1}.space-filler.svelte-zy9ybu{flex:1 1 auto}
|
.root.svelte-zy9ybu{height:100%;background-color:var(--primary10)}.items-root.svelte-zy9ybu{display:flex;flex-direction:column;max-height:100%;height:10px}.hierarchy.svelte-zy9ybu{flex:1 1 auto}.hierarchy-title-row.svelte-zy9ybu{padding:15px 7px;font-size:12pt;display:flex;font-weight:bold}.hierarchy-title.svelte-zy9ybu{flex:auto 1 1}.space-filler.svelte-zy9ybu{flex:1 1 auto}
|
||||||
|
.root.svelte-zzs4qg{padding:10px}
|
||||||
.root.svelte-apja7r{height:100%;position:relative}.actions-header.svelte-apja7r{flex:0 1 auto}.node-view.svelte-apja7r{overflow-y:auto;flex:1 1 auto}
|
.root.svelte-apja7r{height:100%;position:relative}.actions-header.svelte-apja7r{flex:0 1 auto}.node-view.svelte-apja7r{overflow-y:auto;flex:1 1 auto}
|
||||||
.root.svelte-1qmjs65{padding:10px}.edit-button.svelte-1qmjs65{cursor:pointer;color:var(--white)}tr.svelte-1qmjs65:hover .edit-button.svelte-1qmjs65{color:var(--secondary75)}
|
.root.svelte-1qmjs65{padding:10px}.edit-button.svelte-1qmjs65{cursor:pointer;color:var(--white)}tr.svelte-1qmjs65:hover .edit-button.svelte-1qmjs65{color:var(--secondary75)}
|
||||||
.root.svelte-zzs4qg{padding:10px}
|
.root.svelte-1cnqtw{color:var(--secondary50)}.hierarchy-item.svelte-1cnqtw{cursor:pointer;padding:5px 0px}.hierarchy-item.svelte-1cnqtw:hover{color:var(--secondary75)}.component.svelte-1cnqtw{margin-left:5px}.currentfolder.svelte-1cnqtw{color:var(--secondary100)}.selected.svelte-1cnqtw{color:var(--primary100)}.title.svelte-1cnqtw{margin-left:10px}
|
||||||
.root.svelte-d6wwkb{display:flex}.root.svelte-d6wwkb:last-child{border-radius:0 var(--borderradius) var(--borderradius) 0}.root.svelte-d6wwkb:first-child{border-radius:var(--borderradius) 0 0 var(--borderradius)}.root.svelte-d6wwkb:not(:first-child):not(:last-child){border-radius:0}
|
.root.svelte-ffb307{padding-bottom:10px;padding-left:10px;font-size:16px;color:var(--secondary50)}.hierarchy-item.svelte-ffb307{cursor:pointer;padding:5px 0px}.hierarchy-item.svelte-ffb307:hover{color:var(--secondary75)}.component.svelte-ffb307{margin-left:5px}.selected.svelte-ffb307{color:var(--primary100)}.title.svelte-ffb307{margin-left:10px}
|
||||||
.info-text.svelte-um9cf7{font-size:0.8em;color:var(--slate)}
|
h1.svelte-2ukyrk{font-size:1.2em}
|
||||||
.title.svelte-1pp53c5{padding:3px;background-color:white;color:var(--secondary100);border-style:solid;border-width:1px 0 0 0;border-color:var(--lightslate)}.title.svelte-1pp53c5>span.svelte-1pp53c5{margin-left:10px}
|
.root.svelte-183dehm{height:100%;border-style:solid;border-color:var(--lightslate);border-width:0px 0px 0px 1px}.padding.svelte-183dehm{padding:0px 5px 0px 10px}.title.svelte-183dehm{background-color:white;padding:3px;display:grid;grid-template-columns:[name] 1fr [actions] auto}.title.svelte-183dehm>div.svelte-183dehm:nth-child(1){grid-column-start:name;color:var(--secondary100)}.title.svelte-183dehm>div.svelte-183dehm:nth-child(2){grid-column-start:actions}.section-header.svelte-183dehm{font-style:italic;color:var(--slate);border-style:solid;border-color:var(--lightslate);border-width:0px 0px 1px 0px}.section-header.svelte-183dehm{vertical-align:middle;margin-top:20px}
|
||||||
.root.svelte-1sxai5n{font-size:10pt}.padding.svelte-1sxai5n{padding:0 10px}.inherited-title.svelte-1sxai5n{margin-top:40px;display:grid;grid-template-columns:[name] 1fr [actions] auto;border-style:solid;border-width:0px 0px 1px 0px;border-color:var(--lightslate);font-style:italic}.inherited-title.svelte-1sxai5n>div.svelte-1sxai5n:nth-child(1){grid-column-start:name;color:var(--slate)}.inherited-title.svelte-1sxai5n>div.svelte-1sxai5n:nth-child(2){grid-column-start:actions;color:var(--secondary100)}
|
.section-container.svelte-1t0x31f{padding:15px;border-style:dotted;border-width:1px;border-color:var(--lightslate);border-radius:2px}.section-container.svelte-1t0x31f:nth-child(1){margin-bottom:15px}.row-text.svelte-1t0x31f{margin-right:15px;color:var(--primary100)}input.svelte-1t0x31f{margin-right:15px}p.svelte-1t0x31f>span.svelte-1t0x31f{margin-left:30px}.header.svelte-1t0x31f{display:grid;grid-template-columns:[title] 1fr [icon] auto}.header.svelte-1t0x31f>div.svelte-1t0x31f:nth-child(1){grid-column-start:title}.header.svelte-1t0x31f>div.svelte-1t0x31f:nth-child(2){grid-column-start:icon}
|
||||||
.component.svelte-13tuzj8{padding:5px;border-style:solid;border-width:0 0 1px 0;border-color:var(--lightslate);cursor:pointer}.component.svelte-13tuzj8:hover{background-color:var(--primary10)}.component.svelte-13tuzj8>.title.svelte-13tuzj8{font-size:13pt;color:var(--secondary100)}.component.svelte-13tuzj8>.description.svelte-13tuzj8{font-size:10pt;color:var(--primary75);font-style:italic}
|
.component-preview.svelte-1jir83x{display:grid;grid-template-rows:[top] 1fr [middle] auto [bottom] 1fr;grid-template-columns:[left] 1fr [middle] auto [right] 1fr;grid-column-start:preview;height:100%}.component-container.svelte-1jir83x{grid-row-start:middle;grid-column-start:middle}
|
||||||
|
.root.svelte-1ersoxu{padding:15px}.help-text.svelte-1ersoxu{color:var(--slate);font-size:10pt}
|
||||||
.root.svelte-1bn4xbe{display:block;font-size:12pt;width:100%;cursor:pointer}.title.svelte-1bn4xbe{padding-top:5px;padding-right:5px;padding-bottom:5px;color:var(--secondary100)}.title.svelte-1bn4xbe:hover{background-color:var(--secondary10)}.active.svelte-1bn4xbe{background-color:var(--primary10)}
|
.root.svelte-1bn4xbe{display:block;font-size:12pt;width:100%;cursor:pointer}.title.svelte-1bn4xbe{padding-top:5px;padding-right:5px;padding-bottom:5px;color:var(--secondary100)}.title.svelte-1bn4xbe:hover{background-color:var(--secondary10)}.active.svelte-1bn4xbe{background-color:var(--primary10)}
|
||||||
.nav-item.svelte-1y614ns{padding:7px;font-size:12pt;font-weight:bold;cursor:pointer;flex:0 0 auto}.nav-item.svelte-1y614ns:hover{background-color:var(--primary10)}.active.svelte-1y614ns{background-color:var(--primary10)}
|
.nav-item.svelte-1y614ns{padding:7px;font-size:12pt;font-weight:bold;cursor:pointer;flex:0 0 auto}.nav-item.svelte-1y614ns:hover{background-color:var(--primary10)}.active.svelte-1y614ns{background-color:var(--primary10)}
|
||||||
.dropdown-background.svelte-179p8ge{position:fixed;top:0;left:0;width:100vw;height:100vh}.root.svelte-179p8ge{cursor:pointer;z-index:1}.dropdown-content.svelte-179p8ge{position:absolute;background-color:var(--white);min-width:160px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1;font-weight:normal;border-style:solid;border-width:1px;border-color:var(--secondary10)}.dropdown-content.svelte-179p8ge:not(:focus){display:none}.action-row.svelte-179p8ge{padding:7px 10px;cursor:pointer}.action-row.svelte-179p8ge:hover{background-color:var(--primary100);color:var(--white)}
|
.dropdown-background.svelte-179p8ge{position:fixed;top:0;left:0;width:100vw;height:100vh}.root.svelte-179p8ge{cursor:pointer;z-index:1}.dropdown-content.svelte-179p8ge{position:absolute;background-color:var(--white);min-width:160px;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);z-index:1;font-weight:normal;border-style:solid;border-width:1px;border-color:var(--secondary10)}.dropdown-content.svelte-179p8ge:not(:focus){display:none}.action-row.svelte-179p8ge{padding:7px 10px;cursor:pointer}.action-row.svelte-179p8ge:hover{background-color:var(--primary100);color:var(--white)}
|
||||||
|
.root.svelte-d6wwkb{display:flex}.root.svelte-d6wwkb:last-child{border-radius:0 var(--borderradius) var(--borderradius) 0}.root.svelte-d6wwkb:first-child{border-radius:var(--borderradius) 0 0 var(--borderradius)}.root.svelte-d6wwkb:not(:first-child):not(:last-child){border-radius:0}
|
||||||
|
.edit-button.svelte-9z4fqi{cursor:pointer;color:var(--white)}tr.svelte-9z4fqi:hover .edit-button.svelte-9z4fqi{color:var(--secondary75)}
|
||||||
|
.edit-button.svelte-neetem{cursor:pointer;color:var(--white)}tr.svelte-neetem:hover .edit-button.svelte-neetem{color:var(--secondary75)}
|
||||||
.root.svelte-1tilbnf{padding:5px;top:0;width:100%}
|
.root.svelte-1tilbnf{padding:5px;top:0;width:100%}
|
||||||
.root.svelte-1q40nqm{display:block;font-size:13pt;width:100%;cursor:pointer}.title.svelte-1q40nqm{font:var(--bodytext);padding-top:10px;padding-right:5px;padding-bottom:10px;color:var(--secondary100)}.title.svelte-1q40nqm:hover{background-color:var(--secondary10)}
|
.root.svelte-1q40nqm{display:block;font-size:13pt;width:100%;cursor:pointer}.title.svelte-1q40nqm{font:var(--bodytext);padding-top:10px;padding-right:5px;padding-bottom:10px;color:var(--secondary100)}.title.svelte-1q40nqm:hover{background-color:var(--secondary10)}
|
||||||
.root.svelte-pq2tmv{height:100%;padding:15px}.allowed-records.svelte-pq2tmv{margin:20px 0px}.allowed-records.svelte-pq2tmv>span.svelte-pq2tmv{margin-right:30px}
|
|
||||||
.root.svelte-kswv5p{height:100%;padding:15px}.fields-table.svelte-kswv5p{margin:10px;border-collapse:collapse}.add-field-button.svelte-kswv5p{margin-left:15px;cursor:pointer}.edit-button.svelte-kswv5p{cursor:pointer;color:var(--white)}.edit-button.svelte-kswv5p:hover{color:var(--secondary75)}th.svelte-kswv5p{text-align:left}td.svelte-kswv5p{padding:5px 30px 5px 0px;margin:0}thead.svelte-kswv5p>tr.svelte-kswv5p{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--secondary75);margin-bottom:20px}tbody.svelte-kswv5p>tr.svelte-kswv5p{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--primary10)}tbody.svelte-kswv5p>tr.svelte-kswv5p:hover{background-color:var(--primary10)}tbody.svelte-kswv5p>tr:hover .edit-button.svelte-kswv5p{color:var(--secondary75)}.index-container.svelte-kswv5p{border-style:solid;border-width:0 0 1px 0;border-color:var(--secondary25);padding:10px;margin-bottom:5px}.index-label.svelte-kswv5p{color:var(--slate)}.index-name.svelte-kswv5p{font-weight:bold;color:var(--primary100)}.index-container.svelte-kswv5p code.svelte-kswv5p{margin:0;display:inline;background-color:var(--primary10);color:var(--secondary100);padding:3px}.index-field-row.svelte-kswv5p{margin-top:7px}
|
.root.svelte-kswv5p{height:100%;padding:15px}.fields-table.svelte-kswv5p{margin:10px;border-collapse:collapse}.add-field-button.svelte-kswv5p{margin-left:15px;cursor:pointer}.edit-button.svelte-kswv5p{cursor:pointer;color:var(--white)}.edit-button.svelte-kswv5p:hover{color:var(--secondary75)}th.svelte-kswv5p{text-align:left}td.svelte-kswv5p{padding:5px 30px 5px 0px;margin:0}thead.svelte-kswv5p>tr.svelte-kswv5p{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--secondary75);margin-bottom:20px}tbody.svelte-kswv5p>tr.svelte-kswv5p{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--primary10)}tbody.svelte-kswv5p>tr.svelte-kswv5p:hover{background-color:var(--primary10)}tbody.svelte-kswv5p>tr:hover .edit-button.svelte-kswv5p{color:var(--secondary75)}.index-container.svelte-kswv5p{border-style:solid;border-width:0 0 1px 0;border-color:var(--secondary25);padding:10px;margin-bottom:5px}.index-label.svelte-kswv5p{color:var(--slate)}.index-name.svelte-kswv5p{font-weight:bold;color:var(--primary100)}.index-container.svelte-kswv5p code.svelte-kswv5p{margin:0;display:inline;background-color:var(--primary10);color:var(--secondary100);padding:3px}.index-field-row.svelte-kswv5p{margin-top:7px}
|
||||||
.edit-button.svelte-neetem{cursor:pointer;color:var(--white)}tr.svelte-neetem:hover .edit-button.svelte-neetem{color:var(--secondary75)}
|
.root.svelte-pq2tmv{height:100%;padding:15px}.allowed-records.svelte-pq2tmv{margin:20px 0px}.allowed-records.svelte-pq2tmv>span.svelte-pq2tmv{margin-right:30px}
|
||||||
.edit-button.svelte-9z4fqi{cursor:pointer;color:var(--white)}tr.svelte-9z4fqi:hover .edit-button.svelte-9z4fqi{color:var(--secondary75)}
|
.component.svelte-13tuzj8{padding:5px;border-style:solid;border-width:0 0 1px 0;border-color:var(--lightslate);cursor:pointer}.component.svelte-13tuzj8:hover{background-color:var(--primary10)}.component.svelte-13tuzj8>.title.svelte-13tuzj8{font-size:13pt;color:var(--secondary100)}.component.svelte-13tuzj8>.description.svelte-13tuzj8{font-size:10pt;color:var(--primary75);font-style:italic}
|
||||||
.root.svelte-w5on8s{padding:3px 5px 7px 10px;border-style:dotted;border-width:0 0 1px 0;border-color:var(--primary25)}
|
.info-text.svelte-um9cf7{font-size:0.8em;color:var(--slate)}
|
||||||
input.svelte-66516k{margin-right:7px}
|
.title.svelte-1pp53c5{padding:3px;background-color:white;color:var(--secondary100);border-style:solid;border-width:1px 0 0 0;border-color:var(--lightslate)}.title.svelte-1pp53c5>span.svelte-1pp53c5{margin-left:10px}
|
||||||
.root.svelte-woqcuf{display:grid;grid-template-columns:[name] 1fr [actions] auto}.root.svelte-woqcuf>div.svelte-woqcuf:nth-child(1){grid-column-start:name;color:var(--secondary50)}.root.svelte-woqcuf>div.svelte-woqcuf:nth-child(2){grid-column-start:actions}.selectedname.svelte-woqcuf{font-weight:bold;color:var(--secondary)}
|
.root.svelte-1sxai5n{font-size:10pt}.padding.svelte-1sxai5n{padding:0 10px}.inherited-title.svelte-1sxai5n{margin-top:40px;display:grid;grid-template-columns:[name] 1fr [actions] auto;border-style:solid;border-width:0px 0px 1px 0px;border-color:var(--lightslate);font-style:italic}.inherited-title.svelte-1sxai5n>div.svelte-1sxai5n:nth-child(1){grid-column-start:name;color:var(--slate)}.inherited-title.svelte-1sxai5n>div.svelte-1sxai5n:nth-child(2){grid-column-start:actions;color:var(--secondary100)}
|
||||||
|
.root.svelte-bv289q{padding:10px}.option-container.svelte-bv289q{border-style:dotted;border-width:1px;border-color:var(--primary75);padding:3px;margin-right:5px}
|
||||||
.error-container.svelte-jwy920{padding:10px;border-style:solid;border-color:var(--deletion100);border-radius:var(--borderradiusall);background:var(--deletion75)}.error-row.svelte-jwy920{padding:5px 0px}
|
.error-container.svelte-jwy920{padding:10px;border-style:solid;border-color:var(--deletion100);border-radius:var(--borderradiusall);background:var(--deletion75)}.error-row.svelte-jwy920{padding:5px 0px}
|
||||||
textarea.svelte-1ooq0hh{padding:3px;background:var(--darkslate);color:var(--white);font-family:'Courier New', Courier, monospace;width:95%;height:100px}
|
textarea.svelte-1ooq0hh{padding:3px;background:var(--darkslate);color:var(--white);font-family:'Courier New', Courier, monospace;width:95%;height:100px}
|
||||||
.root.svelte-bv289q{padding:10px}.option-container.svelte-bv289q{border-style:dotted;border-width:1px;border-color:var(--primary75);padding:3px;margin-right:5px}
|
input.svelte-66516k{margin-right:7px}
|
||||||
.addelement-container.svelte-jliz3p{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-jliz3p:hover{background-color:var(--primary25)}.item-container.svelte-jliz3p{padding-left:3px;background:var(--secondary10)}
|
.root.svelte-woqcuf{display:grid;grid-template-columns:[name] 1fr [actions] auto}.root.svelte-woqcuf>div.svelte-woqcuf:nth-child(1){grid-column-start:name;color:var(--secondary50)}.root.svelte-woqcuf>div.svelte-woqcuf:nth-child(2){grid-column-start:actions}.selectedname.svelte-woqcuf{font-weight:bold;color:var(--secondary)}
|
||||||
|
.root.svelte-w5on8s{padding:3px 5px 7px 10px;border-style:dotted;border-width:0 0 1px 0;border-color:var(--primary25)}
|
||||||
textarea.svelte-1wfv4cc{width:300px;height:200px}
|
textarea.svelte-1wfv4cc{width:300px;height:200px}
|
||||||
|
.addelement-container.svelte-jliz3p{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-jliz3p:hover{background-color:var(--primary25)}.item-container.svelte-jliz3p{padding-left:3px;background:var(--secondary10)}
|
||||||
|
|
||||||
/*# sourceMappingURL=bundle.css.map */
|
/*# sourceMappingURL=bundle.css.map */
|
File diff suppressed because one or more lines are too long
|
@ -28039,69 +28039,6 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const apiCall = (method, returnJson) => (url, body, returnJsonOverride) =>
|
|
||||||
fetch(url, {
|
|
||||||
method: method,
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
},
|
|
||||||
body: body && JSON.stringify(body),
|
|
||||||
}).then(r => {
|
|
||||||
if(!fp_3(returnJsonOverride))
|
|
||||||
returnJson = returnJsonOverride;
|
|
||||||
return returnJson ? r.json() : r
|
|
||||||
});
|
|
||||||
|
|
||||||
const post = apiCall("POST", true);
|
|
||||||
const get$2 = apiCall("GET", true);
|
|
||||||
const patch = apiCall("PATCH", true);
|
|
||||||
const del = apiCall("DELETE", false);
|
|
||||||
|
|
||||||
var api$1 = {
|
|
||||||
post, get: get$2, patch, delete:del
|
|
||||||
};
|
|
||||||
|
|
||||||
const normalString = s => (s||"").trim().toLowerCase();
|
|
||||||
|
|
||||||
const isRootComponent = c => isComponent(c) && fp_3(c.inherits);
|
|
||||||
|
|
||||||
const isComponent = c => {
|
|
||||||
const hasProp = (n) => !fp_3(c[n]);
|
|
||||||
return hasProp("name") && hasProp("props");
|
|
||||||
};
|
|
||||||
|
|
||||||
const searchAllComponents = (allComponents, phrase) => {
|
|
||||||
|
|
||||||
const hasPhrase = (...vals) =>
|
|
||||||
pipe(vals, [
|
|
||||||
fp_6(v => fp_11(normalString(phrase))(normalString(v)))
|
|
||||||
]);
|
|
||||||
|
|
||||||
const componentMatches = c => {
|
|
||||||
if(hasPhrase(c.name, ...(c.tags || []))) return true;
|
|
||||||
|
|
||||||
if(isRootComponent(c)) return false;
|
|
||||||
|
|
||||||
const parent = getExactComponent(
|
|
||||||
allComponents,
|
|
||||||
c.inherits);
|
|
||||||
|
|
||||||
return componentMatches(parent);
|
|
||||||
};
|
|
||||||
|
|
||||||
return fp_8(componentMatches)(allComponents);
|
|
||||||
};
|
|
||||||
|
|
||||||
const getExactComponent = (allComponents, name) => {
|
|
||||||
|
|
||||||
const stringEquals = (s1, s2) =>
|
|
||||||
normalString(s1) === normalString(s2);
|
|
||||||
|
|
||||||
return pipe(allComponents,[
|
|
||||||
fp_13(c => stringEquals(c.name, name))
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
const defaultDef = typeName => () => ({
|
const defaultDef = typeName => () => ({
|
||||||
type: typeName,
|
type: typeName,
|
||||||
required:false,
|
required:false,
|
||||||
|
@ -28142,7 +28079,7 @@
|
||||||
return expandedProps;
|
return expandedProps;
|
||||||
};
|
};
|
||||||
|
|
||||||
const isComponent$1 = fp_55;
|
const isComponent = fp_55;
|
||||||
|
|
||||||
const types = {
|
const types = {
|
||||||
string: propType(() => "", fp_22, defaultDef("string")),
|
string: propType(() => "", fp_22, defaultDef("string")),
|
||||||
|
@ -28150,10 +28087,51 @@
|
||||||
number: propType(() => 0, fp_21, defaultDef("number")),
|
number: propType(() => 0, fp_21, defaultDef("number")),
|
||||||
array: propType(() => [], fp_25, defaultDef("array")),
|
array: propType(() => [], fp_25, defaultDef("array")),
|
||||||
options: propType(() => "", fp_22, defaultDef("options")),
|
options: propType(() => "", fp_22, defaultDef("options")),
|
||||||
component: propType(() => ({_component:""}), isComponent$1, defaultDef("component")),
|
component: propType(() => ({_component:""}), isComponent, defaultDef("component")),
|
||||||
asset: propType(() => "", fp_22, defaultDef("asset")),
|
asset: propType(() => "", fp_22, defaultDef("asset")),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const normalString = s => (s||"").trim().toLowerCase();
|
||||||
|
|
||||||
|
const isRootComponent = c => isComponent$1(c) && fp_3(c.inherits);
|
||||||
|
|
||||||
|
const isComponent$1 = c => {
|
||||||
|
const hasProp = (n) => !fp_3(c[n]);
|
||||||
|
return hasProp("name") && hasProp("props");
|
||||||
|
};
|
||||||
|
|
||||||
|
const searchAllComponents = (allComponents, phrase) => {
|
||||||
|
|
||||||
|
const hasPhrase = (...vals) =>
|
||||||
|
pipe(vals, [
|
||||||
|
fp_6(v => fp_11(normalString(phrase))(normalString(v)))
|
||||||
|
]);
|
||||||
|
|
||||||
|
const componentMatches = c => {
|
||||||
|
if(hasPhrase(c.name, ...(c.tags || []))) return true;
|
||||||
|
|
||||||
|
if(isRootComponent(c)) return false;
|
||||||
|
|
||||||
|
const parent = getExactComponent(
|
||||||
|
allComponents,
|
||||||
|
c.inherits);
|
||||||
|
|
||||||
|
return componentMatches(parent);
|
||||||
|
};
|
||||||
|
|
||||||
|
return fp_8(componentMatches)(allComponents);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getExactComponent = (allComponents, name) => {
|
||||||
|
|
||||||
|
const stringEquals = (s1, s2) =>
|
||||||
|
normalString(s1) === normalString(s2);
|
||||||
|
|
||||||
|
return pipe(allComponents,[
|
||||||
|
fp_13(c => stringEquals(c.name, name))
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
const getInstanceProps = (componentInfo, props) => {
|
const getInstanceProps = (componentInfo, props) => {
|
||||||
const finalProps = fp_4(componentInfo.fullProps);
|
const finalProps = fp_4(componentInfo.fullProps);
|
||||||
|
|
||||||
|
@ -28303,6 +28281,85 @@
|
||||||
- required: field is required
|
- required: field is required
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
const buildPropsHierarchy = (allComponents, baseComponent) => {
|
||||||
|
|
||||||
|
const buildProps = (componentName, propsDefinition, derivedFromProps) => {
|
||||||
|
|
||||||
|
const {props} = createProps(componentName, propsDefinition, derivedFromProps);
|
||||||
|
props._component = componentName;
|
||||||
|
for(let propName in props) {
|
||||||
|
if(propName === "_component") continue;
|
||||||
|
|
||||||
|
const propDef = propsDefinition[propName];
|
||||||
|
if(propDef.type === "component") {
|
||||||
|
|
||||||
|
const subComponentProps = props[propName];
|
||||||
|
|
||||||
|
if(!subComponentProps._component) continue;
|
||||||
|
|
||||||
|
const propComponentInfo = getComponentInfo(
|
||||||
|
allComponents, subComponentProps._component);
|
||||||
|
|
||||||
|
const subComponentInstanceProps = getInstanceProps(
|
||||||
|
propComponentInfo,
|
||||||
|
subComponentProps
|
||||||
|
);
|
||||||
|
|
||||||
|
props[propName] = buildProps(
|
||||||
|
propComponentInfo.rootComponent.name,
|
||||||
|
propComponentInfo.propsDefinition,
|
||||||
|
subComponentInstanceProps);
|
||||||
|
|
||||||
|
} else if(propDef.type === "array") {
|
||||||
|
const propsArray = props[propName];
|
||||||
|
const newPropsArray = [];
|
||||||
|
let index = 0;
|
||||||
|
for(let element of propsArray) {
|
||||||
|
newPropsArray.push(
|
||||||
|
buildProps(
|
||||||
|
`${propName}[${index}]`,
|
||||||
|
propDef.elementDefinition,
|
||||||
|
element));
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
|
||||||
|
props[propName] = newPropsArray;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return props;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
if(!baseComponent) return {};
|
||||||
|
|
||||||
|
const baseComponentInfo = getComponentInfo(allComponents, baseComponent);
|
||||||
|
|
||||||
|
return buildProps(
|
||||||
|
baseComponentInfo.rootComponent.name,
|
||||||
|
baseComponentInfo.propsDefinition,
|
||||||
|
baseComponentInfo.fullProps);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const apiCall = (method) => (url, body) =>
|
||||||
|
fetch(url, {
|
||||||
|
method: method,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: body && JSON.stringify(body),
|
||||||
|
});
|
||||||
|
|
||||||
|
const post = apiCall("POST");
|
||||||
|
const get$2 = apiCall("GET");
|
||||||
|
const patch = apiCall("PATCH");
|
||||||
|
const del = apiCall("DELETE");
|
||||||
|
|
||||||
|
var api$1 = {
|
||||||
|
post, get: get$2, patch, delete:del
|
||||||
|
};
|
||||||
|
|
||||||
const loadLibs = async (appName, appPackage) => {
|
const loadLibs = async (appName, appPackage) => {
|
||||||
|
|
||||||
const allLibraries = {};
|
const allLibraries = {};
|
||||||
|
@ -28315,7 +28372,9 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
const makeLibraryUrl = (appName, lib) =>
|
const makeLibraryUrl = (appName, lib) =>
|
||||||
`/_builder/api/${appName}/componentlibrary?lib=${encodeURI(lib)}`;
|
`/_builder/${appName}/componentlibrary?lib=${encodeURI(lib)}`;
|
||||||
|
|
||||||
|
let appname = "";
|
||||||
|
|
||||||
const getStore = () => {
|
const getStore = () => {
|
||||||
|
|
||||||
|
@ -28382,18 +28441,19 @@
|
||||||
|
|
||||||
const initialise = (store, initial) => async () => {
|
const initialise = (store, initial) => async () => {
|
||||||
|
|
||||||
const appname = window.location.hash
|
appname = window.location.hash
|
||||||
? fp_12(window.location.hash.substr(1).split("/"))
|
? fp_12(window.location.hash.substr(1).split("/"))
|
||||||
: "";
|
: "";
|
||||||
|
|
||||||
if(!appname) {
|
if(!appname) {
|
||||||
initial.apps = await api$1.get(`/_builder/api/apps`);
|
initial.apps = await api$1.get(`/_builder/api/apps`).then(r => r.json());
|
||||||
initial.hasAppPackage = false;
|
initial.hasAppPackage = false;
|
||||||
store.set(initial);
|
store.set(initial);
|
||||||
return initial;
|
return initial;
|
||||||
}
|
}
|
||||||
|
|
||||||
const pkg = await api$1.get(`/_builder/api/${appname}/appPackage`);
|
const pkg = await api$1.get(`/_builder/api/${appname}/appPackage`)
|
||||||
|
.then(r => r.json());
|
||||||
|
|
||||||
initial.libraries = await loadLibs(appname, pkg);
|
initial.libraries = await loadLibs(appname, pkg);
|
||||||
initial.appname = appname;
|
initial.appname = appname;
|
||||||
|
@ -28694,7 +28754,13 @@
|
||||||
fp_32([derivedComponent])
|
fp_32([derivedComponent])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const derivedComponents = pipe(s.derivedComponents, [
|
||||||
|
fp_8(c => c.name !== derivedComponent.name),
|
||||||
|
fp_32([derivedComponent])
|
||||||
|
]);
|
||||||
|
|
||||||
s.allComponents = components;
|
s.allComponents = components;
|
||||||
|
s.derivedComponents = derivedComponents;
|
||||||
s.currentFrontEndItem = derivedComponent;
|
s.currentFrontEndItem = derivedComponent;
|
||||||
s.currentComponentInfo = getNewComponentInfo(
|
s.currentComponentInfo = getNewComponentInfo(
|
||||||
s.allComponents, derivedComponent.name);
|
s.allComponents, derivedComponent.name);
|
||||||
|
@ -28725,7 +28791,12 @@
|
||||||
fp_8(c => c.name !== name)
|
fp_8(c => c.name !== name)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const derivedComponents = pipe(s.derivedComponents, [
|
||||||
|
fp_8(c => c.name !== name)
|
||||||
|
]);
|
||||||
|
|
||||||
s.allComponents = allComponents;
|
s.allComponents = allComponents;
|
||||||
|
s.derivedComponents = derivedComponents;
|
||||||
if(s.currentFrontEndItem.name === name) {
|
if(s.currentFrontEndItem.name === name) {
|
||||||
s.currentFrontEndItem = null;
|
s.currentFrontEndItem = null;
|
||||||
}
|
}
|
||||||
|
@ -28775,7 +28846,7 @@
|
||||||
const addComponentLibrary = store => async lib => {
|
const addComponentLibrary = store => async lib => {
|
||||||
|
|
||||||
const response =
|
const response =
|
||||||
await api$1.get(`/_builder/api/${db.appname}/components?${encodeURI(lib)}`,undefined, false);
|
await api$1.get(`/_builder/api/${appname}/componentlibrary?lib=${encodeURI(lib)}`,undefined, false);
|
||||||
|
|
||||||
const success = response.status === 200;
|
const success = response.status === 200;
|
||||||
|
|
||||||
|
@ -28790,12 +28861,16 @@
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
store.update(s => {
|
store.update(s => {
|
||||||
s.componentsErrors.addComponent = error;
|
|
||||||
if(success) {
|
if(success) {
|
||||||
|
|
||||||
|
const componentsArray = [];
|
||||||
|
for(let c in components) {
|
||||||
|
componentsArray.push(components[c]);
|
||||||
|
}
|
||||||
|
|
||||||
s.allComponents = pipe(s.allComponents, [
|
s.allComponents = pipe(s.allComponents, [
|
||||||
fp_8(c => !isRootComponent(c)),
|
fp_8(c => !c.name.startsWith(`${lib}/`)),
|
||||||
fp_32(components)
|
fp_32(componentsArray)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
s.pages.componentLibraries.push(lib);
|
s.pages.componentLibraries.push(lib);
|
||||||
|
@ -28840,7 +28915,7 @@
|
||||||
const refreshComponents = store => async () => {
|
const refreshComponents = store => async () => {
|
||||||
|
|
||||||
const components =
|
const components =
|
||||||
await api$1.get(`/_builder/api/${db.appname}/components`);
|
await api$1.get(`/_builder/api/${db.appname}/components`).then(r => r.json());
|
||||||
|
|
||||||
const rootComponents = pipe(components, [
|
const rootComponents = pipe(components, [
|
||||||
fp_30,
|
fp_30,
|
||||||
|
@ -28862,8 +28937,10 @@
|
||||||
hierarchy:s.hierarchy,
|
hierarchy:s.hierarchy,
|
||||||
triggers:s.triggers,
|
triggers:s.triggers,
|
||||||
actions: fp_45("name")(s.actions),
|
actions: fp_45("name")(s.actions),
|
||||||
mainUi: s.mainUi,
|
props: {
|
||||||
unauthenticatedUi: s.unauthenticatedUi
|
main: buildPropsHierarchy(s.allComponents, s.pages.main.appBody),
|
||||||
|
unauthenticated: buildPropsHierarchy(s.allComponents, s.pages.unauthenticated.appBody)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
|
@ -31455,7 +31532,7 @@
|
||||||
|
|
||||||
/******/ });
|
/******/ });
|
||||||
});
|
});
|
||||||
|
//# sourceMappingURL=feather.js.map
|
||||||
});
|
});
|
||||||
|
|
||||||
var feather$1 = unwrapExports(feather);
|
var feather$1 = unwrapExports(feather);
|
||||||
|
@ -50504,7 +50581,7 @@
|
||||||
var if_blocks = [];
|
var if_blocks = [];
|
||||||
|
|
||||||
function select_block_type(changed, ctx) {
|
function select_block_type(changed, ctx) {
|
||||||
if ((show_if == null) || changed.$store) show_if = !!(isComponent(ctx.$store.currentFrontEndItem));
|
if ((show_if == null) || changed.$store) show_if = !!(isComponent$1(ctx.$store.currentFrontEndItem));
|
||||||
if (show_if) return 0;
|
if (show_if) return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -50676,7 +50753,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_fragment$l(ctx) {
|
function create_fragment$l(ctx) {
|
||||||
var div11, div9, div4, div2, div0, raw0_value = getIcon("sidebar","18") + "", t0, span0, t2, div1, t3, t4, div3, t5, div8, div6, div5, raw1_value = getIcon("grid","18") + "", t6, span1, t8, div7, t9, div10, t10, show_if = ctx.$store.currentFrontEndItem && isComponent(ctx.$store.currentFrontEndItem), t11, t12, current;
|
var div11, div9, div4, div2, div0, raw0_value = getIcon("sidebar","18") + "", t0, span0, t2, div1, t3, t4, div3, t5, div8, div6, div5, raw1_value = getIcon("grid","18") + "", t6, span1, t8, div7, t9, div10, t10, show_if = ctx.$store.currentFrontEndItem && isComponent$1(ctx.$store.currentFrontEndItem), t11, t12, current;
|
||||||
|
|
||||||
var iconbutton0 = new IconButton({
|
var iconbutton0 = new IconButton({
|
||||||
props: { icon: "settings", size: "14" },
|
props: { icon: "settings", size: "14" },
|
||||||
|
@ -50846,7 +50923,7 @@
|
||||||
check_outros();
|
check_outros();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed.$store) show_if = ctx.$store.currentFrontEndItem && isComponent(ctx.$store.currentFrontEndItem);
|
if (changed.$store) show_if = ctx.$store.currentFrontEndItem && isComponent$1(ctx.$store.currentFrontEndItem);
|
||||||
|
|
||||||
if (show_if) {
|
if (show_if) {
|
||||||
if (!if_block1) {
|
if (!if_block1) {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -65,6 +65,13 @@ module.exports = (config, app) => {
|
||||||
await send(ctx, "/index.html", { root: builderPath });
|
await send(ctx, "/index.html", { root: builderPath });
|
||||||
|
|
||||||
})
|
})
|
||||||
|
.get("/_builder/:appname/componentlibrary", async (ctx) => {
|
||||||
|
const info = await componentLibraryInfo(
|
||||||
|
config,
|
||||||
|
ctx.params.appname,
|
||||||
|
ctx.query.lib);
|
||||||
|
await send(ctx, info.components._lib || "index.js", { root: info.libDir});
|
||||||
|
})
|
||||||
.get("/_builder/*", async (ctx, next) => {
|
.get("/_builder/*", async (ctx, next) => {
|
||||||
if(!config.dev) {
|
if(!config.dev) {
|
||||||
ctx.response.status = StatusCodes.FORBIDDEN;
|
ctx.response.status = StatusCodes.FORBIDDEN;
|
||||||
|
@ -161,12 +168,14 @@ module.exports = (config, app) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.get("/:appname/componentlibrary", async (ctx) => {
|
|
||||||
|
.get("/_builder/api/:appname/componentlibrary", async (ctx) => {
|
||||||
const info = await componentLibraryInfo(
|
const info = await componentLibraryInfo(
|
||||||
config,
|
config,
|
||||||
ctx.params.appname,
|
ctx.params.appname,
|
||||||
ctx.query.lib);
|
ctx.query.lib ? decodeURI(ctx.query.lib) : "");
|
||||||
await send(ctx, info.libDir, { root: info.components._lib });
|
ctx.body = info.components;
|
||||||
|
ctx.response.status = StatusCodes.OK;
|
||||||
})
|
})
|
||||||
.post("/_builder/api/:appname/derivedcomponent", async (ctx) => {
|
.post("/_builder/api/:appname/derivedcomponent", async (ctx) => {
|
||||||
await saveDerivedComponent(
|
await saveDerivedComponent(
|
||||||
|
@ -190,7 +199,7 @@ module.exports = (config, app) => {
|
||||||
await deleteDerivedComponent(
|
await deleteDerivedComponent(
|
||||||
config,
|
config,
|
||||||
ctx.params.appname,
|
ctx.params.appname,
|
||||||
name);
|
decodeURI(name));
|
||||||
ctx.response.status = StatusCodes.OK;
|
ctx.response.status = StatusCodes.OK;
|
||||||
})
|
})
|
||||||
.get("/:appname", async (ctx) => {
|
.get("/:appname", async (ctx) => {
|
||||||
|
|
|
@ -132,3 +132,35 @@ it("should be able to delete derived component", async () => {
|
||||||
expect(await pathExists(componentFile)).toBe(false);
|
expect(await pathExists(componentFile)).toBe(false);
|
||||||
expect(await pathExists(componentDir)).toBe(false);
|
expect(await pathExists(componentDir)).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("/savePackage should prepare all necessary client files", async () => {
|
||||||
|
|
||||||
|
await app.post("/_builder/api/testApp/appPackage", {
|
||||||
|
appDefinition: testAppDef,
|
||||||
|
accessLevels: testAccessLevels,
|
||||||
|
pages: testPages
|
||||||
|
})
|
||||||
|
.expect(statusCodes.OK);
|
||||||
|
|
||||||
|
const publicFolderMain = relative => "./appPackages/testApp/public/main" + relative;
|
||||||
|
const publicFolderUnauth = relative => "./appPackages/testApp/public/unauthenticated" + relative;
|
||||||
|
|
||||||
|
expect(await pathExists(publicFolderMain("/index.html"))).toBe(true);
|
||||||
|
expect(await pathExists(publicFolderUnauth("/index.html"))).toBe(true);
|
||||||
|
|
||||||
|
expect(await pathExists(publicFolderMain("/lib/customComponents/index.js"))).toBe(true);
|
||||||
|
expect(await pathExists(publicFolderUnauth("/lib/customComponents/index.js"))).toBe(true);
|
||||||
|
|
||||||
|
expect(await pathExists(publicFolderMain("/lib/moreCustomComponents/index.js"))).toBe(true);
|
||||||
|
expect(await pathExists(publicFolderUnauth("/lib/moreCustomComponents/index.js"))).toBe(true);
|
||||||
|
|
||||||
|
expect(await pathExists(publicFolderMain("/lib/node_modules/budibase-standard-components/index.js"))).toBe(true);
|
||||||
|
expect(await pathExists(publicFolderUnauth("/lib/node_modules/budibase-standard-components/index.js"))).toBe(true);
|
||||||
|
|
||||||
|
expect(await pathExists(publicFolderUnauth("/budibase-client.js"))).toBe(true);
|
||||||
|
expect(await pathExists(publicFolderUnauth("/clientAppDefinition.js"))).toBe(true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})
|
||||||
|
|
|
@ -7,7 +7,7 @@ const {
|
||||||
constants, copyFile, writeFile,
|
constants, copyFile, writeFile,
|
||||||
readFile
|
readFile
|
||||||
} = require("fs-extra");
|
} = require("fs-extra");
|
||||||
const { join } = require("path");
|
const { join, resolve } = require("path");
|
||||||
const sqrl = require('squirrelly');
|
const sqrl = require('squirrelly');
|
||||||
|
|
||||||
module.exports = async (config, appname, pages, appdefinition) => {
|
module.exports = async (config, appname, pages, appdefinition) => {
|
||||||
|
@ -16,12 +16,12 @@ module.exports = async (config, appname, pages, appdefinition) => {
|
||||||
|
|
||||||
await buildClientAppDefinition(
|
await buildClientAppDefinition(
|
||||||
config, appname,
|
config, appname,
|
||||||
appdefinition, componentLibraries,
|
appdefinition,
|
||||||
appPath, pages, "main");
|
appPath, pages, "main");
|
||||||
|
|
||||||
await buildClientAppDefinition(
|
await buildClientAppDefinition(
|
||||||
config, appname,
|
config, appname,
|
||||||
appdefinition, componentLibraries,
|
appdefinition,
|
||||||
appPath, pages, "unauthenticated")
|
appPath, pages, "unauthenticated")
|
||||||
|
|
||||||
await buildIndexHtml(
|
await buildIndexHtml(
|
||||||
|
@ -37,7 +37,7 @@ module.exports = async (config, appname, pages, appdefinition) => {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const publicPath = async (appPath, pageName) => join(appPath, "public", pageName);
|
const publicPath = (appPath, pageName) => join(appPath, "public", pageName);
|
||||||
const rootPath = (config, appname) => config.useAppRootPath ? `/${appname}` : "";
|
const rootPath = (config, appname) => config.useAppRootPath ? `/${appname}` : "";
|
||||||
|
|
||||||
const copyClientLib = async (appPath, pageName) => {
|
const copyClientLib = async (appPath, pageName) => {
|
||||||
|
@ -64,19 +64,22 @@ const buildIndexHtml = async (config, appname, appPath, pages, pageName) => {
|
||||||
const templateObj = {
|
const templateObj = {
|
||||||
title: pages[pageName].index.title || "Budibase App",
|
title: pages[pageName].index.title || "Budibase App",
|
||||||
favicon: `${appRootPath}/${pages[pageName].index.favicon || "/assets/favicon.png"}`,
|
favicon: `${appRootPath}/${pages[pageName].index.favicon || "/assets/favicon.png"}`,
|
||||||
stylesheets: pages.stylesheets.map(stylesheetUrl),
|
stylesheets: (pages.stylesheets || []).map(stylesheetUrl),
|
||||||
appRootPath
|
appRootPath
|
||||||
}
|
}
|
||||||
|
|
||||||
const indexHtmlTemplate = await readFile(
|
const indexHtmlTemplate = await readFile(
|
||||||
resolve(__dirname, "index.template.html"));
|
resolve(__dirname, "index.template.html"), "utf8");
|
||||||
|
|
||||||
const indexHtmlPath = join(appPublicPath, "index.html");
|
const indexHtmlPath = join(appPublicPath, "index.html");
|
||||||
|
|
||||||
|
const indexHtml = sqrl.Render(indexHtmlTemplate, templateObj)
|
||||||
|
|
||||||
await writeFile(
|
await writeFile(
|
||||||
indexHtmlPath,
|
indexHtmlPath,
|
||||||
sqrl.Render(indexHtmlTemplate, templateObj),
|
indexHtml,
|
||||||
{flag:"w+"});
|
{flag:"w+"});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,11 +94,17 @@ const buildClientAppDefinition = async (config, appname, appdefinition, appPath,
|
||||||
|
|
||||||
for(let lib of pages.componentLibraries) {
|
for(let lib of pages.componentLibraries) {
|
||||||
const info = await componentLibraryInfo(appPath, lib);
|
const info = await componentLibraryInfo(appPath, lib);
|
||||||
const source = join(info.libDir, info.components._lib);
|
const libFile = info.components._lib || "index.js";
|
||||||
|
let source;
|
||||||
|
try {
|
||||||
|
source = join(info.libDir, libFile);
|
||||||
|
} catch(e) {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
const destDir = join(appPublicPath, "lib", info.libDir.replace(appPath, ""));
|
const destDir = join(appPublicPath, "lib", info.libDir.replace(appPath, ""));
|
||||||
await ensureDir(destDir);
|
await ensureDir(destDir);
|
||||||
|
|
||||||
const destPath = join(destDir, info.components._lib);
|
const destPath = join(destDir, libFile);
|
||||||
componentLibraries.push(destPath);
|
componentLibraries.push(destPath);
|
||||||
|
|
||||||
let shouldCopy = !(await pathExists(destPath));
|
let shouldCopy = !(await pathExists(destPath));
|
||||||
|
|
|
@ -34,8 +34,16 @@ module.exports.componentLibraryInfo = async (appPath, libname) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const components = await readJSON(componentsPath);
|
||||||
|
const namespacedComponents = {}
|
||||||
|
for(let cname in components) {
|
||||||
|
if(cname === "_lib") continue;
|
||||||
|
const namespacedName = `${libname}/${cname}`;
|
||||||
|
components[cname].name = namespacedName;
|
||||||
|
namespacedComponents[namespacedName] = components[cname];
|
||||||
|
}
|
||||||
return ({
|
return ({
|
||||||
components: await readJSON(componentsPath),
|
components: namespacedComponents,
|
||||||
libDir,
|
libDir,
|
||||||
componentsPath
|
componentsPath
|
||||||
});
|
});
|
||||||
|
|
|
@ -18,10 +18,7 @@ const {
|
||||||
} = require("path");
|
} = require("path");
|
||||||
const { $ } = require("budibase-core").common;
|
const { $ } = require("budibase-core").common;
|
||||||
const {
|
const {
|
||||||
keys,
|
keyBy
|
||||||
reduce,
|
|
||||||
keyBy,
|
|
||||||
filter
|
|
||||||
} = require("lodash/fp");
|
} = require("lodash/fp");
|
||||||
const {merge} = require("lodash");
|
const {merge} = require("lodash");
|
||||||
|
|
||||||
|
@ -61,9 +58,10 @@ const componentPath = (appPath, name) =>
|
||||||
|
|
||||||
module.exports.saveDerivedComponent = async (config, appname, component) => {
|
module.exports.saveDerivedComponent = async (config, appname, component) => {
|
||||||
const appPath = appPackageFolder(config, appname);
|
const appPath = appPackageFolder(config, appname);
|
||||||
|
const compPath = componentPath(appPath, component.name);
|
||||||
|
await ensureDir(dirname(compPath));
|
||||||
await writeJSON(
|
await writeJSON(
|
||||||
componentPath(appPath, component.name),
|
compPath,
|
||||||
component,
|
component,
|
||||||
{encoding:"utf8", flag:"w", spaces:2});
|
{encoding:"utf8", flag:"w", spaces:2});
|
||||||
}
|
}
|
||||||
|
@ -94,27 +92,14 @@ module.exports.deleteDerivedComponent = async (config, appname, name) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports.componentLibraryInfo = componentLibraryInfo;
|
module.exports.componentLibraryInfo = async (config, appname, lib) => {
|
||||||
|
const appPath = appPackageFolder(config, appname);
|
||||||
|
return await componentLibraryInfo(appPath, lib);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
const getRootComponents = async (appPath, pages ,lib) => {
|
const getRootComponents = async (appPath, pages ,lib) => {
|
||||||
|
|
||||||
const componentsInLibrary = async (libname) => {
|
|
||||||
|
|
||||||
const { components } = await componentLibraryInfo(appPath, libname);
|
|
||||||
|
|
||||||
return $(components, [
|
|
||||||
keys,
|
|
||||||
filter(k => k !== "_lib"),
|
|
||||||
reduce((obj, k) => {
|
|
||||||
const component = components[k];
|
|
||||||
component.name = `${libname}/${k}`;
|
|
||||||
obj[component.name] = component;
|
|
||||||
return obj;
|
|
||||||
}, {})
|
|
||||||
])
|
|
||||||
}
|
|
||||||
|
|
||||||
let libs;
|
let libs;
|
||||||
if(!lib) {
|
if(!lib) {
|
||||||
pages = pages || await readJSON(
|
pages = pages || await readJSON(
|
||||||
|
@ -129,7 +114,8 @@ const getRootComponents = async (appPath, pages ,lib) => {
|
||||||
|
|
||||||
const components = {};
|
const components = {};
|
||||||
for(let l of libs) {
|
for(let l of libs) {
|
||||||
merge(components, await componentsInLibrary(l))
|
const info = await componentLibraryInfo(appPath, l);
|
||||||
|
merge(components, info.components);
|
||||||
}
|
}
|
||||||
|
|
||||||
return components;
|
return components;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<title>{{ title }}</title>
|
<title>{{ title }}</title>
|
||||||
<link rel='icon' type='image/png' href='{{ favicon }}'>
|
<link rel='icon' type='image/png' href='{{ favicon }}'>
|
||||||
|
|
||||||
{{ each(stylesheets) }}
|
{{ each(options.stylesheets) }}
|
||||||
<link rel='stylesheet' href='{{ @this }}'>
|
<link rel='stylesheet' href='{{ @this }}'>
|
||||||
{{ /each }}
|
{{ /each }}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
{
|
{
|
||||||
"_lib": {
|
"_lib": "./index.js",
|
||||||
"path":"./dist/index.js"
|
|
||||||
},
|
|
||||||
"button" : {
|
"button" : {
|
||||||
"importPath": "button",
|
"importPath": "button",
|
||||||
"name": "Button",
|
"name": "Button",
|
||||||
|
|
Loading…
Reference in New Issue