budibase/packages/server/builder/bundle.css.map

100 lines
130 KiB
Plaintext
Raw Normal View History

2019-07-15 07:59:46 +02:00
{
"version": 3,
"file": "bundle.css",
"sources": [
"..\\..\\builder\\src\\App.svelte",
2019-09-12 07:10:50 +02:00
"..\\..\\builder\\src\\NoPackage.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\PackageRoot.svelte",
2019-09-20 09:01:35 +02:00
"..\\..\\builder\\src\\common\\IconButton.svelte",
2019-09-09 22:02:23 +02:00
"..\\..\\builder\\src\\BackendRoot.svelte",
"..\\..\\builder\\src\\common\\Button.svelte",
2019-09-23 01:56:39 +02:00
"..\\..\\builder\\src\\userInterface\\UserInterfaceRoot.svelte",
2019-08-30 09:25:00 +02:00
"..\\..\\builder\\src\\common\\ComingSoon.svelte",
2019-09-23 01:56:39 +02:00
"..\\..\\builder\\src\\nav\\BackendNav.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\database\\DatabaseRoot.svelte",
2019-09-23 01:56:39 +02:00
"..\\..\\builder\\src\\actionsAndTriggers\\ActionsAndTriggersRoot.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\accessLevels\\AccessLevelsRoot.svelte",
"..\\..\\builder\\src\\userInterface\\ComponentsHierarchy.svelte",
"..\\..\\builder\\src\\userInterface\\PagesList.svelte",
"..\\..\\builder\\src\\common\\Modal.svelte",
2019-09-12 07:10:50 +02:00
"..\\..\\builder\\src\\userInterface\\EditComponent.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\userInterface\\PageView.svelte",
"..\\..\\builder\\src\\userInterface\\NewComponent.svelte",
2019-09-11 06:18:00 +02:00
"..\\..\\builder\\src\\userInterface\\CurrentItemPreview.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\userInterface\\SettingsView.svelte",
"..\\..\\builder\\src\\nav\\HierarchyRow.svelte",
"..\\..\\builder\\src\\common\\DropdownButton.svelte",
"..\\..\\builder\\src\\nav\\NavItem.svelte",
2019-09-23 01:56:39 +02:00
"..\\..\\builder\\src\\database\\IndexView.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\database\\RecordView.svelte",
2019-09-23 02:01:27 +02:00
"..\\..\\builder\\src\\database\\HierarchyRow.svelte",
"..\\..\\builder\\src\\database\\ActionsHeader.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\actionsAndTriggers\\Actions.svelte",
2019-09-23 02:01:27 +02:00
"..\\..\\builder\\src\\common\\ButtonGroup.svelte",
"..\\..\\builder\\src\\actionsAndTriggers\\Triggers.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\userInterface\\PropsView.svelte",
"..\\..\\builder\\src\\common\\Textbox.svelte",
2019-09-23 02:01:27 +02:00
"..\\..\\builder\\src\\userInterface\\ComponentInstanceEditor.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\userInterface\\ComponentSearch.svelte",
2019-09-22 06:02:33 +02:00
"..\\..\\builder\\src\\common\\CodeArea.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\common\\ErrorsBox.svelte",
"..\\..\\builder\\src\\actionsAndTriggers\\ActionView.svelte",
2019-09-11 06:18:00 +02:00
"..\\..\\builder\\src\\common\\Checkbox.svelte",
2019-09-23 01:56:39 +02:00
"..\\..\\builder\\src\\userInterface\\PropControl.svelte",
2019-09-23 02:01:27 +02:00
"..\\..\\builder\\src\\userInterface\\ComponentPropSelector.svelte",
2019-09-09 06:24:14 +02:00
"..\\..\\builder\\src\\common\\ValuesList.svelte",
2019-09-20 09:01:35 +02:00
"..\\..\\builder\\src\\userInterface\\EventListSelector.svelte",
2019-09-23 02:04:30 +02:00
"..\\..\\builder\\src\\userInterface\\PropArraySelector.svelte",
2019-09-23 02:01:27 +02:00
"..\\..\\builder\\src\\userInterface\\StateBindingControl.svelte",
2019-09-22 06:02:33 +02:00
"..\\..\\builder\\src\\userInterface\\EventSelector.svelte"
2019-07-15 07:59:46 +02:00
],
"sourcesContent": [
2019-09-23 02:01:27 +02:00
"<script>\r\n\t\r\n\timport NoPackage from \"./NoPackage.svelte\";\r\n\timport PackageRoot from \"./PackageRoot.svelte\";\r\n\timport Settings from \"./Settings.svelte\";\r\n\timport {store, initialise} from \"./builderStore\";\r\n\timport { onMount } from 'svelte';\r\n\timport IconButton from \"./common/IconButton.svelte\";\r\n\r\n\tlet init = initialise();\r\n\r\n</script>\r\n\r\n<main>\r\n\r\n\t{#await init}\r\n\t\r\n\t\t<h1>loading</h1>\r\n\r\n\t{:then result}\r\n\t\t{#if $store.showSettings}\r\n\t\t\t<Settings />\r\n\t\t{:else}\r\n\t\t\t{#if $store.hasAppPackage}\r\n\t\t\t<PackageRoot />\r\n\r\n\t\t\t{:else}\r\n\r\n\t\t\t<NoPackage />\r\n\t\t\t{/if}\r\n\t\t{/if}\r\n\r\n\t{:catch err}\r\n\t\t<h1 style=\"color:red\">{err}</h1>\r\n\t{/await}\r\n\r\n\t<div class=\"settings\">\r\n\t\t<IconButton icon=\"settings\"\r\n on:click={store.showSettings}/>\r\n\t</div>\r\n\r\n\t{#if $store.useAnalytics}\r\n\t\t<iframe src=\"https://marblekirby.github.io/bb-analytics.html\" width=\"0\" height=\"0\" style=\"visibility:hidden;display:none\"/>\r\n\t{/if}\r\n</main>\r\n\r\n<style>\r\n\tmain {\r\n\t\theight: 100%;\r\n\t\twidth: 100%;\r\n\t\tfont-family: \"Roboto\", Helvetica, Arial, sans-serif;\r\n\t}\r\n\r\n\t.settings {\r\n\t\tposition: absolute;\r\n\t\tbottom: 25px;\r\n\t\tright: 25px;\r\n\t}\r\n</style>",
"<script>\r\n\r\nimport Button from \"./common/Button.svelte\"\r\nimport { store } from \"./builderStore\";\r\n\r\nlet errors = [];\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"inner\">\r\n <img src=\"/_builder/assets/budibase-logo.png\" class=\"logo\" alt=\"budibase logo\"/>\r\n <div>\r\n \r\n <div>\r\n <h4 style=\"margin-bottom: 20px\">Choose an Application</h4>\r\n {#each $store.apps as app}\r\n <a href={`#/${app}`} class=\"app-link\">{app}</a>\r\n {/each}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n position: fixed;\r\n margin: 0 auto;\r\n text-align: center;\r\n top: 20%;\r\n /*color: #333333;\r\n background-color: #fdfdfd;*/\r\n width:100%;\r\n}\r\n\r\n.inner {\r\n display:inline-block;\r\n margin: auto;\r\n}\r\n\r\n.logo {\r\n width: 300px;\r\n margin-bottom: 40px;\r\n}\r\n\r\n.root :global(.option) {\r\n width:250px;\r\n}\r\n\r\n.app-link {\r\n margin-top: 10px;\r\n display: block;\r\n}\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport IconButton from \"./common/IconButton.svelte\";\r\nimport { store } from \"./builderStore\";\r\nimport UserInterfaceRoot from \"./userInterface/UserInterfaceRoot.svelte\";\r\nimport BackendRoot from \"./BackendRoot.svelte\";\r\nimport { fade } from \"svelte/transition\";\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <div class=\"top-nav\">\r\n <IconButton icon=\"home\" \r\n color=\"var(--slate)\"\r\n hoverColor=\"var(--secondary75)\"/>\r\n <span class:active={$store.isBackend}\r\n class=\"topnavitem\"\r\n on:click={store.showBackend}>\r\n Backend\r\n </span>\r\n <span class:active={!$store.isBackend}\r\n class=\"topnavitem\"\r\n on:click={store.showFrontend}>\r\n Frontend\r\n </span>\r\n </div>\r\n\r\n <div class=\"content\">\r\n {#if $store.isBackend}\r\n <div in:fade out:fade>\r\n <BackendRoot />\r\n </div>\r\n {:else}\r\n <div in:fade out:fade>\r\n <UserInterfaceRoot />\r\n </div>\r\n {/if}\r\n </div>\r\n \r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n height:100%;\r\n width:100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.top-nav {\r\n flex: 0 0 auto;\r\n height:25px;\r\n background: white;\r\n border-style:solid;\r\n border-width: 0px 0px 1px 0px;\r\n border-color: var(--lightslate);\r\n padding: 5px;\r\n width: 100%;\r\n}\r\n\r\n.content {\r\n flex: 1 1 auto;\r\n width: 100%;\r\n height: 100px;\r\n}\r\n\r\n.content > div {\r\n height:100%;\r\n width:100%;\r\n}\r\n\r\n.topnavitem {\r\n cursor: pointer;\r\n color: var(--slate);\r\n padding: 0px 15px;\r\n}\r\n\r\n.topnavitem:hover {\r\n color: var(--secondary75);\r\n}\r\n\r\n.active {\r\n color: var(--secondary100);\r\n}\r\n\r\n\r\n</style>",
2019-09-23 01:56:39 +02:00
"<script>\r\nimport getIcon from \"./icon\";\r\n\r\nexport let size = 18;\r\nexport let icon = \"\";\r\nexport let style = \"\";\r\nexport let color = \"var(--secondary100)\";\r\nexport let hoverColor = \"var(--secondary75)\";\r\nexport let attributes = {};\r\n\r\nlet currentAttributes = [];\r\nconst addAttributes = (node, attributes) => {\r\n\r\n const add = (_attributes) => {\r\n const attrs = [];\r\n for(let attr in _attributes) {\r\n node.setAttribute(attr, _attributes[attr]);\r\n attrs.push(\"uk-toggle\")\r\n }\r\n currentAttributes = attrs;\r\n }\r\n\r\n add(attributes);\r\n\r\n return {\r\n // should implement update method\r\n update(attributes) {\r\n for(let attr of currentAttributes) {\r\n node.removeAttribute(attr)\r\n }\r\n add(attributes);\r\n },\r\n destroy() {}\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<button style=\"{style}{style ? \";\" : \"\"} color:{color}; --hovercolor:{hoverColor}\"\r\n on:click\r\n use:addAttributes={attributes}>\r\n {@html getIcon(icon, size)}\r\n</button>\r\n\r\n\r\n<style>\r\n\r\nbutton {\r\n border-style: none;\r\n background-color: rgba(0,0,0,0);\r\n cursor: pointer;\r\n outline:none;\r\n}\r\n\r\nbutton:hover {\r\n color: var(--hovercolor);\r\n}\r\n\r\nbutton:active {\r\n outline:none;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport BackendNav from \"./nav/BackendNav.svelte\";\r\nimport Database from \"./database/DatabaseRoot.svelte\" ;\r\nimport UserInterface from \"./userInterface/UserInterfaceRoot.svelte\" ;\r\nimport ActionsAndTriggers from \"./actionsAndTriggers/ActionsAndTriggersRoot.svelte\" ;\r\nimport AccessLevels from \"./accessLevels/AccessLevelsRoot.svelte\" ;\r\nimport ComingSoon from \"./common/ComingSoon.svelte\";\r\n\r\nimport {store} from \"./builderStore\";\r\n\r\nexport let navWidth = \"50px\";\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"nav\">\r\n <BackendNav />\r\n </div>\r\n <div class=\"content\" \r\n style=\"width: calc(100% - {navWidth}); left: {navWidth}\"> \r\n {#if $store.activeNav === \"database\"}\r\n <Database />\r\n {:else if $store.activeNav === \"actions\"}\r\n <ActionsAndTriggers />\r\n {:else if $store.activeNav === \"access levels\"}\r\n <AccessLevels />\r\n {/if}\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n display: flex;\r\n}\r\n\r\n\r\n.content {\r\n flex: 1 1 auto;\r\n height: 100%;\r\n background-color: var(--white);\r\n margin:0;\r\n}\r\n\r\n.nav {\r\n flex: 0 1 auto;\r\n width: 300px;\r\n height: 100%;\r\n}\r\n\r\n</style>",
"<script>\r\n\r\nexport let color = \"primary\";\r\nexport let className = \"\";\r\nexport let style = \"\";\r\nexport let groupPosition = \"\";\r\nexport let grouped = false;\r\n\r\n$: borderClass = grouped \r\n ? \"\"\r\n : \"border-normal\";\r\n\r\n</script>\r\n\r\n<button class=\"{color} {className} {borderClass} {grouped ? \"grouped\" : \"\"}\" \r\n style=\"{style}\"\r\n on:click >\r\n <slot/>\r\n</button>\r\n\r\n<style>\r\n\r\n.border-normal { border-radius: var(--borderradiusall); }\r\n.border-left { border-radius: var(--borderradius) 0 0 var(--borderradius); }\r\n.border-right { border-radius: 0 var(--borderradius) var(--borderradius) 0; }\r\n.border-middle { border-radius: 0; }\r\n\r\nbutton { \r\n border-style: solid; \r\n padding: 7.5px 15px;\r\n cursor:pointer;\r\n margin:5px;\r\n border-radius: 5px;\r\n}\r\n\r\n/* ---- PRIMARY ----*/\r\n.primary {\r\n background-color: var(--primary100);\r\n border-color: var(--primary100);\r\n color: var(--white);\r\n}\r\n\r\n.primary:hover {\r\n background-color: var(--primary75);\r\n border-color: var(--primary75);\r\n}\r\n\r\n.primary:active {\r\n background-color: var(--primarydark);\r\n border-color: var(--primarydark);\r\n}\r\n\r\n.primary-outline {\r\n background-color: var(--white);\r\n border-color: var(--primary100);\r\n color: var(--primary100);\r\n}\r\n\r\n.primary-outline:hover {\r\n background-color: var(--primary10);\r\n}\r\n\r\n.primary-outline:pressed {\r\n background-color: var(--primary25);\r\n}\r\n\r\n/* ---- secondary ----*/\r\n\r\n.secondary {\r\n background-color: var(--secondary100);\r\n border-color: var(--secondary100);\r\n color: var(--white);\r\n}\r\n\r\n.secondary:hover {\r\n background-color: var(--secondary75);\r\n border-color: var(--secondary75);\r\n}\r\n\r\n.secondary:pressed {\r\n background-color: var(--secondarydark);\r\n border-color: var(--secondarydark);\r\n}\r\n\r\n.secondary-outline {\r\n background-color: var(--white);\r\n border-color: var(--secondary100);\r\n color: var(--secondary100);\r\n}\r\n\r\n.secondary-outline:hover {\r\n background-color: var(--secondary10);\r\n}\r\n\r\n.secondary-outline:pressed {\r\n background-color: var(--secondary25);\r\n}\r\n\r\n\r\n/* ---- success ----*/\r\n.success {\r\n background-color: var(--success100);\r\n border-color: var(--success100);\r\n color: var(--white);\r\n}\r\n\r\n.success:hover {\r\n background-color: var(--success75);\r\n border-color: var(--success75);\r\n}\r\n\r\n.success:pressed {\r\n background-color: var(--successdark);\r\n border-color: var(--successdark);\r\n}\r\n\r\n.success-outline {\r\n background-color: var(--white);\r\n border-color: var(--success100);\r\n color: var(--success100);\r\n}\r\n\r\n.success-outline:hover {\r\n background-color: var(--success10);\r\n}\r\n\r\n.success-outline:pressed {\r\n background-color: var(--success25);\r\n}\r\n\r\n/* ---- deletion ----*/\r\n.deletion {\r\n background-color: var(--deletion100);\r\n border-color: var(--deletion100);\r\n color: var(--white);\r\n}\r\n\r\n.deletion:hover {\r\n background-color: var(--deletion75);\r\n border-color: var(--deletion75);\r\n}\r\n\r\n.deletion:pressed {\r\n background-color: var(--deletiondark);\r\n border-color: var(--deletiondark);\r\n}\r\n\r\n.deletion-outline {\r\n background-color: var(--white);\r\n border-color: var(--deletion100);\r\n color: var(--deletion100);\r\n}\r\n\r\n.deletion-outline:hover {\r\n background-color: var(--deletion10);\r\n}\r\n\r\n.deletion-outline:pressed {\r\n background-color: var(--deletion25);\r\n}\r\n\r\n\r\n</style>",
"<script>\r\n\r\nimport ComponentsHierarchy from \"./ComponentsHierarchy.svelte\";\r\nimport PagesList from \"./PagesList.svelte\"\r\nimport EditComponent from \"./EditComponent.svelte\";\r\nimport { store } from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\nimport { isComponent } from \"./pagesParsing/searchComponents\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport NewComponent from \"./NewComponent.svelte\";\r\nimport CurrentItemPreview from \"./CurrentItemPreview.svelte\";\r\nimport SettingsView from \"./SettingsView.svelte\";\r\nimport PageView from \"./PageView.svelte\";\r\n\r\nlet newComponentPicker; \r\nconst newComponent = () => {\r\n newComponentPicker.show();\r\n}\r\n\r\nlet settingsView;\r\nconst settings = () => {\r\n settingsView.show();\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n \r\n <div class=\"ui-nav\">\r\n\r\n <div class=\"components-list-container\">\r\n <div class=\"nav-group-header\">\r\n <div>{@html getIcon(\"sidebar\",\"18\")}</div>\r\n <span>COMPONENTS</span>\r\n <div>\r\n <IconButton icon=\"settings\" \r\n size=\"14\"\r\n on:click={settings}/>\r\n <IconButton icon=\"plus\" \r\n on:click={newComponent}/>\r\n </div>\r\n </div>\r\n <div class=\"nav-items-container\">\r\n <ComponentsHierarchy components={$store.derivedComponents}/>\r\n </div>\r\n </div>\r\n\r\n <div class=\"pages-list-container\">\r\n <div class=\"nav-group-header\">\r\n <div>{@html getIcon(\"grid\",\"18\")}</div>\r\n <span>PAGES</span>\r\n </div>\r\n <div class=\"nav-items-container\">\r\n <PagesList />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div>\r\n {#if $store.currentFrontEndItem}\r\n {#if isComponent($store.currentFrontEndItem)}\r\n <CurrentItemPreview />\r\n {:else}\r\n <PageView />\r\n {/if}\r\n {/if} \r\n </div>\r\n\r\n {#if $store.currentFrontEndItem && isComponent($store.currentFrontEndItem)}\r\n <div class=\"properties-pane\">\r\n <EditComponent />\r\n </div>\r\n {/if}\r\n\r\n</div>\r\n\r\n\r\n<NewComponent bind:this={newComponentPicker}/>\r\n<SettingsView bind:this={settingsView} />\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n display: grid;\r\n grid-template-columns: [uiNav] 250px [preview] auto [properties] 300px;\r\n height: 100%;\r\n width: 100%;\r\n overflow-y: auto;\r\n}\r\n\r\n.ui-nav {\r\n grid-column-start: uiNav;\r\n background-color: var(--primary10);\r\n height: 100%;\r\n}\r\n\r\n.properties-pane {\r\n grid-column-start: properties;\r\n background-color: var(--primary10);\r\n height: 100%;\r\n overflow-y: hidden;\r\n}\r\n\r\n.pages-list-container {\r\n padding-top: 20px;\r\n}\r\n\r\n.nav-group-header {\r\n font-size: 10pt;\r\n padding-left: 10px;\r\n}\r\n\r\n.nav-items-container {\r\n padding-top: 10px;\r\n}\r\n\r\n.nav-group-header {\r\n display:grid;\r\n grid-template-columns: [icon] auto [title] 1fr [button] auto;\r\n padding: 10px 2px 0px 7px;\r\n}\r\n\r\n.nav-group-header>div:nth-child(1) {\r\n padding:0px 7px 0px 0px;\r\n vertical-align: bottom;\r\n grid-column-start: icon;\r\n margin-right: 5px;\r\n}\r\n\r\n.nav-group-header>span:nth-child(2) {\r\n margin-left:5px;\r\n vertical-align: bottom;\r\n grid-column-start: title;\r\n margin-top:auto;\r\n}\r\n\r\n.nav-group-header>div:nth-child(3) {\r\n vertical-align: bottom;\r\n grid-column-start: button;\r\n cursor: pointer;\r\n color: var(--slate);\r\n}\r\n\r\n.nav-group-header>div:nth-child(3):hover {\r\n color: var(--primary75); \r\n}\r\n\r\n</style>",
2019-09-23 01:56:39 +02:00
"<script>\r\n\r\nexport let name = \"\";\r\n\r\n</script>\r\n\r\n<div>\r\n <h4>Coming Sometime: {name}</h4>\r\n</div>\r\n\r\n<style>\r\n\r\nh4 {\r\n margin-top: 20px;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport { store } from \"../builderStore\";\r\nimport HierarchyRow from \"./HierarchyRow.svelte\";\r\nimport DropdownButton from \"../common/DropdownButton.svelte\";\r\nimport {hierarchy as hierarchyFunctions} from \"../../../core/src\";\r\nimport NavItem from \"./NavItem.svelte\";\r\n\r\nconst defaultNewChildActions = [\r\n {\r\n label:\"New Root Index\", \r\n onclick: store.newRootIndex\r\n }, \r\n {\r\n label:\"New Root Record\", \r\n onclick: store.newRootRecord\r\n }\r\n];\r\n\r\nlet newChildActions = defaultNewChildActions;\r\n\r\nconst setActiveNav = (name) => () => {\r\n store.setActiveNav(name);\r\n}\r\n\r\n\r\nstore.subscribe(db => {\r\n if(!db.currentNode || hierarchyFunctions.isIndex(db.currentNode)) {\r\n newChildActions = defaultNewChildActions;\r\n } else {\r\n newChildActions = [\r\n {label:\"New Root Record\", \r\n onclick: store.newRootRecord},\r\n {label: `New Child Record of ${db.currentNode.name}`, \r\n onclick: store.newChildRecord},\r\n {label:\"New Root Index\", \r\n onclick: store.newRootIndex},\r\n {label: `New Index on ${db.currentNode.name}`, \r\n onclick: store.newChildIndex}\r\n ];\r\n }\r\n});\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"items-root\">\r\n <div class=\"hierarchy\">\r\n <div class=\"hierarchy-title-row\">\r\n <div class=\"hierarchy-title\">Database</div>\r\n <DropdownButton iconName=\"plus\" actions={newChildActions} />\r\n </div>\r\n\r\n {#each $store.hierarchy.children as record}\r\n <HierarchyRow node={record}\r\n type=\"record\" />\r\n {/each}\r\n\r\n {#each $store.hierarchy.indexes as index}\r\n <HierarchyRow node={index}\r\n type=\"index\" />\r\n {/each}\r\n\r\n </div>\r\n\r\n <NavItem name=\"actions\" label=\"Actions and Triggers\"/>\r\n <NavItem name=\"access levels\" label=\"User Levels\"/>\r\n <div class=\"space-filler\"></div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n background-color: var(--secondary5);\r\n}\r\n\r\n.items-root {\r\n display: flex;\r\n flex-direction: column;\r\n max-height: 100%;\r\n height: 10px;\r\n}\r\n\r\n\r\n.hierarchy {\r\n flex: 1 1 auto;\r\n}\r\n\r\n\r\n.hierarchy-title-row {\r\n padding: 2rem 1rem 0rem 1rem;\r\n font-size: 10pt;\r\n display: flex;\r\n font-weight: bold;\r\n}\r\n\r\n.hierarchy-title {\r\n flex: auto 1 1;\r\n}\r\n\r\n\r\n\r\n.space-filler {\r\n flex: 1 1 auto;\r\n}\r\n\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport HierarchyRow from \"./HierarchyRow.svelte\";\r\nimport RecordView from \"./RecordView.svelte\";\r\nimport IndexView from \"./IndexView.svelte\";\r\nimport ActionsHeader from \"./ActionsHeader.svelte\";\r\nimport {store} from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\nimport DropdownButton from \"../common/DropdownButton.svelte\";\r\nimport {hierarchy as hierarchyFunctions} from \"../../../core/src\";\r\n\r\nconst hierarchyWidth = \"200px\";\r\n\r\nconst defaultNewIndexActions = [{\r\n label:\"New Root Index\", \r\n onclick: store.newRootIndex\r\n}];\r\n\r\nconst defaultNewRecordActions = [{\r\n label:\"New Root Record\", \r\n onclick: store.newRootRecord\r\n}];\r\n\r\nlet newIndexActions = defaultNewIndexActions;\r\nlet newRecordActions = defaultNewRecordActions;\r\n\r\nstore.subscribe(db => {\r\n if(!db.currentNode || hierarchyFunctions.isIndex(db.currentNode)) {\r\n newRecordActions = defaultNewRecordActions;\r\n newIndexActions = defaultNewIndexActions;\r\n } else {\r\n newRecordActions = [\r\n ...defaultNewRecordActions,\r\n {label: `New Child Record of ${db.currentNode.name}`, \r\n onclick: store.newChildRecord}\r\n ];\r\n\r\n newIndexActions = [\r\n ...defaultNewIndexActions,\r\n {label: `New Index on ${db.currentNode.name}`, \r\n onclick: store.newChildIndex}\r\n ];\r\n }\r\n});\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"actions-header\">\r\n {#if $store.currentNode}\r\n <ActionsHeader left={hierarchyWidth}/>\r\n {/if}\r\n </div>\r\n <div class=\"node-view\">\r\n {#if !$store.currentNode}\r\n <h1 style=\"margin-left: 100px\">:)</h1>\r\n {:else if $store.currentNode.type === \"record\"}\r\n <RecordView />\r\n {:else}\r\n <IndexView />\r\n {/if}\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n.root {\r\n height: 100%;\r\n position: relative;\r\n}\r\n\r\n.actions-header {\r\n flex: 0 1 auto;\r\n}\r\n\r\n.node-view {\r\n overflow-y: auto;\r\n flex: 1 1 auto;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport getIcon from \"../common/icon\";\r\nimport {store} from \"../builderStore\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport Actions from \"./Actions.svelte\";\r\nimport Triggers from \"./Triggers.svelte\";\r\nimport {getNewAction, getNewTrigger} from \"../common/core\";\r\n\r\nlet editingAction = null;\r\nlet editingActionIsNew = true;\r\nlet editingTrigger = null;\r\nlet editingTriggerIsNew = true;\r\n\r\nlet getDefaultOptionsHtml = defaultOptions => \r\n pipe(defaultOptions, [\r\n keys,\r\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${JSON.parse(typeOptions[k])}`),\r\n join(\"<br>\")\r\n ]);\r\n\r\nlet onActionEdit = (action) => {\r\n editingAction = action;\r\n editingActionIsNew = false;\r\n}\r\n\r\nlet newAction = () => {\r\n editingAction = getNewAction();\r\n editingActionIsNew = true;\r\n}\r\n\r\nlet onActionDelete = (action) => {\r\n store.deleteAction(action);\r\n}\r\n\r\nlet deleteTrigger = () => {}\r\n\r\nlet editTrigger = (trigger) => {\r\n editingTrigger = trigger;\r\n editingTriggerIsNew = false;\r\n}\r\n\r\nlet newTrigger = () => {\r\n editingTrigger = getNewTrigger();\r\n editingTriggerIsNew = true;\r\n}\r\n\r\nlet onActionSave = action => {\r\n store.saveAction(\r\n action, \r\n editingActionIsNew, \r\n editingAction);\r\n\r\n editingAction = null;\r\n}\r\n\r\nlet onActionCancel = () => {\r\n editingAction = null;\r\n}\r\n\r\nlet onTriggerSave = trigger => {\r\n store.saveTrigger(\r\n trigger, \r\n editingTriggerIsNew, \r\n editingTrigger);\r\n\r\n editingTrigger = null;\r\n}\r\n\r\nlet onTriggerCancel = () => {\r\n editingTrigger = null;\r\n}\r\n\r\nlet onTriggerEdit = (trigger) => {\r\n editingTrigger = trigger;\r\n editingTriggerIsNew = false;\r\n}\r\n\r\n\r\nlet onTriggerDelete = (trigger) => {\r\n store.deleteTrigger(trigger);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"actions-header\">\r\n <ButtonGroup>\r\n <Button color=\"secondary\" \r\n grouped\r\n on:click={newAction}>Create New Action</Button>\r\n <Button color=\"tertiary\" \r\n grouped\r\n on:click={newTrigger}>Create New Trigger</Button>\r\n </ButtonGroup>\r\n </div>\r\n\r\n <div class=\"node-view\">\r\n <Actions {editingActionIsNew} {editingAction} \r\n {onActionEdit} {onActionDelete} {onActionSave}\r\n {onActionCancel} />\r\n\r\n <Triggers {editingTriggerIsNew} {editingTrigger} \r\n {onTriggerEdit} {onTriggerDelete} {onTriggerSave}\r\n {onTriggerCancel} />\r\n </div>\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n position: relative;\r\n padding: 1.5rem;\r\n\r\n}\r\n\r\n.actions-header {\r\n flex: 0 1 auto;\r\n}\r\n\r\n.node-view {\r\n overflow-y: auto;\r\n flex: 1 1 auto;\r\n}\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport {store} from \"../builderStore\";\r\nimport {generateFullPermissions, getNewAccessLevel} from \"../common/core\";\r\nimport getIcon from \"../common/icon\";\r\nimport AccessLevelView from \"./AccessLevelView.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\n\r\nlet editingLevel = null;\r\nlet editingLevelIsNew = false;\r\n$: isEditing = (editingLevel !== null); \r\n\r\nlet allPermissions = [];\r\nstore.subscribe(db => {\r\n allPermissions = generateFullPermissions(db.hierarchy, db.actions);\r\n})\r\n\r\nlet onLevelEdit = (level) => {\r\n editingLevel = level;\r\n editingLevelIsNew = false;\r\n};\r\n\r\nlet onLevelCancel = () => {\r\n editingAction = null;\r\n};\r\n\r\nlet onLevelDelete = (level) => {\r\n store.deleteLevel(level);\r\n};\r\n\r\n\r\nlet createNewLevel = () => {\r\n editingLevelIsNew = true;\r\n editingLevel = getNewAccessLevel();\r\n}\r\n\r\nlet onEditingFinished = (level) => {\r\n if(level) {\r\n store.saveLevel(level, editingLevelIsNew, editingLevel);\r\n }\r\n editingLevel = null;\r\n}\r\n\r\nconst getPermissionsString = perms => {\r\n return `${perms.length} / ${allPermissions.length}`;\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n<ButtonGroup>\r\n <Button grouped color=\"secondary\" on:click={createNewLevel}>Create New Access Level</Button>\r\n</ButtonGroup>\r\n\r\n{#if $store.accessLevels}\r\n<table class=\"fields-table uk-table uk-table-small\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Permissions</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each $store.accessLevels as level}\r\n <tr>\r\n <td >{level.name}</td>\r\n <td >{getPermissionsString(level.permissions)}</td>\r\n <td class=\"edit-button\">\r\n <span on:click={() => onLevelEdit(level)}>{@html getIcon(\"edit\")}</span>\r\n <span on:click={() => onLevelDelete(level)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n</table>\r\n{:else}\r\n(no actions added)\r\n{/if}\r\n\r\n\r\n<Modal bind:isOpen={isEditing}>\r\n {#if isEditing}\r\n <AccessLevelView level={editingLevel}\r\n allPermissions={allPermissions}\r\n onFinished={onEditingFinished}\r\n isNew={editingLevelIsNew}\r\n allLevels={$store.accessLevels}\r\n hierarchy={$store.hierarchy}\r\n actions={$store.actions} />\r\n {/if} \r\n</Modal>\r\n\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n position: relative;\r\n padding: 1.5rem;\r\n\r\n}\r\n\r\n.actions-header {\r\n flex: 0 1 auto;\r\n}\r\n\r\n.node-view {\r\n overflow-y: auto;\r\n flex: 1 1 auto;\r\n}\r\n\r\n\r\n</style>",
"<script>\r\n\r\nimport { \r\n last, \r\n sortBy, \r\n filter, \r\n map,\r\n uniqWith,\r\n isEqual,\r\n trimCharsStart,\r\n trimChars,\r\n join,\r\n includes\r\n} from \"lodash/fp\";\r\n\r\nimport { pipe } from \"../common/core\";\r\nimport getIcon from \"../common/icon\";\r\nimport { store } from \"../builderStore\";\r\n\r\nexport let components = []\r\nexport let thisLevel = \"\";\r\n\r\nlet pathPartsThisLevel;\r\nlet componentsThisLevel;\r\nlet subfolders;\r\n\r\nlet expandedFolders = [];\r\n\r\nconst joinPath = join(\"/\");\r\n\r\nconst normalizedName = name => pipe(name, [\r\n trimCharsStart(\"./\"),\r\n trimCharsStart(\"~/\"),\r\n trimCharsStart(\"../\"),\r\n trimChars(\" \")\r\n ]);\r\n\r\n\r\nconst isOnThisLevel = (c) => \r\n normalizedName(c.name).split(\"/\").length === pathPartsThisLevel\r\n &&\r\n (!thisLevel || normalizedName(c.name).startsWith(normalizedName(thisLevel)));\r\n\r\nconst notOnThisLevel = (c) => !isOnThisLevel(c);\r\n\r\nconst isInSubfolder = (subfolder, c) => \r\n normalizedName(c.name).startsWith(\r\n trimCharsStart(\"/\")(\r\n joinPath([thisLevel, subfolder])));\r\n\r\nconst isOnNextLevel = (c) => \r\n normalizedName(c.name).split(\"/\").length === pathPartsThisLevel + 1\r\n\r\nconst lastPartOfName = (c) => \r\n last(c.name.split(\"/\"))\r\n\r\nconst subFolder = (c) => {\r\n const cname = normalizedName(c.name);\r\n const folderName = cname.substring(thisLevel.length, cname.length).split(\"/\")[0];\r\n\r\n return ({\r\n name: folderName,\r\n isExpanded: includes(folderName)(expandedFolders),\r\n path: thisLevel + \"/\" + folderName\r\n });\r\n}\r\n\r\nconst subComponents = (subfolder) => pipe(components, [\r\n filter(c => isInSubfolder(subfolder, c))\r\n ]);\r\n\r\nconst expandFolder = folder => {\r\n const expandedFolder = {...folder};\r\n if(expandedFolder.isExpanded) {\r\n expandedFolder.isExpanded = false;\r\n expandedFolders = filter(f => f.name !== folder.name)(expandedFolders);\r\n } else {\r\n expandedFolder.isExpanded = true;\r\n expandedFolders.push(folder.name);\r\n }\r\n const newFolders = [...subfolders];\r\n newFolders.splice(\r\n newFolders.indexOf(folder),\r\n 1,\r\n expandedFolder);\r\n subfolders = newFolders;\r\n \r\n}\r\n\r\nconst isComponentSelected = (current,c) =>\r\n current \r\n && current.name === c.name\r\n\r\nconst isFolderSelected = (current, folder) => \r\n isInSubfolder(current, folder)\r\n\r\n\r\n\r\n$: {\r\n pathPartsThisLevel = !thisLevel \r\n ? 1\r\n : normalizedName(thisLevel).split(\"/\").length + 1;\r\n\r\n componentsThisLevel = \r\n pipe(components, [\r\n filter(isOnThisLevel),\r\n map(c => ({component:c, title:lastPartOfName(c)})),\r\n sortBy(\"title\")\r\n ]);\r\n\r\n subfolders = \r\n pipe(components, [\r\n filter(notOnThisLevel),\r\n sortBy(\"name\"),\r\n map(subFolder),\r\n uniqWith((f1,f2) => f1.path === f2.path)\r\n ]);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\" style={`padding-left: calc(10px * ${pathPartsThisLevel})`}>\r\n \r\n {#each subfolders as folder}\r\n <div class=\"hierarchy-item folder\"\r\n on:click|stopPropagation={() => expandFolder(folder)}>\r\n <span>{@html getIcon(folder.isExpanded ? \"chevron-down\" : \"chevron-right\", \"16\")}</span>\r\n <span class=\"title\" class:currentfolder={$store.currentFrontEndItem && isInSubfolder(folder.name, $store.currentFrontEndItem)}>{folder.name}</span>\r\n {#if folder.isExpanded}\r\n <svelte:self components={subComponents(folder.name)} \r\n thisLevel={folder.path} />\r\n {/if}\r\n </div>\r\n {/each}\r\n\r\n {#each componentsThisLevel as component}\r\n <div class=\"hierarchy-item component\" class:selected={isComponentSel
"<script>\r\nimport { store } from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\n\r\nconst getPage = (s, name) => {\r\n const props = s.pages[name];\r\n return ({name, props});\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"hierarchy-item component\" class:selected={$store.currentFrontEndItem && $store.currentPageName === \"main\"}\r\n on:click|stopPropagation={() => store.setCurrentPage(\"main\")}>\r\n <span>{@html getIcon(\"circle\", \"7\")}</span>\r\n <span class=\"title\">Main</span>\r\n </div>\r\n\r\n <div class=\"hierarchy-item component\" class:selected={$store.currentFrontEndItem && $store.currentPageName === \"unauthenticated\"}\r\n on:click|stopPropagation={() => store.setCurrentPage(\"unauthenticated\")}>\r\n <span>{@html getIcon(\"circle\", \"7\")}</span>\r\n <span class=\"title\">Login</span>\r\n </div>\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n padding-bottom: 10px;\r\n padding-left: 10px;\r\n font-size: 16px;\r\n color: var(--secondary50);\r\n}\r\n\r\n.hierarchy-item {\r\n cursor: pointer;\r\n padding: 5px 0px;\r\n}\r\n\r\n.hierarchy-item:hover {\r\n color: var(--secondary75);\r\n}\r\n\r\n.component {\r\n margin-left: 5px;\r\n}\r\n\r\n.selected {\r\n color: var(--primary100);\r\n}\r\n\r\n\r\n.title {\r\n margin-left: 10px;\r\n}\r\n\r\n</style>",
"<script>\r\nimport UIkit from \"uikit\";\r\n\r\nexport let isOpen = false;\r\nexport let onClosed = () => {};\r\nexport let id = \"\";\r\n\r\nlet ukModal;\r\nlet listenerAdded = false;\r\n\r\n$: if(ukModal && !listenerAdded) {\r\n listenerAdded = true;\r\n ukModal.addEventListener(\"hide\", onClosed);\r\n}\r\n\r\n$: {\r\n if(ukModal) {\r\n if(isOpen) {\r\n UIkit.modal(ukModal).show();\r\n } else {\r\n UIkit.modal(ukModal).hide();\r\n }\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<div bind:this={ukModal} uk-modal {id}>\r\n <div class=\"uk-modal-dialog uk-modal-body\" uk-overflow-auto>\r\n <slot />\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.uk-modal-dialog {\r\n border-radius: .3rem;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport PropsView from \"./PropsView.svelte\";\r\nimport { store } from \"../builderStore\";\r\nimport { isRootComponent } from \"./pagesParsing/searchComponents\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport UIkit from \"uikit\";\r\nimport { pipe } from \"../common/core\";\r\nimport {\r\n getComponentInfo\r\n} from \"./pagesParsing/createProps\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport ComponentInstanceEditor from \"./ComponentInstanceEditor.svelte\";\r\n\r\nimport { \r\n cloneDeep, \r\n join,\r\n split,\r\n map,\r\n keys,\r\n isUndefined,\r\n last\r\n} from \"lodash/fp\";\r\nimport { assign } from \"lodash\";\r\n\r\nlet component;\r\nlet name = \"\";\r\nlet description = \"\";\r\nlet tagsString = \"\";\r\nlet nameInvalid = \"\";\r\nlet componentDetailsExpanded = false;\r\nlet componentInfo;\r\nlet modalElement\r\nlet propsValidationErrors = [];\r\nlet editingComponentInstance;\r\nlet editingComponentInstancePropName=\"\";\r\nlet editingComponentArrayIndex;\r\nlet editingComponentArrayPropName;\r\nlet editingComponentInstanceTitle;\r\n\r\nlet allComponents;\r\n\r\n$: shortName = last(name.split(\"/\"));\r\n\r\nstore.subscribe(s => {\r\n component = s.currentFrontEndItem;\r\n if(!component) return;\r\n name = component.name;\r\n description = component.description;\r\n tagsString = join(\", \")(component.tags);\r\n componentInfo = s.currentComponentInfo;\r\n componentDetailsExpanded = s.currentComponentIsNew;\r\n allComponents = s.allComponents;\r\n});\r\n\r\nconst save = () => {\r\n\r\n if(!validate()) return;\r\n\r\n component.name = name;\r\n component.description = description;\r\n component.tags = pipe(tagsString, [\r\n split(\",\"),\r\n map(s => s.trim())\r\n ]);\r\n\r\n store.saveDerivedComponent(component);\r\n}\r\n\r\nconst deleteComponent = () => {\r\n showDialog();\r\n}\r\n\r\nconst confirmDeleteComponent = () => {\r\n store.deleteDerivedComponent(component.name);\r\n hideDialog();\r\n}\r\n\r\nconst onPropsValidate = result => {\r\n propsValidationErrors = result;\r\n}\r\n\r\nconst updateComponent = doChange => {\r\n const newComponent = cloneDeep(component);\r\n doChange(newComponent);\r\n component = newComponent;\r\n componentInfo = getComponentInfo(allComponents, newComponent);\r\n}\r\n\r\nconst onPropsChanged = newProps => {\r\n updateComponent(newComponent => \r\n assign(newComponent.props, newProps));\r\n \r\n}\r\n\r\nconst validate = () => {\r\n const fieldInvalid = (field, err) => \r\n errors[field] = err;\r\n const fieldValid = field => \r\n errors[field] && delete errors[field];\r\n\r\n if(!name) nameInvalid = \"component name i not supplied\";\r\n else nameInvalid = \"\";\r\n\r\n return (!nameInvalid && propsValidationErrors.length === 0);\r\n}\r\n\r\nconst hideDialog = () => {\r\n UIkit.modal(modalElement).hide();\r\n}\r\n\r\nconst showDialog = () => {\r\n UIkit.modal(modalElement).show();\r\n}\r\n\r\nconst onEditComponentProp = (propName, arrayIndex, arrayPropName) => {\r\n\r\n editingComponentInstance = isUndefined(arrayIndex) \r\n ? component.props[propName]\r\n : component.props[propName][arrayIndex][arrayPropName];\r\n editingComponentInstancePropName = propName;\r\n editingComponentInstanceTitle = isUndefined(arrayIndex)\r\n ? propName\r\n : `${propName}[${arrayIndex}].${arrayPropName}`;\r\n \r\n editingComponentArrayIndex = arrayIndex;\r\n editingComponentArrayPropName = arrayPropName;\r\n}\r\n\r\nconst componentInstanceCancelEdit = () => {\r\n editingComponentInstance = null;\r\n editingComponentInstancePropName = \"\";\r\n}\r\n\r\nconst componentInstancePropsChanged = (instance
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport { store } from \"../builderStore\";\r\nimport { isRootComponent } from \"./pagesParsing/searchComponents\";\r\nimport { pipe } from \"../common/core\";\r\nimport {\r\n filter, find, concat\r\n} from \"lodash/fp\";\r\n\r\nlet entryComponent;\r\nlet title = \"\";\r\nlet components = [];\r\n\r\nconst notSeletedComponent = {name:\"(none selected)\"};\r\n\r\nstore.subscribe(s => {\r\n title = s.currentFrontEndItem.index.title;\r\n components = pipe(s.allComponents, [\r\n filter(s => !isRootComponent(s)),\r\n concat([notSeletedComponent])\r\n ]);\r\n entryComponent = find(c => c.name === s.currentFrontEndItem.appBody)(components);\r\n if(!entryComponent) entryComponent = notSeletedComponent;\r\n});\r\n\r\nconst save = () => {\r\n if(!title || !entryComponent || entryComponent === notSeletedComponent) return;\r\n const page = {\r\n index: {\r\n title\r\n },\r\n appBody: entryComponent.name,\r\n }\r\n store.savePage(page);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <h3>{$store.currentPageName}</h3>\r\n\r\n <form class=\"uk-form-horizontal\">\r\n <Textbox bind:text={title} label=\"Title\" hasError={!title}/>\r\n <div class=\"help-text\">The title of your page, displayed in the bowser tab</div>\r\n <Dropdown label=\"App Entry Component\"\r\n options={components}\r\n bind:selected={entryComponent}\r\n textMember={(v) => v.name} />\r\n\r\n <div class=\"help-text\">The component that will be loaded into the body of the page</div>\r\n <div style=\"margin-top: 20px\"></div>\r\n <Button on:click={save}>Save</Button>\r\n </form>\r\n\r\n</div>\r\n\r\n<style>\r\n.root {\r\n padding: 15px;\r\n}\r\n.help-text {\r\n color: var(--slate);\r\n font-size: 10pt;\r\n}\r\n</style>",
"<script>\r\n\r\nimport ComponentSearch from \"./ComponentSearch.svelte\";\r\nimport { store } from \"../builderStore\";\r\nimport PropsView from \"./PropsView.svelte\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport { pipe } from \"../common/core\";\r\nimport UIkit from \"uikit\";\r\nimport {\r\n getNewComponentInfo\r\n} from \"./pagesParsing/createProps\";\r\nimport { isRootComponent } from \"./pagesParsing/searchComponents\";\r\n\r\nimport { \r\n cloneDeep, \r\n join,\r\n split,\r\n map,\r\n keys,\r\n isUndefined\r\n} from \"lodash/fp\";\r\nimport { assign } from \"lodash\";\r\n\r\n\r\n\r\nlet modalElement;\r\nlet allComponents;\r\n\r\nstore.subscribe(s => {\r\n allComponents = s.allComponents;\r\n})\r\n\r\nexport const close = () => {\r\n UIkit.modal(modalElement).hide();\r\n}\r\n\r\nexport const show = () => {\r\n UIkit.modal(modalElement).show();\r\n}\r\n\r\nconst onComponentChosen = (c) => {\r\n store.createDerivedComponent(c.name);\r\n close();\r\n}\r\n\r\n</script>\r\n\r\n<div bind:this={modalElement} id=\"new-component-modal\" uk-modal>\r\n <div class=\"uk-modal-dialog\">\r\n\r\n <div class=\"uk-modal-header\">\r\n <h1>New Component</h1>\r\n </div>\r\n\r\n <div class=\"uk-modal-body\">\r\n <ComponentSearch onComponentChosen={onComponentChosen} />\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\nh1 {\r\n font-size:1.2em;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\nimport { store } from \"../builderStore\";\r\nimport { makeLibraryUrl } from \"../builderStore/loadComponentLibraries\";\r\nimport {\r\n last, split, map, join\r\n} from \"lodash/fp\";\r\nimport { pipe } from \"../common/core\";\r\nimport { splitName } from \"./pagesParsing/splitRootComponentName\"\r\nimport { afterUpdate } from 'svelte';\r\nimport { getRootComponent } from \"./pagesParsing/getRootComponent\";\r\nimport { buildPropsHierarchy } from \"./pagesParsing/buildPropsHierarchy\";\r\n\r\n\r\nlet component;\r\nlet stylesheetLinks = \"\";\r\nlet rootComponentName = \"\";\r\nlet libraries;\r\nlet allComponents;\r\nlet appDefinition = {};\r\n\r\nstore.subscribe(s => {\r\n const {componentName, libName} = splitName(\r\n s.currentComponentInfo.rootComponent.name);\r\n\r\n rootComponentName = componentName;\r\n component = s.libraries[libName][componentName];\r\n stylesheetLinks = pipe(s.pages.stylesheets, [\r\n map(s => `<link rel=\"stylesheet\" href=\"${s}\"/>`),\r\n join(\"\\n\")\r\n ]);\r\n appDefinition = {\r\n componentLibraries: s.loadLibraryUrls(),\r\n props: buildPropsHierarchy(s.allComponents, s.currentFrontEndItem)\r\n };\r\n libraries = s.libraries;\r\n allComponents = s.allComponents;\r\n});\r\n\r\n\r\n\r\n</script>\r\n\r\n<div class=\"component-preview\" >\r\n <div class=\"component-container\">\r\n <iframe style=\"height: 100%; width: 100%\"\r\n title=\"componentPreview\"\r\n srcdoc={\r\n`<html>\r\n \r\n<head>\r\n ${stylesheetLinks}\r\n <script>\r\n window[\"##BUDIBASE_APPDEFINITION##\"] = ${JSON.stringify(appDefinition)};\r\n import('./budibase-client.esm.mjs')\r\n .then(module => {\r\n module.loadBudibase();\r\n }) \r\n </script>\r\n</head>\r\n<body>\r\n</body>\r\n</html>`}>\r\n </iframe>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n.component-preview {\r\n display: grid;\r\n grid-template-rows: [top] 1fr [middle] auto [bottom] 1fr;\r\n grid-template-columns: [left] 1fr [middle] auto [right] 1fr;\r\n grid-column-start: preview;\r\n height:100%;\r\n}\r\n\r\n.component-container {\r\n grid-row-start: middle;\r\n grid-column-start: middle;\r\n}\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport { store } from \"../builderStore\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport { libraryDependencies } from \"./pagesParsing/findDependencies\";\r\nimport UIkit from \"uikit\";\r\n\r\nlet addNewLib = \"\";\r\nlet addNewStylesheet = \"\";\r\nlet addComponentError = \"\";\r\nlet modalElement;\r\nlet allComponents;\r\n\r\nstore.subscribe(s => {\r\n allComponents = s.allComponents;\r\n})\r\n\r\nconst removeLibrary = lib => {\r\n const dependencies = libraryDependencies(allComponents, lib);\r\n if(dependencies.length > 0) return;\r\n store.removeComponentLibrary(lib);\r\n}\r\n\r\nconst addLib = () => {\r\n store.addComponentLibrary(addNewLib)\r\n .then(() => {\r\n addNewLib = \"\";\r\n }); \r\n}\r\n\r\nconst removeStylesheet = stylesheet => {\r\n store.removeStylesheet(stylesheet);\r\n}\r\n\r\nconst addStylesheet = () => {\r\n if(addNewStylesheet)\r\n store.addStylesheet(addNewStylesheet);\r\n}\r\n\r\nexport const close = () => {\r\n UIkit.modal(modalElement).hide();\r\n}\r\n\r\nexport const show = () => {\r\n UIkit.modal(modalElement).show();\r\n}\r\n\r\n</script>\r\n\r\n<div bind:this={modalElement} id=\"new-component-modal\" uk-modal>\r\n <div class=\"uk-modal-dialog\">\r\n\r\n <div class=\"uk-modal-header header\">\r\n <div>Settings</div>\r\n <div>\r\n <IconButton icon=\"x\"\r\n on:click={close}/>\r\n </div>\r\n </div>\r\n\r\n <div class=\"uk-modal-body uk-form-horizontal\">\r\n\r\n <div class=\"section-container\">\r\n <p>Component Libraries\r\n <span>\r\n <input bind:value={addNewLib} /> \r\n <Button color=\"primary-outline\"\r\n on:click={addLib}>Add</Button>\r\n </span>\r\n </p>\r\n {#each $store.pages.componentLibraries as lib}\r\n <div>\r\n <span class=\"row-text\">{lib}</span>\r\n <IconButton icon=\"x\" \r\n on:click={() => removeLibrary(lib)}/>\r\n </div>\r\n {/each}\r\n </div>\r\n \r\n\r\n <div class=\"section-container\">\r\n <p>Stylesheets\r\n <span>\r\n <input bind:value={addNewStylesheet} /> \r\n <Button color=\"primary-outline\"\r\n on:click={addStylesheet} >Add</Button>\r\n </span>\r\n </p>\r\n {#each $store.pages.stylesheets as stylesheet}\r\n <div>\r\n <span class=\"row-text\">{stylesheet}</span>\r\n <IconButton icon=\"x\" \r\n on:click={() => removeStylesheet(stylesheet)}/>\r\n </div>\r\n {/each}\r\n </div>\r\n\r\n \r\n </div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n\r\n.section-container {\r\n padding: 15px;\r\n border-style: dotted;\r\n border-width: 1px;\r\n border-color: var(--lightslate);\r\n border-radius: 2px;\r\n}\r\n\r\n.section-container:nth-child(1) {\r\n margin-bottom: 15px;\r\n}\r\n\r\n.row-text {\r\n margin-right: 15px;\r\n color: var(--primary100);\r\n}\r\n\r\ninput {\r\n margin-right: 15px;\r\n}\r\n\r\np > span {\r\n margin-left: 30px;\r\n}\r\n\r\n.header {\r\n display: grid;\r\n grid-template-columns: [title] 1fr [icon] auto;\r\n}\r\n\r\n.header > div:nth-child(1) {\r\n grid-column-start: title;\r\n}\r\n\r\n.header > div:nth-child(2) {\r\n grid-column-start: icon;\r\n}\r\n\r\n</style>",
"<script>\r\n\r\nimport {store} from \"../builderStore\";\r\nimport {cloneDeep} from \"lodash\";\r\nimport getIcon from \"../common/icon\";\r\nexport let level = 0;\r\nexport let node;\r\nexport let type;\r\n\r\nlet navActive = \"\";\r\n$:icon = type===\"index\" ? \"list\" : \"file\";\r\n\r\nstore.subscribe(s => {\r\n if(s.currentNode)\r\n navActive = (s.activeNav === \"database\" && node.nodeId === s.currentNode.nodeId \r\n ? \"active\" : \"\")\r\n});\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"title {navActive}\" on:click={() => store.selectExistingNode(node.nodeId)} style=\"padding-left: {20 + (level * 20)}px\">\r\n {@html getIcon(icon, 12)} <span style=\"margin-left: 5px\">{node.name}</span>\r\n </div>\r\n {#if node.children}\r\n {#each node.children as child}\r\n <svelte:self node={child} \r\n level={level+1}\r\n type=\"record\"/>\r\n {/each}\r\n {/if}\r\n {#if node.indexes}\r\n {#each node.indexes as index}\r\n <svelte:self node={index} \r\n level={level+1}\r\n type=\"index\"/>\r\n {/each}\r\n {/if}\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root { \r\n display: block;\r\n font-size: 10pt;\r\n width: 100%;\r\n cursor: pointer;\r\n}\r\n\r\n.title {\r\n padding-top: .5rem;\r\n padding-right: .5rem;\r\n color: var(--secondary100);\r\n}\r\n\r\n.title:hover {\r\n background-color: var(--secondary10);\r\n}\r\n\r\n.active {\r\n background-color: var(--primary10);\r\n}\r\n\r\n</style>",
"<script>\r\n\r\nimport getIcon from \"./icon\";\r\nexport let iconName;\r\nexport let actions = []; // [ {label: \"Action Name\", onclick: () => {...} } ]\r\nlet isDroppedDown = false;\r\n\r\n</script>\r\n\r\n\r\n<div class=\"root\" on:click={() => isDroppedDown = !isDroppedDown}>\r\n {@html getIcon(iconName)}\r\n \r\n <div class=\"dropdown-background\" on:click|stopPropagation={() => isDroppedDown = false} style=\"display: {isDroppedDown ? 'block' : 'none'}\"></div>\r\n\r\n <div class=\"dropdown-content\" style=\"display: {isDroppedDown ? 'inline-block' : 'none'}\">\r\n {#each actions as action}\r\n <div class=\"action-row\" on:click={action.onclick}>\r\n {action.label}\r\n </div>\r\n {/each}\r\n </div>\r\n \r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.dropdown-background {\r\n position: fixed;\r\n top:0;\r\n left:0;\r\n width:100vw;\r\n height:100vh;\r\n}\r\n\r\n.root {\r\n cursor: pointer;\r\n z-index: 1;\r\n}\r\n\r\n.dropdown-content {\r\n position: absolute;\r\n background-color: var(--white);\r\n min-width: 160px;\r\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\r\n z-index: 1;\r\n font-weight: normal;\r\n border-style: solid;\r\n border-width: 1px;\r\n border-color: var(--secondary10);\r\n}\r\n\r\n.dropdown-content:not(:focus) {\r\n display: none;\r\n}\r\n\r\n.action-row {\r\n padding: 7px 10px;\r\n cursor:pointer;\r\n}\r\n\r\n.action-row:hover {\r\n background-color: var(--primary100);\r\n color:var(--white);\r\n}\r\n\r\n</style>",
"<script>\r\n\r\nimport {store} from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\n\r\nexport let name = \"\";\r\nexport let label = \"\";\r\n\r\nlet navActive = \"\";\r\n\r\nstore.subscribe(db => {\r\n navActive = (db.activeNav === name ? \"active\" : \"\")\r\n});\r\n\r\nconst setActive = () => \r\n store.setActiveNav(name);\r\n\r\n</script>\r\n\r\n<div class=\"nav-item {navActive}\" on:click={setActive}>\r\n {label}\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.nav-item {\r\n padding: 1rem 1rem 0rem 1rem;\r\n font-size: 10pt;\r\n font-weight: bold;\r\n cursor: pointer;\r\n flex: 0 0 auto;\r\n}\r\n\r\n.nav-item:hover {\r\n background-color: var(--primary10);\r\n}\r\n\r\n.active {\r\n background-color: var(--primary10);\r\n}\r\n\r\n</style>",
2019-09-23 01:56:39 +02:00
"<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport CodeArea from \"../common/CodeArea.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport {store} from \"../builderStore\";\r\nimport {filter, some, map} from \"lodash/fp\";\r\nimport {hierarchy as hierarchyFunctions, common} from \"../../../core/src\";\r\n\r\nconst pipe = common.$;\r\n\r\nlet index;\r\nlet indexableRecords = [];\r\n\r\nstore.subscribe($store => {\r\n index = $store.currentNode;\r\n indexableRecords = pipe($store.hierarchy,[\r\n hierarchyFunctions.getFlattenedHierarchy,\r\n filter(hierarchyFunctions.isDecendant(index.parent())),\r\n filter(hierarchyFunctions.isRecord),\r\n map(n => ({\r\n node:n,\r\n isallowed: some(id => n.nodeId === id)(index.allowedRecordNodeIds)\r\n }))\r\n ]);\r\n});\r\n\r\nconst toggleAllowedRecord = record => {\r\n if(record.isallowed) {\r\n index.allowedRecordNodeIds = filter(id => id !== record.node.nodeId)\r\n (index.allowedRecordNodeIds);\r\n } else {\r\n index.allowedRecordNodeIds.push(record.node.nodeId);\r\n }\r\n};\r\n\r\n</script>\r\n\r\n<form class=\"uk-form-horizontal root\">\r\n <Textbox bind:text={index.name} label=\"Name\"/>\r\n \r\n <div class=\"allowed-records\">\r\n <div>Records to Index</div>\r\n {#each indexableRecords as rec}\r\n <input type=\"checkbox\" checked={rec.isallowed} on:change={() => toggleAllowedRecord(rec)}/>\r\n <span>{rec.node.name}</span>\r\n {/each}\r\n </div>\r\n\r\n\r\n <Dropdown label=\"Index Type\" bind:selected={index.indexType} options={[\"ancestor\", \"reference\"]} />\r\n\r\n <CodeArea bind:text={index.map} label=\"Map (javascript)\"/>\r\n <CodeArea bind:text={index.filter} label=\"Filter (javascript expression)\"/>\r\n <CodeArea bind:text={index.getShardName} label=\"Shard Name (javascript expression)\"/>\r\n\r\n \r\n</form>\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n padding: 15px;\r\n}\r\n\r\n.allowed-records {\r\n margin: 20px 0px;\r\n}\r\n\r\n.allowed-records > span {\r\n margin-right:30px;\r\n}\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport getIcon from \"../common/icon\";\r\nimport FieldView from \"./FieldView.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport {map, join, filter, some, \r\n find, keys, isDate} from \"lodash/fp\";\r\nimport { store } from \"../builderStore\";\r\nimport {common, hierarchy as h} from \"../../../core/src\";\r\nimport {templateApi, pipe, validate} from \"../common/core\";\r\n\r\nlet record;\r\nlet getIndexAllowedRecords;\r\nlet editingField = false;\r\nlet fieldToEdit;\r\nlet isNewField = false;\r\nlet newField;\r\nlet editField;\r\nlet deleteField;\r\nlet onFinishedFieldEdit;\r\nlet editIndex;\r\n\r\nstore.subscribe($store => {\r\n record = $store.currentNode;\r\n const flattened = h.getFlattenedHierarchy($store.hierarchy);\r\n getIndexAllowedRecords = index => \r\n pipe(index.allowedRecordNodeIds, [\r\n filter(id => some(n => n.nodeId === id)(flattened)),\r\n map(id => find(n => n.nodeId === id)\r\n (flattened).name),\r\n join(\", \")\r\n ]);\r\n\r\n newField = () => {\r\n isNewField = true;\r\n fieldToEdit = templateApi($store.hierarchy).getNewField(\"string\");\r\n editingField = true;\r\n }\r\n\r\n onFinishedFieldEdit = (field) => {\r\n if(field) {\r\n store.saveField(field);\r\n }\r\n editingField = false;\r\n }\r\n\r\n editField = (field) => {\r\n isNewField = false;\r\n fieldToEdit = field;\r\n editingField = true;\r\n }\r\n\r\n deleteField = (field) => {\r\n store.deleteField(field);\r\n }\r\n\r\n editIndex = index => {\r\n store.selectExistingNode(index.nodeId);\r\n }\r\n\r\n})\r\n\r\nlet getTypeOptionsValueText = value => {\r\n if(value === Number.MAX_SAFE_INTEGER\r\n || value === Number.MIN_SAFE_INTEGER\r\n || new Date(value).getTime() === new Date(8640000000000000).getTime()\r\n || new Date(value).getTime() === new Date(-8640000000000000).getTime()) return \"(any)\";\r\n \r\n if(value === null) return \"(not set)\";\r\n return value;\r\n}\r\n\r\nlet getTypeOptions = typeOptions => \r\n pipe(typeOptions, [\r\n keys,\r\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${getTypeOptionsValueText(typeOptions[k])}`),\r\n join(\"<br>\")\r\n ]);\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <form class=\"uk-form-horizontal\">\r\n <h3 class=\"settings-title\">\r\n Settings \r\n </h3>\r\n \r\n <Textbox label=\"Name:\" bind:text={record.name} />\r\n {#if !record.isSingle}\r\n <Textbox label=\"Collection Name:\" bind:text={record.collectionName} />\r\n <Textbox label=\"Shard Factor:\" bind:text={record.allidsShardFactor} />\r\n {/if}\r\n <div class=\"recordkey\">{record.nodeKey()}</div>\r\n\r\n </form>\r\n <h3 class=\"title\">\r\n Fields <span class=\"add-field-button\" on:click={newField}>{@html getIcon(\"plus\")}</span>\r\n </h3>\r\n\r\n {#if record.fields.length > 0}\r\n <table class=\"fields-table uk-table\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Type</th>\r\n <th>Options</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each record.fields as field}\r\n <tr>\r\n <td >\r\n <div>{field.label}</div>\r\n <div style=\"font-size: 0.7em; color: var(--slate)\">{field.name}</div>\r\n </td>\r\n <td >{field.type}</td>\r\n <td >{@html getTypeOptions(field.typeOptions)}</td>\r\n <td>\r\n <span class=\"edit-button\" on:click={() => editField(field)}>{@html getIcon(\"edit\")}</span>\r\n <span class=\"edit-button\" on:click={() => deleteFiel
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport {store} from \"../builderStore\";\r\nimport {cloneDeep} from \"lodash\";\r\nexport let level = 0;\r\nexport let node;\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"title\" on:click={() => store.selectExistingNode(node.nodeId)} style=\"padding-left: {20 + (level * 20)}px\">\r\n {node.name}\r\n </div>\r\n {#if node.children}\r\n {#each node.children as child}\r\n <svelte:self node={child} \r\n level={level+1}/>\r\n {/each}\r\n {/if}\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root { \r\n display: block;\r\n font-size: 1rem;\r\n width: 100%;\r\n cursor: pointer;\r\n}\r\n\r\n.title {\r\n font: var(--fontblack);\r\n padding-top: 10px;\r\n padding-right: 5px;\r\n padding-bottom: 10px;\r\n color: var(--secondary100);\r\n}\r\n\r\n.title:hover {\r\n background-color: var(--secondary10);\r\n}\r\n\r\n</style>",
"<script>\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport {store} from \"../builderStore\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\n\r\nexport let left;\r\nlet confirmDelete = false;\r\nconst openConfirmDelete = () => {\r\n confirmDelete = true;\r\n}\r\n\r\nconst deleteCurrentNode = () => {\r\n confirmDelete = false;\r\n store.deleteCurrentNode();\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\" style=\"left: {left}\">\r\n\r\n <ButtonGroup>\r\n <Button color=\"secondary\" grouped on:click={store.saveCurrentNode}>\r\n {#if $store.currentNodeIsNew}\r\n Create\r\n {:else}\r\n Update\r\n {/if}\r\n </Button>\r\n\r\n {#if !$store.currentNodeIsNew}\r\n <Button color=\"tertiary\" grouped on:click={openConfirmDelete}>\r\n Delete\r\n </Button>\r\n {/if}\r\n </ButtonGroup>\r\n\r\n {#if !!$store.errors && $store.errors.length > 0}\r\n <div style=\"width: 500px\">\r\n <ErrorsBox errors={$store.errors}/>\r\n </div>\r\n {/if}\r\n \r\n <Modal bind:isOpen={confirmDelete}>\r\n <div style=\"margin: 10px 0px 20px 0px\">Are you sure you want to delete {$store.currentNode.name} ?</div>\r\n <div style=\"float:right\">\r\n <Button color=\"primary\" on:click={deleteCurrentNode}>Yes</Button>\r\n <Button color=\"secondary\" on:click={() => confirmDelete = false}>No</Button>\r\n </div>\r\n </Modal>\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n padding: 1.5rem;\r\n width: 100%;\r\n align-items: right;\r\n }\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport getIcon from \"../common/icon\";\r\nimport {store} from \"../builderStore\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport ActionView from \"./ActionView.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport {pipe} from \"../common/core\";\r\nimport {keys, map, join} from \"lodash/fp\";\r\n\r\nexport let editingActionIsNew = false;\r\nexport let editingAction = null;\r\nexport let onActionEdit = (action) => {};\r\nexport let onActionDelete = (action) => {};\r\nexport let onActionSave = (action) => {};\r\nexport let onActionCancel = () => {};\r\n\r\n$: isEditing = (editingAction !== null); \r\n\r\nlet actionsArray = [];\r\nstore.subscribe(s => {\r\n actionsArray = pipe(s.actions, [\r\n keys,\r\n map(k => s.actions[k])\r\n ]);\r\n});\r\n\r\nlet getDefaultOptionsHtml = defaultOptions => \r\n pipe(defaultOptions, [\r\n keys,\r\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${JSON.stringify(defaultOptions[k])}`),\r\n join(\"<br>\")\r\n ]);\r\n\r\n\r\nlet actionEditingFinished = (action) => {\r\n \r\n if(action) {\r\n onActionSave(action)\r\n } else {\r\n onActionCancel();\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<h3 class=\"title\">Actions</h3>\r\n\r\n{#if actionsArray}\r\n<table class=\"fields-table uk-table uk-table-small uk-table-striped\">\r\n <thead>\r\n <tr>\r\n <th >Description</th>\r\n <th>Behaviour Source</th>\r\n <th>Behaviour Name</th>\r\n <th>Default Options</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each actionsArray as action}\r\n <tr>\r\n <td class=\"table-content\">{action.name}</td>\r\n <td class=\"table-content\">{action.behaviourSource}</td>\r\n <td class=\"table-content\">{action.behaviourName}</td>\r\n <td class=\"table-content\">{@html getDefaultOptionsHtml(action.initialOptions)}</td>\r\n <td class=\"edit-button\">\r\n <span on:click={() => onActionEdit(action)}>{@html getIcon(\"edit\")}</span>\r\n <span on:click={() => onActionDelete(action)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n</table>\r\n{:else}\r\n(no actions added)\r\n{/if}\r\n\r\n\r\n<Modal bind:isOpen={isEditing}>\r\n {#if isEditing}\r\n <ActionView action={editingAction}\r\n allActions={$store.actions}\r\n onFinished={actionEditingFinished}\r\n isNew={editingActionIsNew}/>\r\n {/if} \r\n</Modal>\r\n\r\n\r\n<style>\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--secondary25);\r\n}\r\n\r\ntr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n.title {\r\n margin: 3rem 0rem 0rem 0rem;\r\n font-weight: 700;\r\n}\r\n\r\n.table-content {\r\n font-weight: 500;\r\n font-size: .9rem;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\nexport let style=\"\";\r\n</script>\r\n\r\n<div class=\"root\" style={style}>\r\n <slot />\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n display: flex;\r\n}\r\n\r\n.root:last-child {\r\n border-radius: 0 var(--borderradius) var(--borderradius) 0;\r\n}\r\n\r\n.root:first-child {\r\n border-radius: var(--borderradius) 0 0 var(--borderradius); \r\n}\r\n\r\n.root:not(:first-child):not(:last-child) {\r\n border-radius: 0;\r\n}\r\n\r\n</style>",
"<script>\r\n\r\nimport {store} from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport TriggerView from \"./TriggerView.svelte\";\r\n\r\n\r\nexport let editingTrigger = null;\r\nexport let editingTriggerIsNew = true;\r\nexport let onTriggerEdit = (trigger) => {};\r\nexport let onTriggerDelete = (trigger) => {};\r\nexport let onTriggerSave = (trigger) => {};\r\nexport let onTriggerCancel = () => {};\r\n\r\n$: isEditing = (editingTrigger !== null); \r\n\r\nlet triggerEditingFinished = (trigger) => {\r\n \r\n if(trigger) {\r\n onTriggerSave(trigger)\r\n } else {\r\n onTriggerCancel();\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<h3 class=\"title\">Triggers</h3>\r\n\r\n{#if $store.triggers}\r\n<table class=\"fields-table uk-table uk-table-small uk-table-striped\">\r\n <thead>\r\n <tr>\r\n <th>Event</th>\r\n <th>Action</th>\r\n <th>Condition</th>\r\n <th>Create Options</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each $store.triggers as trigger}\r\n <tr>\r\n <td class=\"table-content\">{trigger.eventName}</td>\r\n <td class=\"table-content\">{trigger.actionName}</td>\r\n <td class=\"table-content\">{trigger.condition}</td>\r\n <td class=\"table-content\">{trigger.optionsCreator}</td>\r\n <td class=\"edit-button\">\r\n <span on:click={() => onTriggerEdit(trigger)}>{@html getIcon(\"edit\")}</span>\r\n <span on:click={() => onTriggerDelete(trigger)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n</table>\r\n{:else}\r\n(no triggers added)\r\n{/if}\r\n\r\n\r\n<Modal bind:isOpen={isEditing}>\r\n {#if isEditing}\r\n <TriggerView trigger={editingTrigger}\r\n allActions={$store.actions}\r\n allTriggers={$store.triggers}\r\n onFinished={triggerEditingFinished}\r\n isNew={editingTriggerIsNew}/>\r\n {/if} \r\n</Modal>\r\n\r\n<style>\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--secondary25);\r\n}\r\n\r\n.title {\r\n margin: 3rem 0rem 0rem 0rem;\r\n font-weight: 700;\r\n}\r\n\r\n.table-content {\r\n font-weight: 500;\r\n font-size: .9rem;\r\n}\r\n\r\ntr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport {\r\n keys,\r\n map,\r\n some,\r\n includes,\r\n cloneDeep,\r\n isEqual,\r\n sortBy,\r\n filter,\r\n difference\r\n} from \"lodash/fp\";\r\nimport { pipe } from \"../common/core\";\r\nimport { \r\n getComponentInfo ,\r\n getInstanceProps\r\n} from \"./pagesParsing/createProps\";\r\nimport { getExactComponent } from \"./pagesParsing/searchComponents\";\r\nimport Checkbox from \"../common/Checkbox.svelte\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport { validateProps } from \"./pagesParsing/validateProps\";\r\nimport ComponentPropSelector from \"./ComponentPropSelector.svelte\";\r\nimport PropControl from \"./PropControl.svelte\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\n\r\nexport let shouldValidate = true;\r\nexport let onValidate = () => {};\r\nexport let componentInfo;\r\nexport let instanceProps = null;\r\nexport let onPropsChanged = () => {};\r\nexport let onEditComponentProp = () => {};\r\n\r\nlet errors = [];\r\nlet props = {};\r\nlet propsDefinitions = [];\r\nlet inheritedPropsDefinitions = [];\r\nlet inheritedExpanded = false;\r\nlet isInstance = false;\r\n\r\nconst isPropInherited = name => \r\n includes(name)(componentInfo.inheritedProps);\r\n\r\n$: {\r\n if(componentInfo)\r\n {\r\n isInstance = !!instanceProps;\r\n props = isInstance \r\n ? getInstanceProps(componentInfo, instanceProps)\r\n : cloneDeep(componentInfo.fullProps);\r\n\r\n propsDefinitions = pipe(componentInfo.propsDefinition, [\r\n keys,\r\n filter(k => !isPropInherited(k)),\r\n map(k => ({...componentInfo.propsDefinition[k], ____name:k})),\r\n sortBy(\"____name\")\r\n ]);\r\n\r\n inheritedPropsDefinitions = pipe(componentInfo.propsDefinition, [\r\n keys,\r\n filter(k => isPropInherited(k)),\r\n map(k => ({...componentInfo.propsDefinition[k], ____name:k})),\r\n sortBy(\"____name\")\r\n ]);\r\n }\r\n}\r\n\r\n\r\nlet setProp = (name, value) => {\r\n const newProps = cloneDeep(props);\r\n\r\n let finalProps = isInstance ? newProps : cloneDeep(componentInfo.component.props);\r\n\r\n if(!isInstance) {\r\n const nowSet = [];\r\n for(let p of componentInfo.unsetProps) {\r\n if(!isEqual(newProps[p])(componentInfo.rootDefaultProps[p])) {\r\n finalProps[p] = newProps[p];\r\n nowSet.push(p);\r\n }\r\n }\r\n componentInfo.unsetProps = difference(nowSet)(componentInfo.unsetProps);\r\n }\r\n\r\n newProps[name] = value;\r\n finalProps[name] = value;\r\n props = newProps;\r\n if(validate(finalProps))\r\n onPropsChanged(finalProps);\r\n \r\n}\r\n \r\nconst validate = (finalProps) => {\r\n errors = validateProps(componentInfo.propsDefinition, finalProps, [], false);\r\n onValidate(errors);\r\n return errors.length === 0;\r\n}\r\n\r\nconst fieldHasError = (propName) => \r\n some(e => e.propName === propName)(errors);\r\n\r\nconst onEditComponent = (propName) => (arrayIndex, arrayPropName) => {\r\n onEditComponentProp(propName, arrayIndex, arrayPropName);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <form class=\"uk-form-stacked\">\r\n {#each propsDefinitions as propDef, index}\r\n \r\n <PropControl {setProp}\r\n {fieldHasError}\r\n {propDef}\r\n {props}\r\n {index}\r\n onEditComponent={onEditComponent(propDef.____name)}\r\n disabled={false} />\r\n \r\n {/each}\r\n\r\n {#if inheritedPropsDefinitions.length > 0}\r\n <div class=\"inherited-title padding\">\r\n <div>Inherited</div>\r\n <div>\r\n <IconButton icon={inheritedExpanded ? \"chevron-
"<script>\r\nexport let text = \"\";\r\nexport let label = \"\";\r\nexport let width = \"medium\";\r\nexport let size = \"small\";\r\nexport let margin = true;\r\nexport let infoText = \"\";\r\nexport let hasError = false;\r\nexport let disabled = false;\r\n</script>\r\n\r\n<div class:uk-margin={margin}>\r\n <label class=\"uk-form-label\">{label}</label>\r\n <div class=\"uk-form-controls\">\r\n <input class=\"uk-input uk-form-width-{width} uk-form-{size}\"\r\n class:uk-form-danger={hasError}\r\n on:change\r\n bind:value={text} \r\n {disabled}>\r\n </div>\r\n {#if infoText}\r\n <div class=\"info-text\">{infoText}</div>\r\n {/if}\r\n</div>\r\n\r\n<style>\r\n.info-text {\r\n font-size: 0.8em;\r\n color: var(--slate);\r\n}\r\n</style>\r\n\r\n",
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport PropsView from \"./PropsView.svelte\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport { getComponentInfo } from \"./pagesParsing/createProps\";\r\nimport { store } from \"../builderStore\";\r\nimport { \r\n cloneDeep,\r\n isUndefined\r\n} from \"lodash/fp\";\r\nimport { fade, slide } from 'svelte/transition';\r\n\r\nexport let title = \"\";\r\nexport let onGoBack = () => {};\r\nexport let instanceProps = {};\r\nexport let onPropsChanged = () => {};\r\n\r\n\r\nlet editingSubComponentName;\r\nlet editingSubComponentProps;\r\nlet editingSubComponentArrayIndex;\r\nlet editingSubComponentArrayPropName;\r\nlet editingSubComponentTitle;\r\nlet allComponents;\r\n\r\nstore.subscribe(s => {\r\n allComponents = s.allComponents;\r\n})\r\n\r\n$: componentInfo = getComponentInfo(\r\n allComponents, instanceProps._component);\r\n\r\nconst onSubComponentGoBack = () => {\r\n editingSubComponentName = null;\r\n editingSubComponentProps = null;\r\n}\r\n\r\nconst onEditComponentProp = (propName, arrayIndex, arrayPropName) => {\r\n editingSubComponentName = propName;\r\n editingSubComponentTitle = isUndefined(arrayIndex)\r\n ? propName\r\n : `${propName}[${arrayIndex}].${arrayPropName}`;\r\n editingSubComponentProps = isUndefined(arrayIndex)\r\n ? instanceProps[propName]\r\n : instanceProps[propName][arrayIndex][arrayPropName];\r\n editingSubComponentArrayIndex = arrayIndex;\r\n editingSubComponentArrayPropName = arrayPropName;\r\n};\r\n\r\n\r\nconst onSubComponentPropsChanged = (subProps) => {\r\n const newProps = cloneDeep(instanceProps);\r\n if(isUndefined(editingSubComponentArrayIndex)) {\r\n newProps[editingSubComponentName] = subProps;\r\n } else {\r\n newProps[editingSubComponentName]\r\n [editingSubComponentArrayIndex]\r\n [editingSubComponentArrayPropName] = subProps;\r\n }\r\n \r\n instanceProps = newProps;\r\n onPropsChanged(newProps);\r\n}\r\n\r\n\r\nconst propsChanged = newProps => {\r\n instanceProps = newProps;\r\n onPropsChanged(newProps);\r\n}\r\n\r\n</script>\r\n\r\n<div>\r\n\r\n <div class=\"title\">\r\n <IconButton icon=\"chevron-left\"\r\n on:click={onGoBack}/>\r\n <span>{title}</span>\r\n </div>\r\n\r\n {#if editingSubComponentName}\r\n <div in:slide={{delay: 250, duration: 300}}\r\n out:fade>\r\n <svelte:self onPropsChanged={onSubComponentPropsChanged}\r\n onGoBack={onSubComponentGoBack}\r\n instanceProps={editingSubComponentProps}\r\n title={editingSubComponentTitle} />\r\n </div>\r\n {:else}\r\n <PropsView {instanceProps}\r\n {componentInfo}\r\n onPropsChanged={propsChanged}\r\n {onEditComponentProp} />\r\n {/if}\r\n \r\n\r\n \r\n\r\n</div>\r\n\r\n<style>\r\n.title {\r\n padding:3px;\r\n background-color: white;\r\n color: var(--secondary100);\r\n border-style:solid;\r\n border-width: 1px 0 0 0;\r\n border-color: var(--lightslate);\r\n}\r\n\r\n.title > span {\r\n margin-left: 10px;\r\n }\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\n\r\nimport { searchAllComponents } from \"./pagesParsing/searchComponents\";\r\nimport { store } from \"../builderStore\";\r\n\r\nexport let onComponentChosen = () => {};\r\n\r\nlet allComponents = [];\r\nlet phrase = \"\";\r\n\r\nstore.subscribe(s => {\r\n allComponents = s.allComponents;\r\n});\r\n\r\n$: filteredComponents = \r\n !phrase \r\n ? [] \r\n : searchAllComponents(allComponents, phrase);\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <form class=\"uk-search uk-search-large\">\r\n <span uk-search-icon></span>\r\n <input class=\"uk-search-input\" \r\n type=\"search\" \r\n placeholder=\"Based on component...\" \r\n bind:value={phrase}>\r\n </form>\r\n\r\n <div>\r\n {#each filteredComponents as component}\r\n <div class=\"component\" on:click={() => onComponentChosen(component)}>\r\n <div class=\"title\">{component.name}</div>\r\n <div class=\"description\">{component.description}</div>\r\n </div>\r\n {/each}\r\n </div>\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.component {\r\n padding:5px;\r\n border-style: solid;\r\n border-width: 0 0 1px 0;\r\n border-color: var(--lightslate);\r\n cursor: pointer;\r\n}\r\n\r\n.component:hover {\r\n background-color: var(--primary10);\r\n}\r\n\r\n.component > .title {\r\n font-size: 13pt;\r\n color: var(--secondary100);\r\n}\r\n\r\n.component > .description {\r\n font-size: 10pt;\r\n color: var(--primary75);\r\n font-style: italic;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\n// todo: use https://ace.c9.io\r\nexport let text = \"\";\r\nexport let label = \"\";\r\n</script>\r\n\r\n<div>{label}</div>\r\n<textarea class=\"uk-textarea\" bind:value={text}></textarea>\r\n\r\n<style>\r\n\r\ntextarea {\r\n padding:3px;\r\n margin-top:5px;\r\n margin-bottom:10px;\r\n background: var(--lightslate);\r\n color: var(--white);\r\n font-family: 'Courier New', Courier, monospace;\r\n width:95%;\r\n height:100px;\r\n border-radius: 5px;\r\n}\r\n\r\n</style>",
2019-09-23 02:04:30 +02:00
"<script>\r\nexport let errors = [];\r\n\r\n$:hasErrors = errors.length > 0;\r\n</script>\r\n\r\n{#if hasErrors}\r\n<div class=\"error-container\">\r\n {#each errors as error}\r\n <div class=\"error-row\">{error.field ? `${error.field}: ` : \"\"}{error.error}</div>\r\n {/each}\r\n</div>\r\n{/if}\r\n\r\n<style>\r\n\r\n.error-container {\r\n padding:10px;\r\n border-style: solid;\r\n border-color: var(--deletion100);\r\n border-radius: var(--borderradiusall);\r\n background: var(--deletion75);\r\n}\r\n\r\n.error-row {\r\n padding: 5px 0px;\r\n}\r\n\r\n</style>",
"<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport {cloneDeep, filter, keys,\r\nmap, isUndefined} from \"lodash/fp\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\nimport {validateActions, pipe} from \"../common/core\";\r\nimport getIcon from \"../common/icon\";\r\n\r\nexport let action;\r\nexport let onFinished = (action) => {};\r\nexport let allActions;\r\nexport let isNew = true;\r\n\r\nlet optKey = \"\";\r\nlet optValue = \"\";\r\n\r\nlet clonedAction = cloneDeep(action); \r\nlet initialOptions = pipe(action.initialOptions, [\r\n keys,\r\n map(k => ({key:k, value:action.initialOptions[k]}))\r\n]);\r\nlet errors = [];\r\n\r\nconst addNewOption = () => {\r\n\r\n if(optKey && optValue && isUndefined(clonedAction.initialOptions[optKey])) {\r\n clonedAction.initialOptions[optKey] = optValue;\r\n initialOptions = [...initialOptions, {\r\n key:optKey, value: optValue\r\n }];\r\n optKey = \"\";\r\n optValue = \"\";\r\n }\r\n}\r\n\r\nconst removeOption = (opt) => {\r\n if(opt) {\r\n delete clonedAction.initialOptions[opt.key]\r\n initialOptions = pipe(initialOptions, [\r\n filter(o => o.key !== opt.key)\r\n ]);\r\n }\r\n}\r\n\r\nconst save = () => {\r\n\r\n const newActionsList = [\r\n ...pipe(allActions ,[filter(a => a !== action)]),\r\n clonedAction]\r\n\r\n errors = pipe(newActionsList ,[\r\n validateActions,\r\n map(e => e.error)\r\n ]);\r\n\r\n if(errors.length === 0)\r\n onFinished(clonedAction);\r\n}\r\n\r\nconst cancel = () => {\r\n onFinished();\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <ErrorsBox {errors} />\r\n\r\n <form class=\"uk-form-horizontal\">\r\n\r\n <Textbox label=\"Name\" bind:text={clonedAction.name} />\r\n <Textbox label=\"Behaviour Source\" bind:text={clonedAction.behaviourSource} />\r\n <Textbox label=\"Behaviour\" bind:text={clonedAction.behaviourName} />\r\n\r\n </form>\r\n\r\n <div class=\" uk-form-stacked\" style=\"margin-bottom: 20px\">\r\n <label class=\"uk-form-label\">Default Options</label>\r\n <div class=\"uk-grid-small\" uk-grid>\r\n <input class=\"uk-input uk-width-1-4 uk-margin-right\" placeholder=\"key\" bind:value={optKey} > \r\n <input class=\"uk-input uk-width-1-4 uk-margin-right\" placeholder=\"value\" bind:value={optValue} > \r\n <Button color=\"primary-outline uk-width-1-4\" on:click={addNewOption}>Add</Button>\r\n </div>\r\n <div style=\"margin-top: 10px\">\r\n {#each initialOptions as option}\r\n <span class=\"option-container\">{option.key} : {option.value} <span style=\"font-size:10pt; cursor: pointer\" on:click={() => removeOption(option)}>{@html getIcon(\"trash-2\")}</span></span>\r\n {/each}\r\n </div>\r\n </div>\r\n\r\n <ButtonGroup>\r\n <Button color=\"secondary\" grouped on:click={save}>Save</Button>\r\n <Button color=\"tertiary\" grouped on:click={cancel}>Cancel</Button>\r\n </ButtonGroup>\r\n\r\n \r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n padding: 2rem;\r\n border-radius: 2rem;\r\n}\r\n\r\n.uk-grid-small {\r\n padding: 1rem;\r\n}\r\n\r\n.option-container {\r\n border-style: dotted;\r\n border-width: 1px;\r\n border-color: var(--primary75);\r\n padding: 3px;\r\n margin-right: 5px;\r\n}\r\n\r\n</style>",
2019-09-23 01:56:39 +02:00
"<script>\r\n\r\nexport let checked=false;\r\nexport let label=\"\";\r\n\r\n</script>\r\n\r\n<input class=\"uk-checkbox\" type=\"checkbox\" bind:checked on:change />{label}\r\n\r\n<style>\r\n\r\ninput {\r\n margin-right:7px;\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\n\r\nimport Checkbox from \"../common/Checkbox.svelte\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport ComponentPropSelector from \"./ComponentPropSelector.svelte\";\r\nimport PropArraySelector from \"./PropArraySelector.svelte\";\r\nimport EventListSelector from \"./EventListSelector.svelte\";\r\nimport StateBindingControl from \"./StateBindingControl.svelte\";\r\n\r\nexport let errors = [];\r\nexport let setProp = () => {};\r\nexport let fieldHasError =() => {};\r\nexport let propDef = {};\r\nexport let props = {};\r\nexport let disabled;\r\nexport let index;\r\nexport let onEditComponent = () => {};\r\n\r\n$: isOdd = (index % 2 !== 0);\r\n\r\nconst setComponentProp = (props) => {\r\n setProp(propDef.____name, props);\r\n}\r\n\r\n</script>\r\n\r\n\r\n<div class=\"root\" >\r\n\r\n {#if propDef.type === \"component\"}\r\n\r\n <div class=\"prop-label\">{propDef.____name}</div>\r\n <ComponentPropSelector label={propDef.____name}\r\n props={props[propDef.____name]}\r\n {disabled}\r\n onEdit={onEditComponent}\r\n onComponentChosen={onEditComponent}\r\n onValueChanged={setComponentProp}/>\r\n\r\n {:else if propDef.type === \"array\"}\r\n\r\n <div class=\"prop-label\">{propDef.____name}</div>\r\n <PropArraySelector parentProps={props}\r\n {propDef}\r\n onValueChanged={setComponentProp}\r\n onEditComponentProp={onEditComponent} />\r\n\r\n {:else if propDef.type === \"event\"}\r\n\r\n <div class=\"prop-label\">{propDef.____name}</div>\r\n <EventListSelector parentProps={props}\r\n {propDef}\r\n onValueChanged={setComponentProp} />\r\n\r\n {:else}\r\n\r\n <div class=\"prop-label\">{propDef.____name}</div>\r\n <StateBindingControl value={props[propDef.____name]}\r\n type={propDef.type}\r\n options={propDef.options}\r\n onChanged={v => setProp(propDef.____name, v)}/>\r\n\r\n {/if} \r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n padding: 3px 5px 7px 10px;\r\n border-style: dotted;\r\n border-width: 0 0 1px 0;\r\n border-color: var(--primary25);\r\n}\r\n\r\n.prop-label {\r\n font-size: 0.9em;\r\n color: var(--primary100);\r\n font-weight: bold;\r\n}\r\n\r\n</style>",
"<script>\r\nimport {\r\n last\r\n} from \"lodash/fp\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport ComponentSearch from \"./ComponentSearch.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport UIkit from \"uikit\";\r\nimport {\r\n getComponentInfo\r\n} from \"./pagesParsing/createProps\";\r\nimport { store } from \"../builderStore\";\r\n\r\nconst emptyProps = () => ({_component:\"\"})\r\n\r\nexport let props = emptyProps();\r\nexport let onValueChanged = () => {};\r\nexport let onComponentChosen = () => {};\r\nexport let onEdit = () => {};\r\nexport let disabled = false;\r\n\r\nconst CHOOSE_COMPONENT = \"choose_component\";\r\nconst CLEAR_COMPONENT = \"clear_component\";\r\n\r\nlet allComponents;\r\nlet modalElement;\r\nlet modalAction;\r\n\r\nstore.subscribe(s => {\r\n allComponents = s.allComponents;\r\n});\r\n\r\n$: componentSelected = props._component.length > 0;\r\n$: shortName = last(props._component.split(\"/\"));\r\n\r\nconst chooseComponent = () => {\r\n modalAction = CHOOSE_COMPONENT;\r\n showDialog();\r\n}\r\n\r\nconst clearComponent = () => {\r\n modalAction = CLEAR_COMPONENT;\r\n showDialog();\r\n}\r\n\r\nconst componentChosen = (component) => {\r\n const componentInfo = getComponentInfo(allComponents, component.name);\r\n props = componentInfo.fullProps;\r\n onValueChanged(props);\r\n onComponentChosen();\r\n hideDialog();\r\n}\r\n\r\nconst hideDialog = () => {\r\n UIkit.modal(modalElement).hide();\r\n}\r\n\r\nconst showDialog = () => {\r\n UIkit.modal(modalElement).show();\r\n}\r\n\r\nconst confirmClearComponent = () => {\r\n props = emptyProps();\r\n onValueChanged(emptyProps());\r\n hideDialog();\r\n}\r\n\r\n</script>\r\n\r\n\r\n<div class=\"root uk-form-controls\">\r\n <div class:selectedname={componentSelected}>\r\n {componentSelected ? shortName : \"(none)\"}\r\n </div>\r\n <div>\r\n {#if !disabled && componentSelected}\r\n <IconButton icon=\"edit\" \r\n on:click={onEdit}/>\r\n\r\n <IconButton icon=\"trash\" \r\n on:click={clearComponent} />\r\n {:else if !disabled && !componentSelected}\r\n <IconButton icon=\"plus\" \r\n on:click={chooseComponent} />\r\n {/if}\r\n \r\n </div>\r\n</div>\r\n\r\n<div bind:this={modalElement} uk-modal>\r\n <div class=\"uk-modal-dialog\">\r\n\r\n {#if modalAction === CHOOSE_COMPONENT}\r\n <div class=\"uk-modal-body\">\r\n <ComponentSearch onComponentChosen={componentChosen} />\r\n </div>\r\n {:else if modalAction === CLEAR_COMPONENT}\r\n <div class=\"uk-modal-body\">\r\n Clear this component ?\r\n </div>\r\n <div class=\"uk-modal-footer\">\r\n <ButtonGroup>\r\n <Button grouped \r\n on:click={hideDialog} \r\n color=\"secondary\" >Cancel</Button>\r\n <Button grouped \r\n on:click={confirmClearComponent}>OK</Button>\r\n </ButtonGroup>\r\n </div>\r\n {/if}\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n display: grid;\r\n grid-template-columns: [name] 1fr [actions] auto;\r\n}\r\n\r\n.root > div:nth-child(1) {\r\n grid-column-start: name;\r\n color: var(--secondary50);\r\n}\r\n\r\n.root > div:nth-child(2) {\r\n grid-column-start: actions;\r\n}\r\n\r\n.selectedname {\r\n font-weight: bold;\r\n color: var(--secondary);\r\n}\r\n\r\n</style>",
2019-09-23 01:56:39 +02:00
"<script>\r\nimport {join} from \"lodash/fp\";\r\n\r\nexport let values;\r\nexport let label;\r\n\r\nconst inputChanged = ev => {\r\n try {\r\n values = ev.target.value.split(\"\\n\");\r\n } catch(_) {\r\n values = [];\r\n }\r\n}\r\n\r\n$: valuesText = join(\"\\n\")(values);\r\n\r\n\r\n</script>\r\n\r\n\r\n<div class=\"uk-margin\">\r\n <label class=\"uk-form-label\">{label}</label>\r\n <div class=\"uk-form-controls\">\r\n <textarea value={valuesText} on:change={inputChanged} ></textarea>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n\r\ntextarea {\r\n width:300px;\r\n height:200px;\r\n}\r\n\r\n</style>",
2019-09-22 06:02:33 +02:00
"<script>\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport EventSelector from \"./EventSelector.svelte\";\r\nimport {\r\n filter\r\n} from \"lodash/fp\";\r\nimport {EVENT_TYPE_MEMBER_NAME} from \"../common/eventHandlers\";\r\nexport let parentProps;\r\nexport let propDef;\r\nexport let onValueChanged;\r\nexport let onValidate = () => {};\r\n\r\nlet events = [];\r\nlet elementErrors = {};\r\n\r\n$: {\r\n events = parentProps[propDef.____name];\r\n}\r\n\r\nconst addHandler = () => {\r\n const newHandler = {parameters:{}};\r\n newHandler[EVENT_TYPE_MEMBER_NAME] = \"\";\r\n events = [...events, newHandler];\r\n onValueChanged(events);\r\n}\r\n\r\nconst onEventHandlerChanged = (oldEvent) => (newEvent) => {\r\n const indexOfOldEvent = events.indexOf(oldEvent);\r\n const newEvents = [...events];\r\n newEvents.splice(\r\n events.indexOf(oldEvent),\r\n 1,\r\n newEvent);\r\n events = newEvents;\r\n onValueChanged(events);\r\n}\r\n\r\nconst removeHandler = (index) => () => {\r\n events = filter(e => e !== events[index])(events);\r\n onValueChanged(events);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"control-container\">\r\n {#each events as ev, index}\r\n\r\n <div class=\"handler-container\">\r\n <EventSelector onChanged={onEventHandlerChanged(ev)}\r\n onRemoved={removeHandler(index)}\r\n event={ev} />\r\n\r\n </div>\r\n\r\n <div class=\"separator\"></div>\r\n {/each}\r\n\r\n <div class=\"addelement-container\"\r\n on:click={addHandler}>\r\n <IconButton icon=\"plus\" \r\n size=\"12\"/>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.addelement-container {\r\n cursor: pointer;\r\n padding: 3px 0px;\r\n text-align: center;\r\n}\r\n\r\n\r\n\r\n.addelement-container:hover {\r\n background-color: var(--primary25);\r\n margin-top: 5px;\r\n}\r\n\r\n\r\n.control-container {\r\n padding-left: 3px;\r\n background: var(--secondary10);\r\n}\r\n\r\n.separator {\r\n width: 60%;\r\n margin: 10px auto;\r\n border-style:solid;\r\n border-width: 1px 0 0 0;\r\n border-color: var(--primary25);\r\n}\r\n\r\n</style>\r\n",
2019-09-23 02:04:30 +02:00
"<script>\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport {\r\n createArrayElementProps\r\n} from \"./pagesParsing/createProps\";\r\nimport PropControl from \"./PropControl.svelte\";\r\nimport {\r\n some,\r\n cloneDeep,\r\n} from \"lodash/fp\";\r\nimport { validateProps } from \"./pagesParsing/validateProps\";\r\n\r\nexport let parentProps;\r\nexport let propDef;\r\nexport let onValueChanged;\r\nexport let onValidate = () => {};\r\nexport let onEditComponentProp = () => {};\r\n\r\nlet value = [];\r\nlet elementDefinitionArray;\r\nlet elementErrors = {};\r\n\r\n$: {\r\n const elArray = [];\r\n for(let elProp in propDef.elementDefinition) {\r\n if(elProp === \"_component\") continue;\r\n elArray.push({\r\n ...propDef.elementDefinition[elProp],\r\n ____name: elProp\r\n });\r\n }\r\n elementDefinitionArray = elArray;\r\n value = parentProps[propDef.____name];\r\n}\r\n\r\nconst addElement = () => {\r\n const newElement = createArrayElementProps(\r\n propDef.____name, \r\n propDef.elementDefinition).props;\r\n\r\n value = [...value, newElement];\r\n onValueChanged(value);\r\n}\r\n\r\nconst validate = (index, elementProps) => {\r\n elementErrors[index] = validateProps(\r\n propDef.elementDefinition, elementProps, [], true);\r\n onValidate(elementErrors[index]);\r\n return elementErrors[index].length === 0;\r\n}\r\n\r\nconst setProp = (index) => (name, propValue) => {\r\n const newValue = cloneDeep(value);\r\n const newProps = cloneDeep(newValue[index]);\r\n newProps[name] = propValue;\r\n newValue[index] = newProps;\r\n value = newValue;\r\n\r\n if(validate(index, newProps))\r\n onValueChanged(newValue);\r\n \r\n}\r\n\r\nlet fieldHasError = index => propName => \r\n some(e => e.propName === propName)(elementErrors[index]);\r\n\r\nconst onEditComponent = (index, propName) => () => {\r\n onEditComponentProp(index, propName);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n\r\n <div class=\"item-container\">\r\n {#each value as item, index}\r\n \r\n <div class=\"item-inner-container\">\r\n {#each elementDefinitionArray as propDef}\r\n <PropControl setProp={setProp(index)}\r\n fieldHasError={fieldHasError(index)}\r\n {propDef}\r\n props={item}\r\n {index}\r\n onEditComponent={onEditComponent(index, propDef.____name)}\r\n disabled={false} />\r\n {/each}\r\n </div>\r\n \r\n {/each}\r\n\r\n <div class=\"addelement-container\"\r\n on:click={addElement}>\r\n <IconButton icon=\"plus\" \r\n size=\"12\"/>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.addelement-container {\r\n cursor: pointer;\r\n padding: 3px 0px;\r\n text-align: center;\r\n}\r\n\r\n.addelement-container:hover {\r\n background-color: var(--primary25);\r\n}\r\n\r\n\r\n.item-container {\r\n padding-left: 3px;\r\n background: var(--secondary10);\r\n}\r\n\r\n</style>",
2019-09-23 02:01:27 +02:00
"<script>\r\nimport {\r\n isString\r\n} from \"lodash/fp\";\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport {\r\n isBinding, getBinding, setBinding\r\n} from \"../common/binding\";\r\n\r\nexport let value=\"\";\r\nexport let onChanged= () => {};\r\nexport let type=\"\";\r\nexport let options=[];\r\n\r\nlet isBound=false;\r\nlet bindingPath=\"\";\r\nlet bindingFallbackValue=\"\";\r\nlet isExpanded = false;\r\nlet forceIsBound = false;\r\n\r\n$: {\r\n isBound= forceIsBound || isBinding(value);\r\n\r\n if(isBound) {\r\n const binding = getBinding(value);\r\n bindingPath= binding.path;\r\n bindingFallbackValue= binding.fallback;\r\n } else {\r\n bindingPath=\"\";\r\n bindingFallbackValue=\"\";\r\n }\r\n}\r\n\r\nconst clearBinding = () => {\r\n forceIsBound = false;\r\n onChanged(\"\");\r\n}\r\n\r\nconst bind = (path, fallback) => {\r\n if(!path) {\r\n clearBinding(\"\");\r\n return;\r\n }\r\n const binding = setBinding({path, fallback});\r\n onChanged(binding);\r\n}\r\n\r\nconst setBindingPath = ev => {\r\n forceIsBound = false;\r\n bind(ev.target.value, bindingFallbackValue)\r\n}\r\n\r\nconst setBindingFallback = ev => {\r\n bind(bindingPath, ev.target.value);\r\n}\r\n\r\n\r\nconst makeBinding = () => {\r\n forceIsBound=true;\r\n isExpanded=true;\r\n}\r\n\r\n</script>\r\n\r\n{#if isBound}\r\n<div>\r\n <div class=\"bound-header\">\r\n <div>{isExpanded ? \"\" : bindingPath}</div>\r\n <IconButton icon={isExpanded ? \"chevron-up\" : \"chevron-down\"} \r\n size=\"12\"\r\n on:click={() => isExpanded=!isExpanded}/>\r\n <IconButton icon=\"trash\" \r\n size=\"12\"\r\n on:click={clearBinding}/>\r\n </div>\r\n {#if isExpanded}\r\n <div>\r\n <div class=\"binding-prop-label\">Binding Path</div>\r\n <input class=\"uk-input uk-form-small\"\r\n value={bindingPath}\r\n on:change={setBindingPath} >\r\n <div class=\"binding-prop-label\">Fallback Value</div>\r\n <input class=\"uk-input uk-form-small\"\r\n value={bindingFallbackValue}\r\n on:change={setBindingFallback} >\r\n </div>\r\n {/if}\r\n\r\n</div>\r\n{:else}\r\n<div class=\"unbound-container\">\r\n\r\n {#if type === \"bool\"}\r\n\r\n <div>\r\n <IconButton icon={value == true ? \"check-square\" : \"square\"}\r\n size=\"19\"\r\n on:click={() => value = !value}/>\r\n </div>\r\n\r\n {:else if type === \"options\"}\r\n\r\n <select class=\"uk-select uk-form-small\" \r\n value={value} \r\n on:change={ev => onChanged(ev.target.checked)}>\r\n {#each options as option}\r\n <option value={option}>{option}</option>\r\n {/each}\r\n </select>\r\n\r\n {:else}\r\n\r\n <input class=\"uk-input uk-form-small\"\r\n on:change={ev => onChanged(ev.target.value)}\r\n bind:value={value}\r\n style=\"flex: 1 0 auto;\" > \r\n\r\n\r\n {/if}\r\n <IconButton icon=\"link\" \r\n size=\"12\"\r\n on:click={makeBinding} />\r\n</div>\r\n{/if}\r\n\r\n\r\n<style>\r\n\r\n.unbound-container {\r\n display:flex;\r\n}\r\n\r\n.unbound-container > *:nth-child(1) {\r\n width:auto;\r\n flex: 1 0 auto;\r\n}\r\n\r\n.bound-header {\r\n display: flex;\r\n}\r\n\r\n.bound-header > div:nth-child(1) {\r\n flex: 1 0 auto;\r\n width: 30px;\r\n color: var(--darkslate);\r\n padding-left: 5px;\r\n font-style: italic;\r\n}\r\n\r\n.binding-prop-label {\r\n color: var(--darkslate);\r\n}\r\n\r\n\r\n</style>",
2019-09-22 06:02:33 +02:00
"<script>\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport StateBindingControl from \"./StateBindingControl.svelte\";\r\nimport {\r\n find, map, keys, reduce\r\n} from \"lodash/fp\";\r\nimport { pipe } from \"../common/core\";\r\nimport { EVENT_TYPE_MEMBER_NAME } from \"../common/eventHandlers\";\r\n\r\nexport let event;\r\nexport let onChanged;\r\nexport let onRemoved;\r\n\r\nconst events = [\r\n {name:\"\", parameters: []},\r\n {name:\"Set State\", parameters: [\"path\", \"value\"]},\r\n {name:\"Load Record\", parameters: [\"recordKey\", \"statePath\"]},\r\n];\r\n\r\nlet eventType;\r\nlet parameters = [];\r\n\r\n$: {\r\n if(event) {\r\n eventType = event[EVENT_TYPE_MEMBER_NAME];\r\n parameters = pipe(event.parameters, [\r\n keys,\r\n map(k => ({name:k, value:event.parameters[k]}))\r\n ]);\r\n } else {\r\n eventType = \"\";\r\n parameters = [];\r\n }\r\n}\r\n\r\nconst eventChanged = (type, parameters) => {\r\n const paramsAsObject = reduce(\r\n (obj, p) => {\r\n obj[p.name] = p.value;\r\n return obj;\r\n }\r\n , {}\r\n )(parameters)\r\n\r\n const ev = {};\r\n ev[EVENT_TYPE_MEMBER_NAME]=type;\r\n ev.parameters = paramsAsObject;\r\n\r\n onChanged(ev);\r\n}\r\n\r\nconst eventTypeChanged = (ev) => {\r\n const eType = find(e => e.name === ev.target.value)(events);\r\n const emptyParameters = map(p => ({name:p, value:\"\"}))(eType.parameters);\r\n eventChanged(eType.name, emptyParameters);\r\n}\r\n\r\nconst onParameterChanged = index => val => {\r\n const newparameters = [...parameters];\r\n newparameters[index].value = val;\r\n eventChanged(eventType, newparameters);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"type-selector-container\">\r\n <select class=\"type-selector uk-select uk-form-small \" value={eventType} on:change={eventTypeChanged}>\r\n {#each events as ev}\r\n <option value={ev.name}>{ev.name}</option>\r\n {/each}\r\n </select>\r\n\r\n <IconButton icon=\"trash\" \r\n size=\"12\" \r\n on:click={onRemoved}/>\r\n\r\n</div>\r\n\r\n{#if parameters}\r\n{#each parameters as p, index}\r\n\r\n<div>\r\n {p.name} \r\n</div>\r\n<StateBindingControl onChanged={onParameterChanged(index)}\r\n value={p.value} />\r\n\r\n{/each}\r\n{/if}\r\n\r\n<style>\r\n\r\n.type-selector-container {\r\n display: flex;\r\n}\r\n\r\n.type-selector {\r\n border-color: var(--primary50);\r\n border-radius: 2px;\r\n width: 50px;\r\n flex: 1 0 auto;\r\n}\r\n\r\n</style>"
2019-07-15 07:59:46 +02:00
],
"names": [],
2019-09-23 02:04:30 +02:00
"mappings": "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
2019-07-15 07:59:46 +02:00
}