state binding working
This commit is contained in:
parent
0def6a50a9
commit
2e6a34c687
|
@ -33,6 +33,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@budibase/client": "*",
|
||||||
"@nx-js/compiler-util": "^2.0.0",
|
"@nx-js/compiler-util": "^2.0.0",
|
||||||
"date-fns": "^1.29.0",
|
"date-fns": "^1.29.0",
|
||||||
"feather-icons": "^4.21.0",
|
"feather-icons": "^4.21.0",
|
||||||
|
@ -43,7 +44,7 @@
|
||||||
"shortid": "^2.2.8",
|
"shortid": "^2.2.8",
|
||||||
"string_decoder": "^1.2.0",
|
"string_decoder": "^1.2.0",
|
||||||
"uikit": "^3.1.7"
|
"uikit": "^3.1.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.5.5",
|
"@babel/core": "^7.5.5",
|
||||||
"@babel/plugin-transform-runtime": "^7.5.5",
|
"@babel/plugin-transform-runtime": "^7.5.5",
|
||||||
|
|
|
@ -59,7 +59,8 @@ export default {
|
||||||
copy({
|
copy({
|
||||||
targets: [
|
targets: [
|
||||||
{ src: 'src/index.html', dest: outputpath },
|
{ src: 'src/index.html', dest: outputpath },
|
||||||
{ src: 'src/favicon.png', dest: outputpath }
|
{ src: 'src/favicon.png', dest: outputpath },
|
||||||
|
{ src: 'node_modules/@budibase/client/dist/budibase-client.esm.mjs', dest: outputpath }
|
||||||
]
|
]
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,17 @@ export const loadLibs = async (appName, appPackage) => {
|
||||||
return allLibraries;
|
return allLibraries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const loadLibUrls = (appName, appPackage) => {
|
||||||
|
|
||||||
|
const allLibraries = [];
|
||||||
|
for(let lib of appPackage.pages.componentLibraries) {
|
||||||
|
const libUrl = makeLibraryUrl(appName, lib);
|
||||||
|
allLibraries.push({libName:lib, importPath:libUrl});
|
||||||
|
}
|
||||||
|
|
||||||
|
return allLibraries;
|
||||||
|
}
|
||||||
|
|
||||||
export const loadLib = async (appName, lib, allLibs) => {
|
export const loadLib = async (appName, lib, allLibs) => {
|
||||||
allLibs[lib] = await import(makeLibraryUrl(appName, lib));
|
allLibs[lib] = await import(makeLibraryUrl(appName, lib));
|
||||||
return allLibs;
|
return allLibs;
|
||||||
|
|
|
@ -1,26 +1,14 @@
|
||||||
import {
|
import {
|
||||||
hierarchy as hierarchyFunctions,
|
hierarchy as hierarchyFunctions,
|
||||||
common
|
|
||||||
} from "../../../core/src";
|
} from "../../../core/src";
|
||||||
import {
|
import {
|
||||||
filter,
|
filter, cloneDeep, sortBy,
|
||||||
cloneDeep,
|
map, last, keys, concat,
|
||||||
sortBy,
|
find, isEmpty, reduce
|
||||||
map,
|
|
||||||
last,
|
|
||||||
keys,
|
|
||||||
concat,
|
|
||||||
find,
|
|
||||||
isEmpty,
|
|
||||||
groupBy,
|
|
||||||
reduce
|
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
import {
|
import {
|
||||||
pipe,
|
pipe, getNode, validate,
|
||||||
getNode,
|
constructHierarchy, templateApi
|
||||||
validate,
|
|
||||||
constructHierarchy,
|
|
||||||
templateApi
|
|
||||||
} from "../common/core";
|
} from "../common/core";
|
||||||
import {writable} from "svelte/store";
|
import {writable} from "svelte/store";
|
||||||
import { defaultPagesObject } from "../userInterface/pagesParsing/defaultPagesObject"
|
import { defaultPagesObject } from "../userInterface/pagesParsing/defaultPagesObject"
|
||||||
|
@ -28,10 +16,9 @@ import { buildPropsHierarchy } from "../userInterface/pagesParsing/buildPropsHie
|
||||||
import api from "./api";
|
import api from "./api";
|
||||||
import { isRootComponent } from "../userInterface/pagesParsing/searchComponents";
|
import { isRootComponent } from "../userInterface/pagesParsing/searchComponents";
|
||||||
import {
|
import {
|
||||||
getComponentInfo,
|
getComponentInfo, getNewComponentInfo
|
||||||
getNewComponentInfo
|
|
||||||
} from "../userInterface/pagesParsing/createProps";
|
} from "../userInterface/pagesParsing/createProps";
|
||||||
import { loadLibs } from "./loadComponentLibraries";
|
import { loadLibs, loadLibUrls } from "./loadComponentLibraries";
|
||||||
|
|
||||||
let appname = "";
|
let appname = "";
|
||||||
|
|
||||||
|
@ -117,6 +104,7 @@ const initialise = (store, initial) => async () => {
|
||||||
.then(r => r.json());
|
.then(r => r.json());
|
||||||
|
|
||||||
initial.libraries = await loadLibs(appname, pkg);
|
initial.libraries = await loadLibs(appname, pkg);
|
||||||
|
initial.loadLibraryUrls = () => loadLibUrls(appname, pkg);
|
||||||
initial.appname = appname;
|
initial.appname = appname;
|
||||||
initial.pages = pkg.pages;
|
initial.pages = pkg.pages;
|
||||||
initial.hasAppPackage = true;
|
initial.hasAppPackage = true;
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
export const EVENT_TYPE_MEMBER_NAME = "##eventHandlerType";
|
|
@ -10,7 +10,7 @@ import {
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
import { fade, slide } from 'svelte/transition';
|
import { fade, slide } from 'svelte/transition';
|
||||||
|
|
||||||
export let propertyName = "";
|
export let title = "";
|
||||||
export let onGoBack = () => {};
|
export let onGoBack = () => {};
|
||||||
export let instanceProps = {};
|
export let instanceProps = {};
|
||||||
export let onPropsChanged = () => {};
|
export let onPropsChanged = () => {};
|
||||||
|
@ -18,6 +18,9 @@ export let onPropsChanged = () => {};
|
||||||
|
|
||||||
let editingSubComponentName;
|
let editingSubComponentName;
|
||||||
let editingSubComponentProps;
|
let editingSubComponentProps;
|
||||||
|
let editingSubComponentArrayIndex;
|
||||||
|
let editingSubComponentArrayPropName;
|
||||||
|
let editingSubComponentTitle;
|
||||||
let allComponents;
|
let allComponents;
|
||||||
|
|
||||||
store.subscribe(s => {
|
store.subscribe(s => {
|
||||||
|
@ -33,18 +36,28 @@ const onSubComponentGoBack = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const onEditComponentProp = (propName, arrayIndex, arrayPropName) => {
|
const onEditComponentProp = (propName, arrayIndex, arrayPropName) => {
|
||||||
editingSubComponentName = isUndefined(arrayIndex)
|
editingSubComponentName = propName;
|
||||||
|
editingSubComponentTitle = isUndefined(arrayIndex)
|
||||||
? propName
|
? propName
|
||||||
: `${propName}[${arrayIndex}].${arrayPropName}`;
|
: `${propName}[${arrayIndex}].${arrayPropName}`;
|
||||||
editingSubComponentProps = isUndefined(arrayIndex)
|
editingSubComponentProps = isUndefined(arrayIndex)
|
||||||
? instanceProps[propName]
|
? instanceProps[propName]
|
||||||
: instanceProps[propName][arrayIndex][arrayPropName];
|
: instanceProps[propName][arrayIndex][arrayPropName];
|
||||||
|
editingSubComponentArrayIndex = arrayIndex;
|
||||||
|
editingSubComponentArrayPropName = arrayPropName;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const onSubComponentPropsChanged = (subProps) => {
|
const onSubComponentPropsChanged = (subProps) => {
|
||||||
const newProps = cloneDeep(instanceProps);
|
const newProps = cloneDeep(instanceProps);
|
||||||
|
if(isUndefined(editingSubComponentArrayIndex)) {
|
||||||
newProps[editingSubComponentName] = subProps;
|
newProps[editingSubComponentName] = subProps;
|
||||||
|
} else {
|
||||||
|
newProps[editingSubComponentName]
|
||||||
|
[editingSubComponentArrayIndex]
|
||||||
|
[editingSubComponentArrayPropName] = subProps;
|
||||||
|
}
|
||||||
|
|
||||||
instanceProps = newProps;
|
instanceProps = newProps;
|
||||||
onPropsChanged(newProps);
|
onPropsChanged(newProps);
|
||||||
}
|
}
|
||||||
|
@ -62,7 +75,7 @@ const propsChanged = newProps => {
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<IconButton icon="chevron-left"
|
<IconButton icon="chevron-left"
|
||||||
on:click={onGoBack}/>
|
on:click={onGoBack}/>
|
||||||
<span>{propertyName}</span>
|
<span>{title}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if editingSubComponentName}
|
{#if editingSubComponentName}
|
||||||
|
@ -71,7 +84,7 @@ const propsChanged = newProps => {
|
||||||
<svelte:self onPropsChanged={onSubComponentPropsChanged}
|
<svelte:self onPropsChanged={onSubComponentPropsChanged}
|
||||||
onGoBack={onSubComponentGoBack}
|
onGoBack={onSubComponentGoBack}
|
||||||
instanceProps={editingSubComponentProps}
|
instanceProps={editingSubComponentProps}
|
||||||
propertyName={editingSubComponentName} />
|
title={editingSubComponentTitle} />
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<PropsView {instanceProps}
|
<PropsView {instanceProps}
|
||||||
|
|
|
@ -2,79 +2,47 @@
|
||||||
import { store } from "../builderStore";
|
import { store } from "../builderStore";
|
||||||
import { makeLibraryUrl } from "../builderStore/loadComponentLibraries";
|
import { makeLibraryUrl } from "../builderStore/loadComponentLibraries";
|
||||||
import {
|
import {
|
||||||
last,
|
last, split, map, join
|
||||||
split,
|
|
||||||
map,
|
|
||||||
join
|
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
import { pipe } from "../common/core";
|
import { pipe } from "../common/core";
|
||||||
import { splitName } from "./pagesParsing/splitRootComponentName"
|
import { splitName } from "./pagesParsing/splitRootComponentName"
|
||||||
import { afterUpdate } from 'svelte';
|
import { afterUpdate } from 'svelte';
|
||||||
import { getRootComponent } from "./pagesParsing/getRootComponent";
|
import { getRootComponent } from "./pagesParsing/getRootComponent";
|
||||||
|
import { buildPropsHierarchy } from "./pagesParsing/buildPropsHierarchy";
|
||||||
|
|
||||||
if(!window.budibaseIframeConnector) {
|
|
||||||
window.budibaseIframeConnector = {
|
|
||||||
initialiseComponent(props, htmlElement) {
|
|
||||||
const rootComponent = getRootComponent(
|
|
||||||
props._component, allComponents);
|
|
||||||
|
|
||||||
const {componentName, libName} = splitName(
|
|
||||||
rootComponent.name);
|
|
||||||
|
|
||||||
new (libraries[libName][componentName])({
|
|
||||||
target: htmlElement,
|
|
||||||
props: {...props, _app: window.budibaseIframeConnector}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let component;
|
let component;
|
||||||
let stylesheetLinks = "";
|
let stylesheetLinks = "";
|
||||||
let componentHtml = "";
|
|
||||||
let props;
|
|
||||||
let componentLibraryUrl = "";
|
|
||||||
let rootComponentName = "";
|
let rootComponentName = "";
|
||||||
let iframe;
|
|
||||||
let libraries;
|
let libraries;
|
||||||
let allComponents;
|
let allComponents;
|
||||||
|
let appDefinition = {};
|
||||||
|
|
||||||
store.subscribe(s => {
|
store.subscribe(s => {
|
||||||
const {componentName, libName} = splitName(
|
const {componentName, libName} = splitName(
|
||||||
s.currentComponentInfo.rootComponent.name);
|
s.currentComponentInfo.rootComponent.name);
|
||||||
|
|
||||||
rootComponentName = componentName;
|
rootComponentName = componentName;
|
||||||
props = s.currentComponentInfo.fullProps;
|
|
||||||
component = s.libraries[libName][componentName];
|
component = s.libraries[libName][componentName];
|
||||||
stylesheetLinks = pipe(s.pages.stylesheets, [
|
stylesheetLinks = pipe(s.pages.stylesheets, [
|
||||||
map(s => `<link rel="stylesheet" href="${s}"/>`),
|
map(s => `<link rel="stylesheet" href="${s}"/>`),
|
||||||
join("\n")
|
join("\n")
|
||||||
]);
|
]);
|
||||||
componentLibraryUrl = makeLibraryUrl(s.appname, libName);
|
appDefinition = {
|
||||||
|
componentLibraries: s.loadLibraryUrls(),
|
||||||
|
props: buildPropsHierarchy(s.allComponents, s.currentFrontEndItem)
|
||||||
|
};
|
||||||
libraries = s.libraries;
|
libraries = s.libraries;
|
||||||
allComponents = s.allComponents;
|
allComponents = s.allComponents;
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
afterUpdate(() => {
|
|
||||||
if(iframe) iframeLoaded();
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
const iframeLoaded = () => {
|
|
||||||
setTimeout(() => {
|
|
||||||
iframe.style.height = (iframe.contentWindow.document.body.scrollHeight + 1).toString() + "px";
|
|
||||||
iframe.style.width = (iframe.contentWindow.document.body.scrollWidth + 1).toString() + "px";
|
|
||||||
}, 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="component-preview" >
|
<div class="component-preview" >
|
||||||
<div class="component-container">
|
<div class="component-container">
|
||||||
<iframe bind:this={iframe}
|
<iframe style="height: 100%; width: 100%"
|
||||||
on:load={iframeLoaded}
|
|
||||||
title="componentPreview"
|
title="componentPreview"
|
||||||
srcdoc={
|
srcdoc={
|
||||||
`<html>
|
`<html>
|
||||||
|
@ -82,16 +50,11 @@ const iframeLoaded = () => {
|
||||||
<head>
|
<head>
|
||||||
${stylesheetLinks}
|
${stylesheetLinks}
|
||||||
<script>
|
<script>
|
||||||
|
window["##BUDIBASE_APPDEFINITION##"] = ${JSON.stringify(appDefinition)};
|
||||||
import('${componentLibraryUrl}')
|
import('./budibase-client.esm.mjs')
|
||||||
.then(module => {
|
.then(module => {
|
||||||
const componentClass = module['${rootComponentName}'];
|
module.loadBudibase();
|
||||||
const instance = new componentClass({
|
|
||||||
target: document.body,
|
|
||||||
props: {...${JSON.stringify(props)}, _app: window.parent.budibaseIframeConnector}
|
|
||||||
}) ;
|
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -36,6 +36,10 @@ let modalElement
|
||||||
let propsValidationErrors = [];
|
let propsValidationErrors = [];
|
||||||
let editingComponentInstance;
|
let editingComponentInstance;
|
||||||
let editingComponentInstancePropName="";
|
let editingComponentInstancePropName="";
|
||||||
|
let editingComponentArrayIndex;
|
||||||
|
let editingComponentArrayPropName;
|
||||||
|
let editingComponentInstanceTitle;
|
||||||
|
|
||||||
let allComponents;
|
let allComponents;
|
||||||
|
|
||||||
$: shortName = last(name.split("/"));
|
$: shortName = last(name.split("/"));
|
||||||
|
@ -116,9 +120,13 @@ const onEditComponentProp = (propName, arrayIndex, arrayPropName) => {
|
||||||
editingComponentInstance = isUndefined(arrayIndex)
|
editingComponentInstance = isUndefined(arrayIndex)
|
||||||
? component.props[propName]
|
? component.props[propName]
|
||||||
: component.props[propName][arrayIndex][arrayPropName];
|
: component.props[propName][arrayIndex][arrayPropName];
|
||||||
editingComponentInstancePropName = isUndefined(arrayIndex)
|
editingComponentInstancePropName = propName;
|
||||||
|
editingComponentInstanceTitle = isUndefined(arrayIndex)
|
||||||
? propName
|
? propName
|
||||||
: `${propName}[${arrayIndex}].${arrayPropName}`;
|
: `${propName}[${arrayIndex}].${arrayPropName}`;
|
||||||
|
|
||||||
|
editingComponentArrayIndex = arrayIndex;
|
||||||
|
editingComponentArrayPropName = arrayPropName;
|
||||||
}
|
}
|
||||||
|
|
||||||
const componentInstanceCancelEdit = () => {
|
const componentInstanceCancelEdit = () => {
|
||||||
|
@ -127,8 +135,15 @@ const componentInstanceCancelEdit = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const componentInstancePropsChanged = (instanceProps) => {
|
const componentInstancePropsChanged = (instanceProps) => {
|
||||||
updateComponent(newComponent =>
|
updateComponent(newComponent => {
|
||||||
newComponent.props[editingComponentInstancePropName] = instanceProps);
|
if(isUndefined(editingComponentArrayIndex)) {
|
||||||
|
newComponent.props[editingComponentInstancePropName] = instanceProps;
|
||||||
|
} else {
|
||||||
|
newComponent.props[editingComponentInstancePropName]
|
||||||
|
[editingComponentArrayIndex]
|
||||||
|
[editingComponentArrayPropName] = instanceProps;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -151,7 +166,7 @@ const componentInstancePropsChanged = (instanceProps) => {
|
||||||
|
|
||||||
{#if editingComponentInstance}
|
{#if editingComponentInstance}
|
||||||
<ComponentInstanceEditor onGoBack={componentInstanceCancelEdit}
|
<ComponentInstanceEditor onGoBack={componentInstanceCancelEdit}
|
||||||
propertyName={editingComponentInstancePropName}
|
title={editingComponentInstanceTitle}
|
||||||
instanceProps={editingComponentInstance}
|
instanceProps={editingComponentInstance}
|
||||||
onPropsChanged={componentInstancePropsChanged}/>
|
onPropsChanged={componentInstancePropsChanged}/>
|
||||||
{:else}
|
{:else}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import EventSelector from "./EventSelector.svelte";
|
||||||
import {
|
import {
|
||||||
filter
|
filter
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
|
import {EVENT_TYPE_MEMBER_NAME} from "../common/eventHandlers";
|
||||||
export let parentProps;
|
export let parentProps;
|
||||||
export let propDef;
|
export let propDef;
|
||||||
export let onValueChanged;
|
export let onValueChanged;
|
||||||
|
@ -18,7 +18,8 @@ $: {
|
||||||
}
|
}
|
||||||
|
|
||||||
const addHandler = () => {
|
const addHandler = () => {
|
||||||
const newHandler = {handlerType:"", parameters:{}};
|
const newHandler = {parameters:{}};
|
||||||
|
newHandler[EVENT_TYPE_MEMBER_NAME] = "";
|
||||||
events = [...events, newHandler];
|
events = [...events, newHandler];
|
||||||
onValueChanged(events);
|
onValueChanged(events);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import {
|
||||||
find, map, keys, reduce
|
find, map, keys, reduce
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
import { pipe } from "../common/core";
|
import { pipe } from "../common/core";
|
||||||
|
import { EVENT_TYPE_MEMBER_NAME } from "../common/eventHandlers";
|
||||||
|
|
||||||
export let event;
|
export let event;
|
||||||
export let onChanged;
|
export let onChanged;
|
||||||
|
@ -21,7 +22,7 @@ let parameters = [];
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
if(event) {
|
if(event) {
|
||||||
eventType = event.handlerType;
|
eventType = event[EVENT_TYPE_MEMBER_NAME];
|
||||||
parameters = pipe(event.parameters, [
|
parameters = pipe(event.parameters, [
|
||||||
keys,
|
keys,
|
||||||
map(k => ({name:k, value:event.parameters[k]}))
|
map(k => ({name:k, value:event.parameters[k]}))
|
||||||
|
@ -41,10 +42,11 @@ const eventChanged = (type, parameters) => {
|
||||||
, {}
|
, {}
|
||||||
)(parameters)
|
)(parameters)
|
||||||
|
|
||||||
onChanged({
|
const ev = {};
|
||||||
handlerType:type,
|
ev[EVENT_TYPE_MEMBER_NAME]=type;
|
||||||
parameters: paramsAsObject
|
ev.parameters = paramsAsObject;
|
||||||
});
|
|
||||||
|
onChanged(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
const eventTypeChanged = (ev) => {
|
const eventTypeChanged = (ev) => {
|
||||||
|
@ -53,9 +55,9 @@ const eventTypeChanged = (ev) => {
|
||||||
eventChanged(eType.name, emptyParameters);
|
eventChanged(eType.name, emptyParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
const onParameterChanged = index => ev => {
|
const onParameterChanged = index => val => {
|
||||||
const newparameters = [...parameters];
|
const newparameters = [...parameters];
|
||||||
newparameters[index].value = ev.target.value;
|
newparameters[index].value = val;
|
||||||
eventChanged(eventType, newparameters);
|
eventChanged(eventType, newparameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import {
|
import {
|
||||||
getComponentInfo, createProps, getInstanceProps
|
getComponentInfo, createProps, getInstanceProps
|
||||||
} from "./createProps";
|
} from "./createProps";
|
||||||
import { cloneDeep } from "lodash/fp";
|
|
||||||
|
|
||||||
export const buildPropsHierarchy = (allComponents, baseComponent) => {
|
export const buildPropsHierarchy = (allComponents, baseComponent) => {
|
||||||
|
|
||||||
|
@ -39,7 +38,7 @@ export const buildPropsHierarchy = (allComponents, baseComponent) => {
|
||||||
for(let element of propsArray) {
|
for(let element of propsArray) {
|
||||||
newPropsArray.push(
|
newPropsArray.push(
|
||||||
buildProps(
|
buildProps(
|
||||||
`${propName}[${index}]`,
|
`${propName}#array_element#`,
|
||||||
propDef.elementDefinition,
|
propDef.elementDefinition,
|
||||||
element));
|
element));
|
||||||
index++;
|
index++;
|
||||||
|
|
|
@ -150,7 +150,7 @@ export const createProps = (componentName, propsDefinition, derivedFromProps) =>
|
||||||
|
|
||||||
export const createArrayElementProps = (arrayPropName, elementDefinition) =>
|
export const createArrayElementProps = (arrayPropName, elementDefinition) =>
|
||||||
createProps(
|
createProps(
|
||||||
`#element#${arrayPropName}`,
|
`#${arrayPropName}#array_element`,
|
||||||
elementDefinition);
|
elementDefinition);
|
||||||
|
|
||||||
const parsePropDef = propDef => {
|
const parsePropDef = propDef => {
|
||||||
|
|
|
@ -8,6 +8,10 @@ import {
|
||||||
every
|
every
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
|
|
||||||
|
import {
|
||||||
|
EVENT_TYPE_MEMBER_NAME
|
||||||
|
} from "../../common/eventHandlers";
|
||||||
|
|
||||||
const defaultDef = typeName => () => ({
|
const defaultDef = typeName => () => ({
|
||||||
type: typeName,
|
type: typeName,
|
||||||
required:false,
|
required:false,
|
||||||
|
@ -51,7 +55,7 @@ export const expandPropsDefinition = propsDefinition => {
|
||||||
const isComponent = isObjectLike;
|
const isComponent = isObjectLike;
|
||||||
const isEvent = e =>
|
const isEvent = e =>
|
||||||
isPlainObject(e)
|
isPlainObject(e)
|
||||||
&& isString(e.handlerType)
|
&& isString(e[EVENT_TYPE_MEMBER_NAME])
|
||||||
&& isPlainObject(e.parameters);
|
&& isPlainObject(e.parameters);
|
||||||
|
|
||||||
const isEventList = e =>
|
const isEventList = e =>
|
||||||
|
|
|
@ -145,7 +145,6 @@ export const validateProps = (propsDefinition, props, stack=[], isFinal=true) =>
|
||||||
if(propDef.type === "array") {
|
if(propDef.type === "array") {
|
||||||
let index = 0;
|
let index = 0;
|
||||||
for(let arrayItem of propValue) {
|
for(let arrayItem of propValue) {
|
||||||
arrayItem._component = arrayElementComponentName(props._component, propDefName);
|
|
||||||
const arrayErrs = validateProps(
|
const arrayErrs = validateProps(
|
||||||
propDef.elementDefinition,
|
propDef.elementDefinition,
|
||||||
arrayItem,
|
arrayItem,
|
||||||
|
|
|
@ -6,8 +6,8 @@ import { terser } from 'rollup-plugin-terser';
|
||||||
|
|
||||||
const lodash_fp_exports = [
|
const lodash_fp_exports = [
|
||||||
"find", "isUndefined", "split",
|
"find", "isUndefined", "split",
|
||||||
"last", "union", "reduce",
|
"last", "union", "reduce", "isObject",
|
||||||
"cloneDeep", "some"];
|
"cloneDeep", "some", "isArray"];
|
||||||
|
|
||||||
const lodash_exports = [
|
const lodash_exports = [
|
||||||
"flow","reduce", "constant", "head", "isEmpty",
|
"flow","reduce", "constant", "head", "isEmpty",
|
||||||
|
|
|
@ -4,7 +4,7 @@ import {
|
||||||
} from "lodash/fp";
|
} from "lodash/fp";
|
||||||
import {writable} from "svelte/store";
|
import {writable} from "svelte/store";
|
||||||
import { $ } from "./core/common";
|
import { $ } from "./core/common";
|
||||||
import { bindComponent } from "./stateBinding";
|
import { setupBinding } from "./state/stateBinding";
|
||||||
|
|
||||||
export const createApp = componentLibraries => {
|
export const createApp = componentLibraries => {
|
||||||
|
|
||||||
|
@ -12,12 +12,16 @@ export const createApp = componentLibraries => {
|
||||||
|
|
||||||
const {componentName, libName} = splitName(props._component);
|
const {componentName, libName} = splitName(props._component);
|
||||||
|
|
||||||
|
if(!componentName || !libName) return;
|
||||||
|
|
||||||
|
const {initialProps, bind} = setupBinding(store, props);
|
||||||
|
|
||||||
const component = new (componentLibraries[libName][componentName])({
|
const component = new (componentLibraries[libName][componentName])({
|
||||||
target: htmlElement,
|
target: htmlElement,
|
||||||
props: {...props, _app}
|
props: {...initialProps, _app}
|
||||||
});
|
});
|
||||||
|
|
||||||
bindComponent(store, component);
|
bind(component);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,32 @@
|
||||||
import { createApp } from "./createApp";
|
import { createApp } from "./createApp";
|
||||||
|
|
||||||
const appDefinition = window["##BUDIBASE_APPDEFINITION##"];
|
|
||||||
|
|
||||||
const componentLibraryUrl = (lib) => "./" + trimSlash(lib)
|
export const loadBudibase = async (componentLibraries, props) => {
|
||||||
|
|
||||||
const trimSlash = (str) => str.replace(/^\/+|\/+$/g, '');
|
const appDefinition = window["##BUDIBASE_APPDEFINITION##"];
|
||||||
|
|
||||||
(async () => {
|
if(!componentLibraries) {
|
||||||
|
|
||||||
const componentLibraries = {};
|
const componentLibraryUrl = (lib) => "./" + trimSlash(lib)
|
||||||
|
const trimSlash = (str) => str.replace(/^\/+|\/+$/g, '');
|
||||||
|
componentLibraries = {};
|
||||||
|
|
||||||
for(let lib of appDefinition.componentLibraries) {
|
for(let lib of appDefinition.componentLibraries) {
|
||||||
componentLibraries[lib.libName] = await import(
|
componentLibraries[lib.libName] = await import(
|
||||||
componentLibraryUrl(lib.importPath));
|
componentLibraryUrl(lib.importPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!props) {
|
||||||
|
props = appDefinition.props;
|
||||||
|
}
|
||||||
|
|
||||||
const _app = createApp(componentLibraries);
|
const _app = createApp(componentLibraries);
|
||||||
|
|
||||||
_app.initialiseComponent(
|
_app.initialiseComponent(
|
||||||
props,
|
props,
|
||||||
document.body);
|
document.body);
|
||||||
|
|
||||||
})();
|
};
|
||||||
|
|
||||||
|
window.loadBudibase = loadBudibase;
|
|
@ -0,0 +1,26 @@
|
||||||
|
import {
|
||||||
|
setState
|
||||||
|
} from "./setState";
|
||||||
|
import {
|
||||||
|
isArray, isUndefined
|
||||||
|
} from "lodash/fp";
|
||||||
|
|
||||||
|
export const EVENT_TYPE_MEMBER_NAME = "##eventHandlerType";
|
||||||
|
|
||||||
|
export const eventHandlers = store => {
|
||||||
|
|
||||||
|
const handler = (parameters, execute) => ({
|
||||||
|
execute, parameters
|
||||||
|
});
|
||||||
|
|
||||||
|
const setStateHandler = ({path, value}) => setState(store, path, value);
|
||||||
|
|
||||||
|
return {
|
||||||
|
"Set State": handler(["path", "value"], setStateHandler)
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const isEventType = prop =>
|
||||||
|
isArray(prop)
|
||||||
|
&& prop.length > 0
|
||||||
|
&& !isUndefined(prop[0][EVENT_TYPE_MEMBER_NAME]);
|
|
@ -0,0 +1,34 @@
|
||||||
|
import {
|
||||||
|
isUndefined,
|
||||||
|
isObject
|
||||||
|
} from "lodash/fp";
|
||||||
|
|
||||||
|
export const getState = (s, path, fallback) => {
|
||||||
|
|
||||||
|
const pathParts = path.split(".");
|
||||||
|
const safeGetPath = (obj, currentPartIndex=0) => {
|
||||||
|
|
||||||
|
const currentKey = pathParts[currentPartIndex];
|
||||||
|
|
||||||
|
if(pathParts.length - 1 == currentPartIndex) {
|
||||||
|
const value = obj[currentKey];
|
||||||
|
if(isUndefined(value))
|
||||||
|
return fallback;
|
||||||
|
else
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(obj[currentKey] === null
|
||||||
|
|| obj[currentKey] === undefined
|
||||||
|
|| !isObject(obj[currentKey])) {
|
||||||
|
|
||||||
|
return fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
return safeGetPath(obj[currentKey], currentPartIndex + 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return safeGetPath(s);
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
import {
|
||||||
|
isObject
|
||||||
|
} from "lodash/fp";
|
||||||
|
|
||||||
|
|
||||||
|
export const setState = (store, path, value) => {
|
||||||
|
|
||||||
|
const pathParts = path.split(".");
|
||||||
|
const safeSetPath = (obj, currentPartIndex=0) => {
|
||||||
|
|
||||||
|
const currentKey = pathParts[currentPartIndex];
|
||||||
|
|
||||||
|
if(pathParts.length - 1 == currentPartIndex) {
|
||||||
|
obj[currentKey] = value;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(obj[currentKey] === null
|
||||||
|
|| obj[currentKey] === undefined
|
||||||
|
|| !isObject(obj.currentKey)) {
|
||||||
|
|
||||||
|
obj[currentKey] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
safeSetPath(obj[currentKey], currentPartIndex + 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
store.update(s => {
|
||||||
|
safeSetPath(s);
|
||||||
|
return s;
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,118 @@
|
||||||
|
import {
|
||||||
|
isEventType, eventHandlers, EVENT_TYPE_MEMBER_NAME
|
||||||
|
} from "./eventHandlers";
|
||||||
|
|
||||||
|
import {
|
||||||
|
getState
|
||||||
|
} from "./getState";
|
||||||
|
|
||||||
|
export const BB_STATE_BINDINGPATH = "##bbstate";
|
||||||
|
export const BB_STATE_FALLBACK = "##bbstatefallback";
|
||||||
|
const doNothing = () => {};
|
||||||
|
export const setupBinding = (store, props) => {
|
||||||
|
|
||||||
|
const initialProps = {...props};
|
||||||
|
const boundProps = [];
|
||||||
|
const componentEventHandlers = [];
|
||||||
|
|
||||||
|
for(let propName in props) {
|
||||||
|
const val = initialProps[propName];
|
||||||
|
|
||||||
|
if(isState(val)) {
|
||||||
|
|
||||||
|
const binding = stateBinding(val);
|
||||||
|
const fallback = stateFallback(val);
|
||||||
|
|
||||||
|
boundProps.push({
|
||||||
|
stateBinding:binding,
|
||||||
|
fallback, propName
|
||||||
|
});
|
||||||
|
|
||||||
|
initialProps[propName] = fallback;
|
||||||
|
} else if(isEventType(val)) {
|
||||||
|
|
||||||
|
const handlers = { propName, handlers:[] };
|
||||||
|
componentEventHandlers.push(handlers);
|
||||||
|
|
||||||
|
for(let e of val) {
|
||||||
|
handlers.handlers.push({
|
||||||
|
handlerType: e[EVENT_TYPE_MEMBER_NAME],
|
||||||
|
parameters: e.parameters
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
initialProps[propName] = doNothing;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const bind = (component) => {
|
||||||
|
|
||||||
|
if(boundProps.length === 0 && componentEventHandlers.length === 0) return;
|
||||||
|
|
||||||
|
const handlerTypes = eventHandlers(store);
|
||||||
|
|
||||||
|
const unsubscribe = store.subscribe(s => {
|
||||||
|
const newProps = {};
|
||||||
|
|
||||||
|
for(let boundProp of boundProps) {
|
||||||
|
const val = getState(
|
||||||
|
s,
|
||||||
|
boundProp.stateBinding,
|
||||||
|
boundProp.fallback);
|
||||||
|
|
||||||
|
if(val === undefined && newProps[boundProp.propName] !== undefined) {
|
||||||
|
delete newProps[boundProp.propName];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(val !== undefined) {
|
||||||
|
newProps[boundProp.propName] = val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let boundHandler of componentEventHandlers) {
|
||||||
|
|
||||||
|
const closuredHandlers = [];
|
||||||
|
for(let h of boundHandler.handlers) {
|
||||||
|
const parameters = {};
|
||||||
|
for(let pname in h.parameters) {
|
||||||
|
const p = h.parameters[pname];
|
||||||
|
parameters[pname] = isState(p)
|
||||||
|
? getState(
|
||||||
|
s, p[BB_STATE_BINDINGPATH], p[BB_STATE_FALLBACK])
|
||||||
|
: p;
|
||||||
|
|
||||||
|
}
|
||||||
|
const handlerType = handlerTypes[h.handlerType];
|
||||||
|
closuredHandlers.push(() => handlerType.execute(parameters));
|
||||||
|
}
|
||||||
|
|
||||||
|
newProps[boundHandler.propName] = () => {
|
||||||
|
for(let runHandler of closuredHandlers) {
|
||||||
|
runHandler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
component.$set(newProps);
|
||||||
|
});
|
||||||
|
|
||||||
|
return unsubscribe;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
initialProps, bind
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const isState = (prop) => prop[BB_STATE_BINDINGPATH] !== undefined;
|
||||||
|
const stateBinding = (prop) => prop[BB_STATE_BINDINGPATH];
|
||||||
|
const stateFallback = (prop) => prop[BB_STATE_FALLBACK];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
|
|
||||||
export const BB_STATE_BINDINGPATH = "##bbstate";
|
|
||||||
export const BB_STATE_FALLBACK = "##bbstatefallback";
|
|
||||||
|
|
||||||
export const bindComponent = (store, component) => {
|
|
||||||
|
|
||||||
const newProps = {...component.props};
|
|
||||||
const boundProps = [];
|
|
||||||
|
|
||||||
for(let propName in component.props) {
|
|
||||||
const val = newProps[propName];
|
|
||||||
|
|
||||||
if(!isState(val)) continue;
|
|
||||||
|
|
||||||
const binding = stateBinding(val);
|
|
||||||
const fallback = stateFallback(val);
|
|
||||||
|
|
||||||
boundProps.push({
|
|
||||||
stateBinding:binding,
|
|
||||||
fallback, propName
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(boundProps.length === 0) return;
|
|
||||||
|
|
||||||
const unsubscribe = store.subscribe(s => {
|
|
||||||
const newProps = {...component.props};
|
|
||||||
|
|
||||||
for(let boundProp of boundProps) {
|
|
||||||
const val = boundValueFromStore(
|
|
||||||
s,
|
|
||||||
boundProp.stateBinding,
|
|
||||||
boundProp.fallback);
|
|
||||||
|
|
||||||
if(val === undefined && newProps[boundProp.propName] !== undefined) {
|
|
||||||
delete newProps[boundProp.propName];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(val !== undefined) {
|
|
||||||
newProps[boundProp.propName] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
component.$set(newProps);
|
|
||||||
});
|
|
||||||
|
|
||||||
return unsubscribe;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const isState = (prop) => prop[BB_STATE_BINDINGPATH] !== undefined;
|
|
||||||
const stateBinding = (prop) => prop[BB_STATE_BINDINGPATH];
|
|
||||||
const stateFallback = (prop) => prop[BB_STATE_FALLBACK];
|
|
||||||
const boundValueFromStore = (s, binding, fallback) => {
|
|
||||||
const value = s[binding];
|
|
||||||
if(value === undefined) return fallback;
|
|
||||||
return value;
|
|
||||||
}
|
|
|
@ -0,0 +1,146 @@
|
||||||
|
import {
|
||||||
|
setupBinding,
|
||||||
|
BB_STATE_BINDINGPATH,
|
||||||
|
BB_STATE_FALLBACK
|
||||||
|
} from "../src/state/stateBinding";
|
||||||
|
import { EVENT_TYPE_MEMBER_NAME } from "../src/state/eventHandlers";
|
||||||
|
import {writable} from "svelte/store";
|
||||||
|
import { isFunction } from "lodash/fp";
|
||||||
|
|
||||||
|
describe("setupBinding", () => {
|
||||||
|
|
||||||
|
|
||||||
|
it("should correctly create initials props, including fallback values", () => {
|
||||||
|
|
||||||
|
const {store, props, component} = testSetup();
|
||||||
|
|
||||||
|
const {initialProps} = testSetupBinding(store, props, component);
|
||||||
|
|
||||||
|
expect(initialProps.boundWithFallback).toBe("Bob");
|
||||||
|
expect(initialProps.boundNoFallback).toBeUndefined();
|
||||||
|
expect(initialProps.unbound).toBe("hello");
|
||||||
|
|
||||||
|
expect(isFunction(initialProps.eventBound)).toBeTruthy();
|
||||||
|
initialProps.eventBound();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should update component bound props when store is updated", () => {
|
||||||
|
|
||||||
|
const {component, store, props} = testSetup();
|
||||||
|
|
||||||
|
const {bind} = testSetupBinding(store, props, component);
|
||||||
|
bind(component);
|
||||||
|
|
||||||
|
store.update(s => {
|
||||||
|
s.FirstName = "Bobby";
|
||||||
|
s.LastName = "Thedog";
|
||||||
|
s.Customer = {
|
||||||
|
Name: "ACME inc",
|
||||||
|
Address: ""
|
||||||
|
};
|
||||||
|
s.addressToSet = "123 Main Street"
|
||||||
|
return s;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(component.props.boundWithFallback).toBe("Bobby");
|
||||||
|
expect(component.props.boundNoFallback).toBe("Thedog");
|
||||||
|
expect(component.props.multiPartBound).toBe("ACME inc");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should not update unbound props when store is updated", () => {
|
||||||
|
|
||||||
|
const {component, store, props} = testSetup();
|
||||||
|
|
||||||
|
const {bind} = testSetupBinding(store, props, component);
|
||||||
|
bind(component);
|
||||||
|
|
||||||
|
store.update(s => {
|
||||||
|
s.FirstName = "Bobby";
|
||||||
|
s.LastName = "Thedog";
|
||||||
|
s.Customer = {
|
||||||
|
Name: "ACME inc",
|
||||||
|
Address: ""
|
||||||
|
};
|
||||||
|
s.addressToSet = "123 Main Street"
|
||||||
|
return s;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(component.props.unbound).toBe("hello");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should update event handlers on state change", () => {
|
||||||
|
|
||||||
|
const {component, store, props} = testSetup();
|
||||||
|
|
||||||
|
const {bind} = testSetupBinding(store, props, component);
|
||||||
|
bind(component);
|
||||||
|
|
||||||
|
expect(component.props.boundToEventOutput).toBe("initial address");
|
||||||
|
component.props.eventBound();
|
||||||
|
expect(component.props.boundToEventOutput).toBe("event fallback address");
|
||||||
|
|
||||||
|
store.update(s => {
|
||||||
|
s.addressToSet = "123 Main Street"
|
||||||
|
return s;
|
||||||
|
});
|
||||||
|
|
||||||
|
component.props.eventBound();
|
||||||
|
expect(component.props.boundToEventOutput).toBe("123 Main Street");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
const testSetupBinding = (store, props, component) => {
|
||||||
|
const setup = setupBinding(store, props);
|
||||||
|
component.props = setup.initialProps; // svelte does this for us in real life
|
||||||
|
return setup;
|
||||||
|
}
|
||||||
|
const testSetup = () => {
|
||||||
|
|
||||||
|
const c = {};
|
||||||
|
|
||||||
|
c.props = {};
|
||||||
|
c.$set = propsToSet => {
|
||||||
|
for(let pname in propsToSet)
|
||||||
|
c.props[pname] = propsToSet[pname];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const binding = (path, fallback) => {
|
||||||
|
const b = {};
|
||||||
|
b[BB_STATE_BINDINGPATH] = path;
|
||||||
|
b[BB_STATE_FALLBACK] = fallback;
|
||||||
|
return b;
|
||||||
|
};
|
||||||
|
|
||||||
|
const event = (handlerType, parameters) => {
|
||||||
|
const e = {};
|
||||||
|
e[EVENT_TYPE_MEMBER_NAME] = handlerType;
|
||||||
|
e.parameters = parameters;
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = {
|
||||||
|
boundWithFallback : binding("FirstName", "Bob"),
|
||||||
|
boundNoFallback : binding("LastName"),
|
||||||
|
unbound: "hello",
|
||||||
|
multiPartBound: binding("Customer.Name", "ACME"),
|
||||||
|
boundToEventOutput: binding("Customer.Address", "initial address"),
|
||||||
|
eventBound: [
|
||||||
|
event("Set State", {
|
||||||
|
path: "Customer.Address",
|
||||||
|
value: binding("addressToSet", "event fallback address")
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
component:c,
|
||||||
|
store:writable({}),
|
||||||
|
props
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -156,14 +156,75 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"props": {
|
"props": {
|
||||||
"main": {},
|
"main": {
|
||||||
|
"_component": "@budibase/standard-components/grid",
|
||||||
|
"gridTemplateRows": "",
|
||||||
|
"gridTemplateColumns": "[left] 1fr [right] 1fr",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"_component": "children#array_element#",
|
||||||
|
"control": {
|
||||||
|
"_component": "@budibase/standard-components/button",
|
||||||
|
"contentText": "Click Me",
|
||||||
|
"contentComponent": {
|
||||||
|
"_component": ""
|
||||||
|
},
|
||||||
|
"className": "default",
|
||||||
|
"disabled": false,
|
||||||
|
"onClick": [
|
||||||
|
{
|
||||||
|
"##eventHandlerType": "Set State",
|
||||||
|
"parameters": {
|
||||||
|
"path": "SomeText",
|
||||||
|
"value": "hello !"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridColumn": "left",
|
||||||
|
"gridRow": "",
|
||||||
|
"gridColumnStart": "",
|
||||||
|
"gridColumnEnd": "",
|
||||||
|
"gridRowStart": "",
|
||||||
|
"gridRowEnd": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_component": "children#array_element#",
|
||||||
|
"control": {
|
||||||
|
"_component": "@budibase/standard-components/button",
|
||||||
|
"contentText": {
|
||||||
|
"##bbstate": "SomeText",
|
||||||
|
"##bbstatefallback": "(none)"
|
||||||
|
},
|
||||||
|
"contentComponent": {
|
||||||
|
"_component": ""
|
||||||
|
},
|
||||||
|
"className": "default",
|
||||||
|
"disabled": false,
|
||||||
|
"onClick": []
|
||||||
|
},
|
||||||
|
"gridColumn": "",
|
||||||
|
"gridRow": "",
|
||||||
|
"gridColumnStart": "",
|
||||||
|
"gridColumnEnd": "",
|
||||||
|
"gridRowStart": "",
|
||||||
|
"gridRowEnd": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"width": "auto",
|
||||||
|
"height": "auto",
|
||||||
|
"containerClass": "",
|
||||||
|
"itemContainerClass": ""
|
||||||
|
},
|
||||||
"unauthenticated": {
|
"unauthenticated": {
|
||||||
"_component": "budibase-standard-components/login",
|
"_component": "@budibase/standard-components/grid",
|
||||||
"logo": "/_shared/budibase-logo.png",
|
"gridTemplateRows": "",
|
||||||
"loginRedirect": "",
|
"gridTemplateColumns": "[left] 1fr [right] 1fr",
|
||||||
"usernameLabel": "Username",
|
"children": [],
|
||||||
"passwordLabel": "Password",
|
"width": "auto",
|
||||||
"loginButtonLabel": "Login"
|
"height": "auto",
|
||||||
|
"containerClass": "",
|
||||||
|
"itemContainerClass": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Button in the middle",
|
|
||||||
"description": "",
|
|
||||||
"inherits": "Centered Panel",
|
|
||||||
"props": {
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"_component": "undefined:children",
|
|
||||||
"control": {
|
|
||||||
"_component": "@budibase/standard-components/button",
|
|
||||||
"contentText": "Button",
|
|
||||||
"contentComponent": {
|
|
||||||
"_component": ""
|
|
||||||
},
|
|
||||||
"className": "default",
|
|
||||||
"disabled": false,
|
|
||||||
"onClick": []
|
|
||||||
},
|
|
||||||
"gridColumn": "center",
|
|
||||||
"gridRow": "middle",
|
|
||||||
"gridColumnStart": "",
|
|
||||||
"gridColumnEnd": "",
|
|
||||||
"gridRowStart": "",
|
|
||||||
"gridRowEnd": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"height": "200px",
|
|
||||||
"width": "200px"
|
|
||||||
},
|
|
||||||
"tags": [
|
|
||||||
"div",
|
|
||||||
"container",
|
|
||||||
"layout",
|
|
||||||
"panel",
|
|
||||||
"grid"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -5,14 +5,14 @@
|
||||||
"props": {
|
"props": {
|
||||||
"onClick": [
|
"onClick": [
|
||||||
{
|
{
|
||||||
"handlerType": "Load Record",
|
"##eventHandlerType": "Load Record",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"recordKey": "waa",
|
"recordKey": "waa",
|
||||||
"statePath": "yea"
|
"statePath": "yea"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"handlerType": "Load Record",
|
"##eventHandlerType": "Load Record",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"recordKey": "ttt",
|
"recordKey": "ttt",
|
||||||
"statePath": "eee"
|
"statePath": "eee"
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
{
|
{
|
||||||
"name": "Centered Panel",
|
"name": "/containers/two_columns",
|
||||||
"description": "",
|
"description": "",
|
||||||
"inherits": "@budibase/standard-components/grid",
|
"inherits": "@budibase/standard-components/grid",
|
||||||
"props": {
|
"props": {
|
||||||
"gridTemplateColumns": "[left] 30px [center] 1fr [right] 30px",
|
"gridTemplateColumns": "[left] 1fr [right] 1fr"
|
||||||
"gridTemplateRows": "[top] 30px [middle] 1fr [bottom] 30px"
|
|
||||||
},
|
},
|
||||||
"tags": [
|
"tags": [
|
||||||
"div",
|
"div",
|
|
@ -0,0 +1,65 @@
|
||||||
|
{
|
||||||
|
"name": "mike",
|
||||||
|
"description": "",
|
||||||
|
"inherits": "containers/two_columns",
|
||||||
|
"props": {
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"_component": "#children#array_element",
|
||||||
|
"control": {
|
||||||
|
"_component": "@budibase/standard-components/button",
|
||||||
|
"contentText": "Click Me",
|
||||||
|
"contentComponent": {
|
||||||
|
"_component": ""
|
||||||
|
},
|
||||||
|
"className": "default",
|
||||||
|
"disabled": false,
|
||||||
|
"onClick": [
|
||||||
|
{
|
||||||
|
"##eventHandlerType": "Set State",
|
||||||
|
"parameters": {
|
||||||
|
"path": "SomeText",
|
||||||
|
"value": "hello !"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridColumn": "left",
|
||||||
|
"gridRow": "",
|
||||||
|
"gridColumnStart": "",
|
||||||
|
"gridColumnEnd": "",
|
||||||
|
"gridRowStart": "",
|
||||||
|
"gridRowEnd": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_component": "#children#array_element",
|
||||||
|
"control": {
|
||||||
|
"_component": "@budibase/standard-components/button",
|
||||||
|
"contentText": {
|
||||||
|
"##bbstate": "SomeText",
|
||||||
|
"##bbstatefallback": "(none)"
|
||||||
|
},
|
||||||
|
"contentComponent": {
|
||||||
|
"_component": ""
|
||||||
|
},
|
||||||
|
"className": "default",
|
||||||
|
"disabled": false,
|
||||||
|
"onClick": []
|
||||||
|
},
|
||||||
|
"gridColumn": "",
|
||||||
|
"gridRow": "",
|
||||||
|
"gridColumnStart": "",
|
||||||
|
"gridColumnEnd": "",
|
||||||
|
"gridRowStart": "",
|
||||||
|
"gridRowEnd": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"div",
|
||||||
|
"container",
|
||||||
|
"layout",
|
||||||
|
"panel",
|
||||||
|
"grid"
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,13 +1,15 @@
|
||||||
{
|
{
|
||||||
"main": {
|
"main": {
|
||||||
"index": {},
|
"index": {
|
||||||
"appBody": ""
|
"title": "main yeo"
|
||||||
|
},
|
||||||
|
"appBody": "mike"
|
||||||
},
|
},
|
||||||
"unauthenticated": {
|
"unauthenticated": {
|
||||||
"index": {
|
"index": {
|
||||||
"title": "Test App Two"
|
"title": "main"
|
||||||
},
|
},
|
||||||
"appBody": "login"
|
"appBody": "containers/two_columns"
|
||||||
},
|
},
|
||||||
"componentLibraries": [
|
"componentLibraries": [
|
||||||
"@budibase/standard-components"
|
"@budibase/standard-components"
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +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":{}}
|
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":[{"importPath":"/lib/node_modules/@budibase/standard-components/dist/index.js","libName":"@budibase/standard-components"}],"appRootPath":"/testApp2","props":{"_component":"@budibase/standard-components/grid","gridTemplateRows":"","gridTemplateColumns":"[left] 1fr [right] 1fr","children":[{"_component":"children#array_element#","control":{"_component":"@budibase/standard-components/button","contentText":"Click Me","contentComponent":{"_component":""},"className":"default","disabled":false,"onClick":[{"##eventHandlerType":"Set State","parameters":{"path":"SomeText","value":"hello !"}}]},"gridColumn":"left","gridRow":"","gridColumnStart":"","gridColumnEnd":"","gridRowStart":"","gridRowEnd":""},{"_component":"children#array_element#","control":{"_component":"@budibase/standard-components/button","contentText":{"##bbstate":"SomeText","##bbstatefallback":"(none)"},"contentComponent":{"_component":""},"className":"default","disabled":false,"onClick":[]},"gridColumn":"","gridRow":"","gridColumnStart":"","gridColumnEnd":"","gridRowStart":"","gridRowEnd":""}],"width":"auto","height":"auto","containerClass":"","itemContainerClass":""}}
|
|
@ -4,16 +4,26 @@
|
||||||
<meta charset='utf8'>
|
<meta charset='utf8'>
|
||||||
<meta name='viewport' content='width=device-width'>
|
<meta name='viewport' content='width=device-width'>
|
||||||
|
|
||||||
<title>Budibase App</title>
|
<title>main yeo</title>
|
||||||
<link rel='icon' type='image/png' href='/testApp2/_shared/favicon.png'>
|
<link rel='icon' type='image/png' href='/testApp2//_shared/favicon.png'>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<script src='/testApp2/clientAppDefinition.js'></script>
|
||||||
<script src='/testApp2/budibase-client.js'></script>
|
<script src='/testApp2/budibase-client.js'></script>
|
||||||
|
<script>
|
||||||
|
loadBudibase();
|
||||||
|
</script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="app">
|
<body id="app">
|
||||||
<script src='/testApp2/clientAppDefinition.js'></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1 +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":{"_component":"budibase-standard-components/login","logo":"/_shared/budibase-logo.png","loginRedirect":"","usernameLabel":"Username","passwordLabel":"Password","loginButtonLabel":"Login"}}
|
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":[{"importPath":"/lib/node_modules/@budibase/standard-components/dist/index.js","libName":"@budibase/standard-components"}],"appRootPath":"/testApp2","props":{"_component":"@budibase/standard-components/grid","gridTemplateRows":"","gridTemplateColumns":"[left] 1fr [right] 1fr","children":[],"width":"auto","height":"auto","containerClass":"","itemContainerClass":""}}
|
|
@ -4,16 +4,26 @@
|
||||||
<meta charset='utf8'>
|
<meta charset='utf8'>
|
||||||
<meta name='viewport' content='width=device-width'>
|
<meta name='viewport' content='width=device-width'>
|
||||||
|
|
||||||
<title>Test App Two</title>
|
<title>main</title>
|
||||||
<link rel='icon' type='image/png' href='/testApp2/_shared/favicon.png'>
|
<link rel='icon' type='image/png' href='/testApp2//_shared/favicon.png'>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
<script src='/testApp2/clientAppDefinition.js'></script>
|
||||||
<script src='/testApp2/budibase-client.js'></script>
|
<script src='/testApp2/budibase-client.js'></script>
|
||||||
|
<script>
|
||||||
|
loadBudibase();
|
||||||
|
</script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="app">
|
<body id="app">
|
||||||
<script src='/testApp2/clientAppDefinition.js'></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
File diff suppressed because one or more lines are too long
|
@ -3,45 +3,45 @@ main.svelte-1ui0j3s{height:100%;width:100%;font-family:"Roboto", Helvetica, Aria
|
||||||
.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-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%}
|
||||||
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}
|
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)}
|
|
||||||
.border-normal.svelte-vnon4v{border-radius:var(--borderradiusall)}.border-left.svelte-vnon4v{border-radius:var(--borderradius) 0 0 var(--borderradius)}.border-right.svelte-vnon4v{border-radius:0 var(--borderradius) var(--borderradius) 0}.border-middle.svelte-vnon4v{border-radius:0}button.svelte-vnon4v{border-style:solid;padding:7.5px 15px;cursor:pointer;margin:5px;border-radius:5px}.primary.svelte-vnon4v{background-color:var(--primary100);border-color:var(--primary100);color:var(--white)}.primary.svelte-vnon4v:hover{background-color:var(--primary75);border-color:var(--primary75)}.primary.svelte-vnon4v:active{background-color:var(--primarydark);border-color:var(--primarydark)}.primary-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--primary100);color:var(--primary100)}.primary-outline.svelte-vnon4v:hover{background-color:var(--primary10)}.primary-outline.svelte-vnon4v:pressed{background-color:var(--primary25)}.secondary.svelte-vnon4v{background-color:var(--secondary100);border-color:var(--secondary100);color:var(--white)}.secondary.svelte-vnon4v:hover{background-color:var(--secondary75);border-color:var(--secondary75)}.secondary.svelte-vnon4v:pressed{background-color:var(--secondarydark);border-color:var(--secondarydark)}.secondary-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--secondary100);color:var(--secondary100)}.secondary-outline.svelte-vnon4v:hover{background-color:var(--secondary10)}.secondary-outline.svelte-vnon4v:pressed{background-color:var(--secondary25)}.success.svelte-vnon4v{background-color:var(--success100);border-color:var(--success100);color:var(--white)}.success.svelte-vnon4v:hover{background-color:var(--success75);border-color:var(--success75)}.success.svelte-vnon4v:pressed{background-color:var(--successdark);border-color:var(--successdark)}.success-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--success100);color:var(--success100)}.success-outline.svelte-vnon4v:hover{background-color:var(--success10)}.success-outline.svelte-vnon4v:pressed{background-color:var(--success25)}.deletion.svelte-vnon4v{background-color:var(--deletion100);border-color:var(--deletion100);color:var(--white)}.deletion.svelte-vnon4v:hover{background-color:var(--deletion75);border-color:var(--deletion75)}.deletion.svelte-vnon4v:pressed{background-color:var(--deletiondark);border-color:var(--deletiondark)}.deletion-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--deletion100);color:var(--deletion100)}.deletion-outline.svelte-vnon4v:hover{background-color:var(--deletion10)}.deletion-outline.svelte-vnon4v:pressed{background-color:var(--deletion25)}
|
.border-normal.svelte-vnon4v{border-radius:var(--borderradiusall)}.border-left.svelte-vnon4v{border-radius:var(--borderradius) 0 0 var(--borderradius)}.border-right.svelte-vnon4v{border-radius:0 var(--borderradius) var(--borderradius) 0}.border-middle.svelte-vnon4v{border-radius:0}button.svelte-vnon4v{border-style:solid;padding:7.5px 15px;cursor:pointer;margin:5px;border-radius:5px}.primary.svelte-vnon4v{background-color:var(--primary100);border-color:var(--primary100);color:var(--white)}.primary.svelte-vnon4v:hover{background-color:var(--primary75);border-color:var(--primary75)}.primary.svelte-vnon4v:active{background-color:var(--primarydark);border-color:var(--primarydark)}.primary-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--primary100);color:var(--primary100)}.primary-outline.svelte-vnon4v:hover{background-color:var(--primary10)}.primary-outline.svelte-vnon4v:pressed{background-color:var(--primary25)}.secondary.svelte-vnon4v{background-color:var(--secondary100);border-color:var(--secondary100);color:var(--white)}.secondary.svelte-vnon4v:hover{background-color:var(--secondary75);border-color:var(--secondary75)}.secondary.svelte-vnon4v:pressed{background-color:var(--secondarydark);border-color:var(--secondarydark)}.secondary-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--secondary100);color:var(--secondary100)}.secondary-outline.svelte-vnon4v:hover{background-color:var(--secondary10)}.secondary-outline.svelte-vnon4v:pressed{background-color:var(--secondary25)}.success.svelte-vnon4v{background-color:var(--success100);border-color:var(--success100);color:var(--white)}.success.svelte-vnon4v:hover{background-color:var(--success75);border-color:var(--success75)}.success.svelte-vnon4v:pressed{background-color:var(--successdark);border-color:var(--successdark)}.success-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--success100);color:var(--success100)}.success-outline.svelte-vnon4v:hover{background-color:var(--success10)}.success-outline.svelte-vnon4v:pressed{background-color:var(--success25)}.deletion.svelte-vnon4v{background-color:var(--deletion100);border-color:var(--deletion100);color:var(--white)}.deletion.svelte-vnon4v:hover{background-color:var(--deletion75);border-color:var(--deletion75)}.deletion.svelte-vnon4v:pressed{background-color:var(--deletiondark);border-color:var(--deletiondark)}.deletion-outline.svelte-vnon4v{background-color:var(--white);border-color:var(--deletion100);color:var(--deletion100)}.deletion-outline.svelte-vnon4v:hover{background-color:var(--deletion10)}.deletion-outline.svelte-vnon4v:pressed{background-color:var(--deletion25)}
|
||||||
|
.root.svelte-1p3g2nf{display:grid;grid-template-columns:[uiNav] 250px [preview] auto [properties] 300px;height:100%;width:100%;overflow-y:auto}.ui-nav.svelte-1p3g2nf{grid-column-start:uiNav;background-color:var(--primary10);height:100%}.properties-pane.svelte-1p3g2nf{grid-column-start:properties;background-color:var(--primary10);height:100%;overflow-y:hidden}.pages-list-container.svelte-1p3g2nf{padding-top:20px}.nav-group-header.svelte-1p3g2nf{font-size:10pt;padding-left:10px}.nav-items-container.svelte-1p3g2nf{padding-top:10px}.nav-group-header.svelte-1p3g2nf{display:grid;grid-template-columns:[icon] auto [title] 1fr [button] auto;padding:10px 2px 0px 7px}.nav-group-header.svelte-1p3g2nf>div.svelte-1p3g2nf:nth-child(1){padding:0px 7px 0px 0px;vertical-align:bottom;grid-column-start:icon;margin-right:5px}.nav-group-header.svelte-1p3g2nf>span.svelte-1p3g2nf:nth-child(2){margin-left:5px;vertical-align:bottom;grid-column-start:title;margin-top:auto}.nav-group-header.svelte-1p3g2nf>div.svelte-1p3g2nf:nth-child(3){vertical-align:bottom;grid-column-start:button;cursor:pointer;color:var(--slate)}.nav-group-header.svelte-1p3g2nf>div.svelte-1p3g2nf:nth-child(3):hover{color:var(--primary75)}
|
||||||
h4.svelte-sqtlby{margin-top:20px}
|
h4.svelte-sqtlby{margin-top:20px}
|
||||||
|
.root.svelte-wfv60d{height:100%;position:relative;padding:1.5rem}.actions-header.svelte-wfv60d{flex:0 1 auto}.node-view.svelte-wfv60d{overflow-y:auto;flex:1 1 auto}
|
||||||
|
.root.svelte-nd1yft{height:100%;position:relative;padding:1.5rem}
|
||||||
.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-1ywqvdl{height:100%;background-color:var(--secondary5)}.items-root.svelte-1ywqvdl{display:flex;flex-direction:column;max-height:100%;height:10px}.hierarchy.svelte-1ywqvdl{flex:1 1 auto}.hierarchy-title-row.svelte-1ywqvdl{padding:2rem 1rem 0rem 1rem;font-size:10pt;display:flex;font-weight:bold}.hierarchy-title.svelte-1ywqvdl{flex:auto 1 1}.space-filler.svelte-1ywqvdl{flex:1 1 auto}
|
.root.svelte-1ywqvdl{height:100%;background-color:var(--secondary5)}.items-root.svelte-1ywqvdl{display:flex;flex-direction:column;max-height:100%;height:10px}.hierarchy.svelte-1ywqvdl{flex:1 1 auto}.hierarchy-title-row.svelte-1ywqvdl{padding:2rem 1rem 0rem 1rem;font-size:10pt;display:flex;font-weight:bold}.hierarchy-title.svelte-1ywqvdl{flex:auto 1 1}.space-filler.svelte-1ywqvdl{flex:1 1 auto}
|
||||||
.root.svelte-zzs4qg{padding:10px}
|
|
||||||
.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-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-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}
|
|
||||||
.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}
|
.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}
|
||||||
h1.svelte-16jkjx9{font-size:1.2em}
|
.uk-modal-dialog.svelte-vwwrf9{border-radius:.3rem}
|
||||||
.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}
|
.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-k32wsr{height:100%;border-style:solid;border-color:var(--lightslate);border-width:0px 0px 0px 1px;display:flex;flex-direction:column}.padding.svelte-k32wsr{padding:0px 5px 0px 10px}.title.svelte-k32wsr{background-color:white;padding:3px;display:grid;grid-template-columns:[name] 1fr [actions] auto}.title.svelte-k32wsr>div.svelte-k32wsr:nth-child(1){grid-column-start:name;color:var(--secondary100)}.title.svelte-k32wsr>div.svelte-k32wsr:nth-child(2){grid-column-start:actions}.section-header.svelte-k32wsr{font-style:italic;color:var(--slate);border-style:solid;border-color:var(--lightslate);border-width:0px 0px 1px 0px}.section-header.svelte-k32wsr{vertical-align:middle;margin-top:20px}.component-props-container.svelte-k32wsr{flex:1 1 auto;overflow-y:auto}
|
||||||
|
h1.svelte-16jkjx9{font-size:1.2em}
|
||||||
.root.svelte-1ersoxu{padding:15px}.help-text.svelte-1ersoxu{color:var(--slate);font-size:10pt}
|
.root.svelte-1ersoxu{padding:15px}.help-text.svelte-1ersoxu{color:var(--slate);font-size:10pt}
|
||||||
.section-container.svelte-yk1mmr{padding:15px;border-style:dotted;border-width:1px;border-color:var(--lightslate);border-radius:2px}.section-container.svelte-yk1mmr:nth-child(1){margin-bottom:15px}.row-text.svelte-yk1mmr{margin-right:15px;color:var(--primary100)}input.svelte-yk1mmr{margin-right:15px}p.svelte-yk1mmr>span.svelte-yk1mmr{margin-left:30px}.header.svelte-yk1mmr{display:grid;grid-template-columns:[title] 1fr [icon] auto}.header.svelte-yk1mmr>div.svelte-yk1mmr:nth-child(1){grid-column-start:title}.header.svelte-yk1mmr>div.svelte-yk1mmr:nth-child(2){grid-column-start:icon}
|
.section-container.svelte-yk1mmr{padding:15px;border-style:dotted;border-width:1px;border-color:var(--lightslate);border-radius:2px}.section-container.svelte-yk1mmr:nth-child(1){margin-bottom:15px}.row-text.svelte-yk1mmr{margin-right:15px;color:var(--primary100)}input.svelte-yk1mmr{margin-right:15px}p.svelte-yk1mmr>span.svelte-yk1mmr{margin-left:30px}.header.svelte-yk1mmr{display:grid;grid-template-columns:[title] 1fr [icon] auto}.header.svelte-yk1mmr>div.svelte-yk1mmr:nth-child(1){grid-column-start:title}.header.svelte-yk1mmr>div.svelte-yk1mmr:nth-child(2){grid-column-start:icon}
|
||||||
.root.svelte-16m6n12{height:100%;padding:2rem}.settings-title.svelte-16m6n12{font-weight:600}.title.svelte-16m6n12{margin:3rem 0rem 0rem 0rem;font-weight:600}.recordkey.svelte-16m6n12{font-size:14px;font-weight:600;color:var(--primary100)}.fields-table.svelte-16m6n12{margin:1rem 1rem 0rem 0rem;border-collapse:collapse}.add-field-button.svelte-16m6n12{cursor:pointer}.edit-button.svelte-16m6n12{cursor:pointer;color:var(--white)}.edit-button.svelte-16m6n12:hover{color:var(--secondary75)}th.svelte-16m6n12{text-align:left}td.svelte-16m6n12{padding:1rem 5rem 1rem 0rem;margin:0}thead.svelte-16m6n12>tr.svelte-16m6n12{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--secondary75);margin-bottom:20px}tbody.svelte-16m6n12>tr.svelte-16m6n12{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--primary10)}tbody.svelte-16m6n12>tr.svelte-16m6n12:hover{background-color:var(--primary10)}tbody.svelte-16m6n12>tr:hover .edit-button.svelte-16m6n12{color:var(--secondary75)}.index-container.svelte-16m6n12{border-style:solid;border-width:0 0 1px 0;border-color:var(--secondary25);padding:10px;margin-bottom:5px}.index-label.svelte-16m6n12{color:var(--slate)}.index-name.svelte-16m6n12{font-weight:bold;color:var(--primary100)}.index-container.svelte-16m6n12 code.svelte-16m6n12{margin:0;display:inline;background-color:var(--primary10);color:var(--secondary100);padding:3px}.index-field-row.svelte-16m6n12{margin:1rem 0rem 0rem 0rem}.no-indexes.svelte-16m6n12{margin:1rem 0rem 0rem 0rem;font-family:var(--fontnormal);font-size:14px}
|
.edit-button.svelte-lhfdtn{cursor:pointer;color:var(--secondary25)}tr.svelte-lhfdtn:hover .edit-button.svelte-lhfdtn{color:var(--secondary75)}.title.svelte-lhfdtn{margin:3rem 0rem 0rem 0rem;font-weight:700}.table-content.svelte-lhfdtn{font-weight:500;font-size:.9rem}
|
||||||
|
.root.svelte-x3bf9z{display:flex}.root.svelte-x3bf9z:last-child{border-radius:0 var(--borderradius) var(--borderradius) 0}.root.svelte-x3bf9z:first-child{border-radius:var(--borderradius) 0 0 var(--borderradius)}.root.svelte-x3bf9z:not(:first-child):not(:last-child){border-radius:0}
|
||||||
|
.edit-button.svelte-zm41av{cursor:pointer;color:var(--secondary25)}.title.svelte-zm41av{margin:3rem 0rem 0rem 0rem;font-weight:700}.table-content.svelte-zm41av{font-weight:500;font-size:.9rem}tr.svelte-zm41av:hover .edit-button.svelte-zm41av{color:var(--secondary75)}
|
||||||
.root.svelte-b3063u{display:block;font-size:1rem;width:100%;cursor:pointer}.title.svelte-b3063u{font:var(--fontblack);padding-top:10px;padding-right:5px;padding-bottom:10px;color:var(--secondary100)}.title.svelte-b3063u:hover{background-color:var(--secondary10)}
|
.root.svelte-b3063u{display:block;font-size:1rem;width:100%;cursor:pointer}.title.svelte-b3063u{font:var(--fontblack);padding-top:10px;padding-right:5px;padding-bottom:10px;color:var(--secondary100)}.title.svelte-b3063u:hover{background-color:var(--secondary10)}
|
||||||
.root.svelte-wgyofl{padding:1.5rem;width:100%;align-items:right}
|
.root.svelte-wgyofl{padding:1.5rem;width:100%;align-items:right}
|
||||||
.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-pq2tmv{height:100%;padding:15px}.allowed-records.svelte-pq2tmv{margin:20px 0px}.allowed-records.svelte-pq2tmv>span.svelte-pq2tmv{margin-right:30px}
|
||||||
.dropdown-background.svelte-11ifkop{position:fixed;top:0;left:0;width:100vw;height:100vh}.root.svelte-11ifkop{cursor:pointer;z-index:1}.dropdown-content.svelte-11ifkop{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-11ifkop:not(:focus){display:none}.action-row.svelte-11ifkop{padding:7px 10px;cursor:pointer}.action-row.svelte-11ifkop:hover{background-color:var(--primary100);color:var(--white)}
|
.root.svelte-qdxuha{height:100%;padding:2rem}.settings-title.svelte-qdxuha{font-weight:700}.title.svelte-qdxuha{margin:3rem 0rem 0rem 0rem;font-weight:700}.recordkey.svelte-qdxuha{font-size:14px;font-weight:600;color:var(--primary100)}.fields-table.svelte-qdxuha{margin:1rem 1rem 0rem 0rem;border-collapse:collapse}.add-field-button.svelte-qdxuha{cursor:pointer}.edit-button.svelte-qdxuha{cursor:pointer;color:var(--secondary25)}.edit-button.svelte-qdxuha:hover{cursor:pointer;color:var(--secondary75)}th.svelte-qdxuha{text-align:left}td.svelte-qdxuha{padding:1rem 5rem 1rem 0rem;margin:0}thead.svelte-qdxuha>tr.svelte-qdxuha{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--secondary75);margin-bottom:20px}tbody.svelte-qdxuha>tr.svelte-qdxuha{border-width:0px 0px 1px 0px;border-style:solid;border-color:var(--primary10)}tbody.svelte-qdxuha>tr.svelte-qdxuha:hover{background-color:var(--primary10)}tbody.svelte-qdxuha>tr:hover .edit-button.svelte-qdxuha{color:var(--secondary75)}.index-container.svelte-qdxuha{border-style:solid;border-width:0 0 1px 0;border-color:var(--secondary25);padding:10px;margin-bottom:5px}.index-label.svelte-qdxuha{color:var(--slate)}.index-name.svelte-qdxuha{font-weight:bold;color:var(--primary100)}.index-container.svelte-qdxuha code.svelte-qdxuha{margin:0;display:inline;background-color:var(--primary10);color:var(--secondary100);padding:3px}.index-field-row.svelte-qdxuha{margin:1rem 0rem 0rem 0rem}.no-indexes.svelte-qdxuha{margin:1rem 0rem 0rem 0rem;font-family:var(--fontnormal);font-size:14px}
|
||||||
.root.svelte-3fdbwl{display:block;font-size:10pt;width:100%;cursor:pointer}.title.svelte-3fdbwl{padding-top:.5rem;padding-right:.5rem;color:var(--secondary100)}.title.svelte-3fdbwl:hover{background-color:var(--secondary10)}.active.svelte-3fdbwl{background-color:var(--primary10)}
|
.root.svelte-3fdbwl{display:block;font-size:10pt;width:100%;cursor:pointer}.title.svelte-3fdbwl{padding-top:.5rem;padding-right:.5rem;color:var(--secondary100)}.title.svelte-3fdbwl:hover{background-color:var(--secondary10)}.active.svelte-3fdbwl{background-color:var(--primary10)}
|
||||||
.nav-item.svelte-1ld5h6g{padding:1rem 1rem 0rem 1rem;font-size:10pt;font-weight:bold;cursor:pointer;flex:0 0 auto}.nav-item.svelte-1ld5h6g:hover{background-color:var(--primary10)}.active.svelte-1ld5h6g{background-color:var(--primary10)}
|
.nav-item.svelte-1ld5h6g{padding:1rem 1rem 0rem 1rem;font-size:10pt;font-weight:bold;cursor:pointer;flex:0 0 auto}.nav-item.svelte-1ld5h6g:hover{background-color:var(--primary10)}.active.svelte-1ld5h6g{background-color:var(--primary10)}
|
||||||
.root.svelte-x3bf9z{display:flex}.root.svelte-x3bf9z:last-child{border-radius:0 var(--borderradius) var(--borderradius) 0}.root.svelte-x3bf9z:first-child{border-radius:var(--borderradius) 0 0 var(--borderradius)}.root.svelte-x3bf9z:not(:first-child):not(:last-child){border-radius:0}
|
.dropdown-background.svelte-11ifkop{position:fixed;top:0;left:0;width:100vw;height:100vh}.root.svelte-11ifkop{cursor:pointer;z-index:1}.dropdown-content.svelte-11ifkop{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-11ifkop:not(:focus){display:none}.action-row.svelte-11ifkop{padding:7px 10px;cursor:pointer}.action-row.svelte-11ifkop:hover{background-color:var(--primary100);color:var(--white)}
|
||||||
.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-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-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)}
|
||||||
.info-text.svelte-y0b7l0{font-size:0.8em;color:var(--slate)}
|
.info-text.svelte-y0b7l0{font-size:0.8em;color:var(--slate)}
|
||||||
.title.svelte-dhe1ge{padding:3px;background-color:white;color:var(--secondary100);border-style:solid;border-width:1px 0 0 0;border-color:var(--lightslate)}.title.svelte-dhe1ge>span.svelte-dhe1ge{margin-left:10px}
|
.title.svelte-dhe1ge{padding:3px;background-color:white;color:var(--secondary100);border-style:solid;border-width:1px 0 0 0;border-color:var(--lightslate)}.title.svelte-dhe1ge>span.svelte-dhe1ge{margin-left:10px}
|
||||||
.component.svelte-qxar5p{padding:5px;border-style:solid;border-width:0 0 1px 0;border-color:var(--lightslate);cursor:pointer}.component.svelte-qxar5p:hover{background-color:var(--primary10)}.component.svelte-qxar5p>.title.svelte-qxar5p{font-size:13pt;color:var(--secondary100)}.component.svelte-qxar5p>.description.svelte-qxar5p{font-size:10pt;color:var(--primary75);font-style:italic}
|
.component.svelte-qxar5p{padding:5px;border-style:solid;border-width:0 0 1px 0;border-color:var(--lightslate);cursor:pointer}.component.svelte-qxar5p:hover{background-color:var(--primary10)}.component.svelte-qxar5p>.title.svelte-qxar5p{font-size:13pt;color:var(--secondary100)}.component.svelte-qxar5p>.description.svelte-qxar5p{font-size:10pt;color:var(--primary75);font-style:italic}
|
||||||
|
.root.svelte-16sjty9{padding:2rem;border-radius:2rem}.uk-grid-small.svelte-16sjty9{padding:1rem}.option-container.svelte-16sjty9{border-style:dotted;border-width:1px;border-color:var(--primary75);padding:3px;margin-right:5px}
|
||||||
|
input.svelte-9fre0g{margin-right:7px}
|
||||||
.error-container.svelte-ole1mk{padding:10px;border-style:solid;border-color:var(--deletion100);border-radius:var(--borderradiusall);background:var(--deletion75)}.error-row.svelte-ole1mk{padding:5px 0px}
|
.error-container.svelte-ole1mk{padding:10px;border-style:solid;border-color:var(--deletion100);border-radius:var(--borderradiusall);background:var(--deletion75)}.error-row.svelte-ole1mk{padding:5px 0px}
|
||||||
textarea.svelte-di7k4b{padding:3px;margin-top:5px;margin-bottom:10px;background:var(--lightslate);color:var(--white);font-family:'Courier New', Courier, monospace;width:95%;height:100px;border-radius:5px}
|
textarea.svelte-di7k4b{padding:3px;margin-top:5px;margin-bottom:10px;background:var(--lightslate);color:var(--white);font-family:'Courier New', Courier, monospace;width:95%;height:100px;border-radius:5px}
|
||||||
.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-9fre0g{margin-right:7px}
|
|
||||||
.root.svelte-1el8vet{padding:3px 5px 7px 10px;border-style:dotted;border-width:0 0 1px 0;border-color:var(--primary25)}.prop-label.svelte-1el8vet{font-size:0.9em;color:var(--primary100);font-weight:bold}
|
|
||||||
.root.svelte-ogh8o0{display:grid;grid-template-columns:[name] 1fr [actions] auto}.root.svelte-ogh8o0>div.svelte-ogh8o0:nth-child(1){grid-column-start:name;color:var(--secondary50)}.root.svelte-ogh8o0>div.svelte-ogh8o0:nth-child(2){grid-column-start:actions}.selectedname.svelte-ogh8o0{font-weight:bold;color:var(--secondary)}
|
.root.svelte-ogh8o0{display:grid;grid-template-columns:[name] 1fr [actions] auto}.root.svelte-ogh8o0>div.svelte-ogh8o0:nth-child(1){grid-column-start:name;color:var(--secondary50)}.root.svelte-ogh8o0>div.svelte-ogh8o0:nth-child(2){grid-column-start:actions}.selectedname.svelte-ogh8o0{font-weight:bold;color:var(--secondary)}
|
||||||
|
.root.svelte-1el8vet{padding:3px 5px 7px 10px;border-style:dotted;border-width:0 0 1px 0;border-color:var(--primary25)}.prop-label.svelte-1el8vet{font-size:0.9em;color:var(--primary100);font-weight:bold}
|
||||||
textarea.svelte-1kv2xk7{width:300px;height:200px}
|
textarea.svelte-1kv2xk7{width:300px;height:200px}
|
||||||
|
.unbound-container.svelte-18ig4tf{display:flex}.unbound-container.svelte-18ig4tf>.svelte-18ig4tf:nth-child(1){width:auto;flex:1 0 auto}.bound-header.svelte-18ig4tf{display:flex}.bound-header.svelte-18ig4tf>div.svelte-18ig4tf:nth-child(1){flex:1 0 auto;width:30px;color:var(--darkslate);padding-left:5px;font-style:italic}.binding-prop-label.svelte-18ig4tf{color:var(--darkslate)}
|
||||||
.addelement-container.svelte-199q8jr{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-199q8jr:hover{background-color:var(--primary25)}.item-container.svelte-199q8jr{padding-left:3px;background:var(--secondary10)}
|
.addelement-container.svelte-199q8jr{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-199q8jr:hover{background-color:var(--primary25)}.item-container.svelte-199q8jr{padding-left:3px;background:var(--secondary10)}
|
||||||
.addelement-container.svelte-r1ft9p{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-r1ft9p:hover{background-color:var(--primary25);margin-top:5px}.control-container.svelte-r1ft9p{padding-left:3px;background:var(--secondary10)}.separator.svelte-r1ft9p{width:60%;margin:10px auto;border-style:solid;border-width:1px 0 0 0;border-color:var(--primary25)}
|
.addelement-container.svelte-r1ft9p{cursor:pointer;padding:3px 0px;text-align:center}.addelement-container.svelte-r1ft9p:hover{background-color:var(--primary25);margin-top:5px}.control-container.svelte-r1ft9p{padding-left:3px;background:var(--secondary10)}.separator.svelte-r1ft9p{width:60%;margin:10px auto;border-style:solid;border-width:1px 0 0 0;border-color:var(--primary25)}
|
||||||
.type-selector-container.svelte-1b6pj9u{display:flex}.type-selector.svelte-1b6pj9u{border-color:var(--primary50);border-radius:2px;width:50px;flex:1 0 auto}
|
.type-selector-container.svelte-1b6pj9u{display:flex}.type-selector.svelte-1b6pj9u{border-color:var(--primary50);border-radius:2px;width:50px;flex:1 0 auto}
|
||||||
.unbound-container.svelte-1fe5d1g{display:flex}.unbound-container.svelte-1fe5d1g>input.svelte-1fe5d1g{width:auto}.bound-header.svelte-1fe5d1g{display:flex}.bound-header.svelte-1fe5d1g>div.svelte-1fe5d1g:nth-child(1){flex:1 0 auto;width:30px;color:var(--darkslate);padding-left:5px}.binding-prop-label.svelte-1fe5d1g{color:var(--darkslate)}
|
|
||||||
.unbound-container.svelte-18ig4tf{display:flex}.unbound-container.svelte-18ig4tf>.svelte-18ig4tf:nth-child(1){width:auto;flex:1 0 auto}.bound-header.svelte-18ig4tf{display:flex}.bound-header.svelte-18ig4tf>div.svelte-18ig4tf:nth-child(1){flex:1 0 auto;width:30px;color:var(--darkslate);padding-left:5px;font-style:italic}.binding-prop-label.svelte-18ig4tf{color:var(--darkslate)}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=bundle.css.map */
|
/*# sourceMappingURL=bundle.css.map */
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -20,7 +20,9 @@
|
||||||
|
|
||||||
<script src='{{ appRootPath }}/clientAppDefinition.js'></script>
|
<script src='{{ appRootPath }}/clientAppDefinition.js'></script>
|
||||||
<script src='{{ appRootPath }}/budibase-client.js'></script>
|
<script src='{{ appRootPath }}/budibase-client.js'></script>
|
||||||
|
<script>
|
||||||
|
loadBudibase();
|
||||||
|
</script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,12 @@ import resolve from 'rollup-plugin-node-resolve';
|
||||||
export default {
|
export default {
|
||||||
input: 'src/index.js',
|
input: 'src/index.js',
|
||||||
output: [
|
output: [
|
||||||
{ file: "dist/index.js", 'format': 'esm', name:"budibaseStandardComponents" }
|
{
|
||||||
|
file: "dist/index.js",
|
||||||
|
format: 'esm',
|
||||||
|
name:"budibaseStandardComponents",
|
||||||
|
sourcemap: "inline"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
plugins: [
|
plugins: [
|
||||||
svelte(),
|
svelte(),
|
||||||
|
|
|
@ -9,14 +9,19 @@ export let _app;
|
||||||
let contentComponentContainer;
|
let contentComponentContainer;
|
||||||
|
|
||||||
$:{
|
$:{
|
||||||
if(_app && contentComponentContainer)
|
if(_app && contentComponentContainer && contentComponent._component)
|
||||||
_app.initialiseComponent(contentComponent, contentComponentContainer);
|
_app.initialiseComponent(contentComponent, contentComponentContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const clickHandler = () => {
|
||||||
|
if(onClick) onClick();
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
<button class={className} {disabled} on:click={onClick}>
|
<button class={className} {disabled} on:click={clickHandler}>
|
||||||
{#if contentComponent && contentComponent._component}
|
{#if contentComponent && contentComponent._component}
|
||||||
<div bind:this={contentComponentContainer}>
|
<div bind:this={contentComponentContainer}>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue