98 lines
121 KiB
Plaintext
98 lines
121 KiB
Plaintext
{
|
|
"version": 3,
|
|
"file": "bundle.css",
|
|
"sources": [
|
|
"..\\..\\builder\\src\\App.svelte",
|
|
"..\\..\\builder\\src\\NoPackage.svelte",
|
|
"..\\..\\builder\\src\\PackageRoot.svelte",
|
|
"..\\..\\builder\\src\\common\\IconButton.svelte",
|
|
"..\\..\\builder\\src\\common\\Button.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\UserInterfaceRoot.svelte",
|
|
"..\\..\\builder\\src\\BackendRoot.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\PagesList.svelte",
|
|
"..\\..\\builder\\src\\common\\Modal.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\ComponentsHierarchy.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\EditComponentProps.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\SettingsView.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\ComponentsList.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\NewComponent.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\CurrentItemPreview.svelte",
|
|
"..\\..\\builder\\src\\common\\ComingSoon.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\PageView.svelte",
|
|
"..\\..\\builder\\src\\nav\\BackendNav.svelte",
|
|
"..\\..\\builder\\src\\actionsAndTriggers\\ActionsAndTriggersRoot.svelte",
|
|
"..\\..\\builder\\src\\accessLevels\\AccessLevelsRoot.svelte",
|
|
"..\\..\\builder\\src\\database\\DatabaseRoot.svelte",
|
|
"..\\..\\builder\\src\\common\\ButtonGroup.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\ComponentSelector.svelte",
|
|
"..\\..\\builder\\src\\common\\Textbox.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\PropsView.svelte",
|
|
"..\\..\\builder\\src\\nav\\NavItem.svelte",
|
|
"..\\..\\builder\\src\\common\\DropdownButton.svelte",
|
|
"..\\..\\builder\\src\\nav\\HierarchyRow.svelte",
|
|
"..\\..\\builder\\src\\database\\HierarchyRow.svelte",
|
|
"..\\..\\builder\\src\\actionsAndTriggers\\Triggers.svelte",
|
|
"..\\..\\builder\\src\\actionsAndTriggers\\Actions.svelte",
|
|
"..\\..\\builder\\src\\database\\ActionsHeader.svelte",
|
|
"..\\..\\builder\\src\\database\\IndexView.svelte",
|
|
"..\\..\\builder\\src\\database\\RecordView.svelte",
|
|
"..\\..\\builder\\src\\common\\Checkbox.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\PropControl.svelte",
|
|
"..\\..\\builder\\src\\common\\ErrorsBox.svelte",
|
|
"..\\..\\builder\\src\\actionsAndTriggers\\ActionView.svelte",
|
|
"..\\..\\builder\\src\\common\\CodeArea.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\EventListSelector.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\StateBindingControl.svelte",
|
|
"..\\..\\builder\\src\\common\\ValuesList.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\EventSelector.svelte",
|
|
"..\\..\\builder\\src\\userInterface\\ComponentsPaneSwitcher.svelte"
|
|
],
|
|
"sourcesContent": [
|
|
"<script>\n\t\n\timport NoPackage from \"./NoPackage.svelte\";\n\timport PackageRoot from \"./PackageRoot.svelte\";\n\timport Settings from \"./Settings.svelte\";\n\timport {store, initialise} from \"./builderStore\";\n\timport { onMount } from 'svelte';\n\timport IconButton from \"./common/IconButton.svelte\";\n\n\tlet init = initialise();\n\n</script>\n\n<main>\n\n\t{#await init}\n\t\n\t\t<h1>loading</h1>\n\n\t{:then result}\n\n\t\t{#if $store.hasAppPackage}\n\t\t<PackageRoot />\n\n\t\t{:else}\n\n\t\t<NoPackage />\n\t\t{/if}\n\n\n\t{:catch err}\n\t\t<h1 style=\"color:red\">{err}</h1>\n\t{/await}\n\n<!--\n\t<div class=\"settings\">\n\t\t<IconButton icon=\"settings\"\n on:click={store.showSettings}/>\n\t</div>\n\n\n\t{#if $store.useAnalytics}\n\t\t<iframe src=\"https://marblekirby.github.io/bb-analytics.html\" width=\"0\" height=\"0\" style=\"visibility:hidden;display:none\"/>\n\t{/if}\n-->\n</main>\n\n<style>\n\tmain {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tfont-family: \"Roboto\", Helvetica, Arial, sans-serif;\n\t}\n\n\t.settings {\n\t\tposition: absolute;\n\t\tbottom: 25px;\n\t\tright: 25px;\n\t}\n</style>",
|
|
"<script>\n\nimport Button from \"./common/Button.svelte\"\nimport { store } from \"./builderStore\";\n\nlet errors = [];\n\n</script>\n\n<div class=\"root\">\n <div class=\"inner\">\n <img src=\"/_builder/assets/budibase-logo.png\" class=\"logo\" alt=\"budibase logo\"/>\n <div>\n \n <div>\n <h4 style=\"margin-bottom: 20px\">Choose an Application</h4>\n {#each $store.apps as app}\n <a href={`#/${app}`} class=\"app-link\">{app}</a>\n {/each}\n </div>\n </div>\n </div>\n</div>\n\n<style>\n\n.root {\n position: fixed;\n margin: 0 auto;\n text-align: center;\n top: 20%;\n /*color: #333333;\n background-color: #fdfdfd;*/\n width:100%;\n}\n\n.inner {\n display:inline-block;\n margin: auto;\n}\n\n.logo {\n width: 300px;\n margin-bottom: 40px;\n}\n\n.root :global(.option) {\n width:250px;\n}\n\n.app-link {\n margin-top: 10px;\n display: block;\n}\n\n</style>",
|
|
"<script>\n\nimport IconButton from \"./common/IconButton.svelte\";\nimport { store } from \"./builderStore\";\nimport UserInterfaceRoot from \"./userInterface/UserInterfaceRoot.svelte\";\nimport BackendRoot from \"./BackendRoot.svelte\";\nimport { fade } from \"svelte/transition\";\n\n</script>\n\n<div class=\"root\">\n\n <div class=\"top-nav\">\n <IconButton icon=\"home\" \n color=\"var(--slate)\"\n hoverColor=\"var(--secondary75)\"/>\n <span class:active={$store.isBackend}\n class=\"topnavitem\"\n on:click={store.showBackend}>\n Backend\n </span>\n <span class:active={!$store.isBackend}\n class=\"topnavitem\"\n on:click={store.showFrontend}>\n Frontend\n </span>\n </div>\n\n <div class=\"content\">\n {#if $store.isBackend}\n <div in:fade out:fade>\n <BackendRoot />\n </div>\n {:else}\n <div in:fade out:fade>\n <UserInterfaceRoot />\n </div>\n {/if}\n </div>\n \n</div>\n\n<style>\n\n.root {\n height:100%;\n width:100%;\n display: flex;\n flex-direction: column;\n}\n\n.top-nav {\n flex: 0 0 auto;\n height: 25px;\n background: white;\n padding: 5px;\n width: 100%;\n}\n\n.content {\n flex: 1 1 auto;\n width: 100%;\n height: 100px;\n}\n\n.content > div {\n height:100%;\n width:100%;\n}\n\n.topnavitem {\n cursor: pointer;\n color: var(--secondary50);\n padding: 0px 15px;\n font-weight: 600;\n font-size: .9rem;\n}\n\n.topnavitem:hover {\n color: var(--secondary75);\n font-weight: 600;\n\n}\n\n.active {\n color: var(--primary100);\n font-weight: 900;\n}\n\n\n</style>",
|
|
"<script>\nimport getIcon from \"./icon\";\n\nexport let size = 18;\nexport let icon = \"\";\nexport let style = \"\";\nexport let color = \"var(--secondary100)\";\nexport let hoverColor = \"var(--secondary75)\";\nexport let attributes = {};\n\nlet currentAttributes = [];\nconst addAttributes = (node, attributes) => {\n\n const add = (_attributes) => {\n const attrs = [];\n for(let attr in _attributes) {\n node.setAttribute(attr, _attributes[attr]);\n attrs.push(\"uk-toggle\")\n }\n currentAttributes = attrs;\n }\n\n add(attributes);\n\n return {\n // should implement update method\n update(attributes) {\n for(let attr of currentAttributes) {\n node.removeAttribute(attr)\n }\n add(attributes);\n },\n destroy() {}\n }\n}\n\n</script>\n\n<button style=\"{style}{style ? \";\" : \"\"} color:{color}; --hovercolor:{hoverColor}\"\n on:click\n use:addAttributes={attributes}>\n {@html getIcon(icon, size)}\n</button>\n\n\n<style>\n\nbutton {\n border-style: none;\n background-color: rgba(0,0,0,0);\n cursor: pointer;\n outline:none;\n}\n\nbutton:hover {\n color: var(--hovercolor);\n}\n\nbutton:active {\n outline:none;\n}\n\n</style>",
|
|
"<script>\n\nexport let color = \"primary\";\nexport let className = \"\";\nexport let style = \"\";\nexport let groupPosition = \"\";\nexport let grouped = false;\n\n$: borderClass = grouped \n ? \"\"\n : \"border-normal\";\n\n</script>\n\n<button class=\"{color} {className} {borderClass} {grouped ? \"grouped\" : \"\"}\" \n style=\"{style}\"\n on:click >\n <slot/>\n</button>\n\n<style>\n\n.border-normal { border-radius: var(--borderradiusall); }\n.border-left { border-radius: var(--borderradius) 0 0 var(--borderradius); }\n.border-right { border-radius: 0 var(--borderradius) var(--borderradius) 0; }\n.border-middle { border-radius: 0; }\n\nbutton { \n border-style: solid; \n padding: 7.5px 15px;\n cursor:pointer;\n margin:5px;\n border-radius: 5px;\n}\n\n/* ---- PRIMARY ----*/\n.primary {\n background-color: var(--primary100);\n border-color: var(--primary100);\n color: var(--white);\n}\n\n.primary:hover {\n background-color: var(--primary75);\n border-color: var(--primary75);\n}\n\n.primary:active {\n background-color: var(--primarydark);\n border-color: var(--primarydark);\n}\n\n.primary-outline {\n background-color: var(--white);\n border-color: var(--primary100);\n color: var(--primary100);\n}\n\n.primary-outline:hover {\n background-color: var(--primary10);\n}\n\n.primary-outline:pressed {\n background-color: var(--primary25);\n}\n\n/* ---- secondary ----*/\n\n.secondary {\n background-color: var(--secondary100);\n border-color: var(--secondary100);\n color: var(--white);\n}\n\n.secondary:hover {\n background-color: var(--secondary75);\n border-color: var(--secondary75);\n}\n\n.secondary:pressed {\n background-color: var(--secondarydark);\n border-color: var(--secondarydark);\n}\n\n.secondary-outline {\n background-color: var(--white);\n border-color: var(--secondary100);\n color: var(--secondary100);\n}\n\n.secondary-outline:hover {\n background-color: var(--secondary10);\n}\n\n.secondary-outline:pressed {\n background-color: var(--secondary25);\n}\n\n\n/* ---- success ----*/\n.success {\n background-color: var(--success100);\n border-color: var(--success100);\n color: var(--white);\n}\n\n.success:hover {\n background-color: var(--success75);\n border-color: var(--success75);\n}\n\n.success:pressed {\n background-color: var(--successdark);\n border-color: var(--successdark);\n}\n\n.success-outline {\n background-color: var(--white);\n border-color: var(--success100);\n color: var(--success100);\n}\n\n.success-outline:hover {\n background-color: var(--success10);\n}\n\n.success-outline:pressed {\n background-color: var(--success25);\n}\n\n/* ---- deletion ----*/\n.deletion {\n background-color: var(--deletion100);\n border-color: var(--deletion100);\n color: var(--white);\n}\n\n.deletion:hover {\n background-color: var(--deletion75);\n border-color: var(--deletion75);\n}\n\n.deletion:pressed {\n background-color: var(--deletiondark);\n border-color: var(--deletiondark);\n}\n\n.deletion-outline {\n background-color: var(--white);\n border-color: var(--deletion100);\n color: var(--deletion100);\n}\n\n.deletion-outline:hover {\n background-color: var(--deletion10);\n}\n\n.deletion-outline:pressed {\n background-color: var(--deletion25);\n}\n\n\n</style>",
|
|
"<script>\n\nimport ComponentsHierarchy from \"./ComponentsHierarchy.svelte\";\nimport PagesList from \"./PagesList.svelte\"\nimport { store } from \"../builderStore\";\nimport getIcon from \"../common/icon\";\nimport { isComponent } from \"./pagesParsing/searchComponents\";\nimport IconButton from \"../common/IconButton.svelte\";\nimport Modal from \"../common/Modal.svelte\";\nimport NewComponent from \"./NewComponent.svelte\";\nimport CurrentItemPreview from \"./CurrentItemPreview.svelte\";\nimport SettingsView from \"./SettingsView.svelte\";\nimport PageView from \"./PageView.svelte\";\nimport ComponentsPaneSwitcher from \"./ComponentsPaneSwitcher.svelte\";\n\nlet newComponentPicker; \nconst newComponent = () => {\n newComponentPicker.show();\n}\n\nlet settingsView;\nconst settings = () => {\n settingsView.show();\n}\n\n</script>\n\n<div class=\"root\">\n \n <div class=\"ui-nav\">\n\n <div class=\"components-list-container\">\n <div class=\"nav-group-header\">\n <div>{@html getIcon(\"sidebar\",\"18\")}</div>\n <span class=\"components-nav-header\">Screens</span>\n <div>\n <IconButton icon=\"settings\" \n size=\"14px\"\n on:click={settings}/>\n <IconButton icon=\"plus\" \n on:click={newComponent}/>\n </div>\n </div>\n <div class=\"nav-items-container\">\n <ComponentsHierarchy components={$store.screens}/>\n </div>\n </div>\n\n <div class=\"pages-list-container\">\n <div class=\"nav-group-header\">\n <div>{@html getIcon(\"grid\",\"18\")}</div>\n <span>Pages</span>\n </div>\n <div class=\"nav-items-container\">\n <PagesList />\n </div>\n </div>\n\n </div>\n\n <div class=\"preview-pane\">\n {#if $store.currentFrontEndType === \"screen\"}\n <CurrentItemPreview />\n {:else if $store.currentFrontEndType === \"page\"}\n <PageView />\n {/if} \n </div>\n\n {#if $store.currentFrontEndType === \"screen\"}\n <div class=\"components-pane\">\n <ComponentsPaneSwitcher />\n </div>\n {/if}\n\n</div>\n\n\n<NewComponent bind:this={newComponentPicker}/>\n<SettingsView bind:this={settingsView} />\n\n\n<style>\n\n.root {\n display: grid;\n grid-template-columns: 250px 1fr 300px;\n height: 100%;\n width: 100%;\n}\n\n.ui-nav {\n grid-column: 1;\n background-color: var(--secondary5);\n height: 100%;\n}\n\n.preview-pane {\n grid-column: 2;\n}\n\n.components-pane {\n grid-column: 3;\n background-color: var(--secondary5);\n min-height: 0px;\n overflow-y: hidden;\n}\n\n.pages-list-container {\n padding-top: 2rem;\n}\n\n.components-nav-header {\n font-size: .9rem;\n}\n\n.nav-group-header {\n font-size: .9rem;\n padding-left: 1rem;\n}\n\n.nav-items-container {\n padding: 1rem 1rem 0rem 1rem;\n}\n\n.nav-group-header {\n display:grid;\n grid-template-columns: [icon] auto [title] 1fr [button] auto;\n padding: 2rem 1rem 0rem 1rem;\n font-size: .9rem;\n font-weight: bold;\n}\n\n.nav-group-header>div:nth-child(1) {\n padding: 0rem .5rem 0rem 0rem;\n vertical-align: bottom;\n grid-column-start: icon;\n margin-right: 5px;\n}\n\n.nav-group-header>span:nth-child(2) {\n margin-left:5px;\n vertical-align: bottom;\n grid-column-start: title;\n margin-top:auto;\n}\n\n.nav-group-header>div:nth-child(3) {\n vertical-align: bottom;\n grid-column-start: button;\n cursor: pointer;\n color: var(--primary75);\n}\n\n.nav-group-header>div:nth-child(3):hover {\n color: var(--primary75); \n}\n\n</style>",
|
|
"<script>\n\nimport BackendNav from \"./nav/BackendNav.svelte\";\nimport Database from \"./database/DatabaseRoot.svelte\" ;\nimport UserInterface from \"./userInterface/UserInterfaceRoot.svelte\" ;\nimport ActionsAndTriggers from \"./actionsAndTriggers/ActionsAndTriggersRoot.svelte\" ;\nimport AccessLevels from \"./accessLevels/AccessLevelsRoot.svelte\" ;\nimport ComingSoon from \"./common/ComingSoon.svelte\";\n\nimport {store} from \"./builderStore\";\n\nexport let navWidth = \"50px\";\n\n\n</script>\n\n<div class=\"root\">\n <div class=\"nav\">\n <BackendNav />\n </div>\n <div class=\"content\" \n style=\"width: calc(100% - {navWidth}); left: {navWidth}\"> \n {#if $store.activeNav === \"database\"}\n <Database />\n {:else if $store.activeNav === \"actions\"}\n <ActionsAndTriggers />\n {:else if $store.activeNav === \"access levels\"}\n <AccessLevels />\n {/if}\n </div>\n</div>\n\n\n\n<style>\n\n.root {\n height: 100%;\n display: flex;\n}\n\n\n.content {\n flex: 1 1 auto;\n height: 100%;\n background-color: var(--white);\n margin:0;\n}\n\n.nav {\n flex: 0 1 auto;\n width: 300px;\n height: 100%;\n}\n\n</style>",
|
|
"<script>\nimport { store } from \"../builderStore\";\nimport getIcon from \"../common/icon\";\n\nconst getPage = (s, name) => {\n const props = s.pages[name];\n return ({name, props});\n}\n\n</script>\n\n<div class=\"root\">\n <div class=\"hierarchy-item component\" class:selected={$store.currentFrontEndType === \"page\" && $store.currentPageName === \"main\"}\n on:click|stopPropagation={() => store.setCurrentPage(\"main\")}>\n <span>{@html getIcon(\"circle\", \"7\")}</span>\n <span class=\"title\">Main</span>\n </div>\n\n <div class=\"hierarchy-item component\" class:selected={$store.currentFrontEndType === \"page\" && $store.currentPageName === \"unauthenticated\"}\n on:click|stopPropagation={() => store.setCurrentPage(\"unauthenticated\")}>\n <span>{@html getIcon(\"circle\", \"7\")}</span>\n <span class=\"title\">Login</span>\n </div>\n\n</div>\n\n<style>\n\n.root {\n padding-bottom: 10px;\n padding-left: 10px;\n font-size: .9rem;\n color: var(--secondary50);\n font-weight: bold;\n}\n\n.hierarchy-item {\n cursor: pointer;\n padding: 5px 0px;\n}\n\n.hierarchy-item:hover {\n color: var(--secondary100);\n}\n\n.component {\n margin-left: 5px;\n}\n\n.selected {\n color: var(--primary100);\n font-weight: bold;\n}\n\n\n.title {\n margin-left: 10px;\n}\n\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$: {\r\n if(ukModal && !listenerAdded) {\r\n listenerAdded = true;\r\n ukModal.addEventListener(\"hidden\", onClosed);\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>",
|
|
"<script>\n\nimport { \n last, \n sortBy, \n filter, \n map,\n uniqWith,\n isEqual,\n trimCharsStart,\n trimChars,\n join,\n includes\n} from \"lodash/fp\";\n\nimport { pipe } from \"../common/core\";\nimport getIcon from \"../common/icon\";\nimport { store } from \"../builderStore\";\n\nexport let components = []\nexport let thisLevel = \"\";\n\nlet pathPartsThisLevel;\nlet componentsThisLevel;\nlet subfolders;\n\nlet expandedFolders = [];\n\nconst joinPath = join(\"/\");\n\nconst normalizedName = name => pipe(name, [\n trimCharsStart(\"./\"),\n trimCharsStart(\"~/\"),\n trimCharsStart(\"../\"),\n trimChars(\" \")\n ]);\n\n\nconst isOnThisLevel = (c) => \n normalizedName(c.name).split(\"/\").length === pathPartsThisLevel\n &&\n (!thisLevel || normalizedName(c.name).startsWith(normalizedName(thisLevel)));\n\nconst notOnThisLevel = (c) => !isOnThisLevel(c);\n\nconst isInSubfolder = (subfolder, c) => \n normalizedName(c.name).startsWith(\n trimCharsStart(\"/\")(\n joinPath([thisLevel, subfolder])));\n\nconst isOnNextLevel = (c) => \n normalizedName(c.name).split(\"/\").length === pathPartsThisLevel + 1\n\nconst lastPartOfName = (c) => \n last(c.name.split(\"/\"))\n\nconst subFolder = (c) => {\n const cname = normalizedName(c.name);\n const folderName = cname.substring(thisLevel.length, cname.length).split(\"/\")[0];\n\n return ({\n name: folderName,\n isExpanded: includes(folderName)(expandedFolders),\n path: thisLevel + \"/\" + folderName\n });\n}\n\nconst subComponents = (subfolder) => pipe(components, [\n filter(c => isInSubfolder(subfolder, c))\n ]);\n\nconst expandFolder = folder => {\n const expandedFolder = {...folder};\n if(expandedFolder.isExpanded) {\n expandedFolder.isExpanded = false;\n expandedFolders = filter(f => f.name !== folder.name)(expandedFolders);\n } else {\n expandedFolder.isExpanded = true;\n expandedFolders.push(folder.name);\n }\n const newFolders = [...subfolders];\n newFolders.splice(\n newFolders.indexOf(folder),\n 1,\n expandedFolder);\n subfolders = newFolders;\n \n}\n\nconst isComponentSelected = (type, current,c) =>\n type===\"screen\"\n && current \n && current.name === c.name\n\nconst isFolderSelected = (current, folder) => \n isInSubfolder(current, folder)\n\n\n\n$: {\n pathPartsThisLevel = !thisLevel \n ? 1\n : normalizedName(thisLevel).split(\"/\").length + 1;\n\n componentsThisLevel = \n pipe(components, [\n filter(isOnThisLevel),\n map(c => ({component:c, title:lastPartOfName(c)})),\n sortBy(\"title\")\n ]);\n\n subfolders = \n pipe(components, [\n filter(notOnThisLevel),\n sortBy(\"name\"),\n map(subFolder),\n uniqWith((f1,f2) => f1.path === f2.path)\n ]);\n}\n\n</script>\n\n<div class=\"root\" style={`padding-left: calc(10px * ${pathPartsThisLevel})`}>\n \n {#each subfolders as folder}\n <div class=\"hierarchy-item folder\"\n on:click|stopPropagation={() => expandFolder(folder)}>\n <span>{@html getIcon(folder.isExpanded ? \"chevron-down\" : \"chevron-right\", \"16\")}</span>\n <span class=\"title\" class:currentfolder={$store.currentFrontEndItem && isInSubfolder(folder.name, $store.currentFrontEndItem)}>{folder.name}</span>\n {#if folder.isExpanded}\n <svelte:self components={subComponents(folder.name)} \n thisLevel={folder.path} />\n {/if}\n </div>\n {/each}\n\n {#each componentsThisLevel as component}\n <div class=\"hierarchy-item component\" class:selected={isComponentSelected($store.currentFrontEndType, $store.currentFrontEndItem, component.component)}\n on:click|stopPropagation={() => store.setCurrentScreen(component.component.name)}>\n <span>{@html getIcon(\"circle\", \"7\")}</span>\n <span class=\"title\">{component.title}</span>\n </div>\n {/each}\n\n</div>\n\n<style>\n\n.root {\n color: var(--secondary50);\n font-size: .9rem;\n font-weight: bold;\n}\n\n.hierarchy-item {\n cursor: pointer;\n padding: 5px 0px;\n}\n\n.hierarchy-item:hover {\n color: var(--secondary);\n}\n\n.component {\n margin-left: 5px;\n}\n\n.currentfolder {\n color: var(--secondary100);\n}\n\n.selected {\n color: var(--primary100);\n font-weight: bold;\n}\n\n.title {\n margin-left: 10px;\n}\n\n\n</style>",
|
|
"<script>\n\nimport PropsView from \"./PropsView.svelte\";\nimport { store } from \"../builderStore\";\nimport { isRootComponent } from \"./pagesParsing/searchComponents\";\nimport IconButton from \"../common/IconButton.svelte\";\nimport Textbox from \"../common/Textbox.svelte\";\nimport UIkit from \"uikit\";\nimport { pipe } from \"../common/core\";\nimport {\n getScreenInfo\n} from \"./pagesParsing/createProps\";\nimport Button from \"../common/Button.svelte\";\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\n\nimport { \n cloneDeep, \n join,\n split,\n map,\n keys,\n isUndefined,\n last\n} from \"lodash/fp\";\nimport { assign } from \"lodash\";\n\nlet component;\nlet name = \"\";\nlet description = \"\";\nlet tagsString = \"\";\nlet nameInvalid = \"\";\nlet componentInfo;\nlet modalElement\nlet propsValidationErrors = [];\nlet originalName=\"\";\nlet components;\nlet ignoreStore = false;\n\n$: shortName = last(name.split(\"/\"));\n\nstore.subscribe(s => {\n if(ignoreStore) return;\n component = s.currentFrontEndItem;\n if(!component) return;\n originalName = component.name;\n name = component.name;\n description = component.description;\n tagsString = join(\", \")(component.tags);\n componentInfo = s.currentComponentInfo;\n components = s.components;\n});\n\nconst save = () => {\n\n ignoreStore = true;\n if(!validate()) {\n ignoreStore = false;\n return;\n }\n\n component.name = originalName || name;\n component.description = description;\n component.tags = pipe(tagsString, [\n split(\",\"),\n map(s => s.trim())\n ]);\n\n store.saveScreen(component);\n\n ignoreStore = false;\n // now do the rename\n if(name !== originalName) {\n store.renameScreen(originalName, name);\n }\n}\n\nconst deleteComponent = () => {\n showDialog();\n}\n\nconst confirmDeleteComponent = () => {\n store.deleteScreen(component.name);\n hideDialog();\n}\n\nconst onPropsValidate = result => {\n propsValidationErrors = result;\n}\n\nconst updateComponent = doChange => {\n const newComponent = cloneDeep(component);\n doChange(newComponent);\n component = newComponent;\n componentInfo = getScreenInfo(components, newComponent);\n}\n\nconst onPropsChanged = newProps => {\n updateComponent(newComponent => \n assign(newComponent.props, newProps));\n \n}\n\nconst validate = () => {\n const fieldInvalid = (field, err) => \n errors[field] = err;\n const fieldValid = field => \n errors[field] && delete errors[field];\n\n if(!name) nameInvalid = \"component name i not supplied\";\n else nameInvalid = \"\";\n\n return (!nameInvalid && propsValidationErrors.length === 0);\n}\n\nconst hideDialog = () => {\n UIkit.modal(modalElement).hide();\n}\n\nconst showDialog = () => {\n UIkit.modal(modalElement).show();\n}\n\n</script>\n\n<div class=\"root\">\n\n <div class=\"title\">\n <div>{shortName}</div>\n <div>\n <IconButton icon=\"save\" \n on:click={save} \n color=\"var(--secondary100)\"\n hoverColor=\"var(--primary100)\"/>\n <IconButton icon=\"trash\" \n on:click={deleteComponent} \n color=\"var(--secondary100)\"\n hoverColor=\"var(--primary100)\"/>\n </div>\n </div>\n\n <div class=\"component-props-container\">\n\n \n <PropsView onValidate={onPropsValidate}\n {componentInfo}\n {onPropsChanged} />\n \n\n </div>\n\n</div>\n\n\n<div bind:this={modalElement} uk-modal>\n <div class=\"uk-modal-dialog\">\n\n <div class=\"uk-modal-header\">\n Delete {name} ? \n </div>\n\n <div class=\"uk-modal-body\">\n Are you sure you want to delete this component ?\n </div>\n\n <div class=\"uk-modal-footer\">\n <ButtonGroup>\n <Button grouped \n on:click={confirmDeleteComponent}>\n OK\n </Button>\n <Button grouped \n on:click={hideDialog} \n color=\"secondary\" >\n Cancel\n </Button>\n </ButtonGroup>\n </div>\n\n </div>\n\n</div>\n\n<style>\n\n.root {\n height: 100%;\n display: flex;\n flex-direction: column;\n border-style: solid;\n border-width: 1px 0 0 0;\n border-color: var(--slate);\n}\n\n.title {\n padding: 1rem;\n display: grid;\n grid-template-columns: [name] 1fr [actions] auto;\n color: var(--secondary100);\n font-size: .9rem;\n font-weight: bold;\n}\n\n.title > div:nth-child(1) {\n grid-column-start: name;\n color: var(--secondary100);\n}\n\n.title > div:nth-child(2) {\n grid-column-start: actions;\n}\n\n.component-props-container {\n flex: 1 1 auto;\n overflow-y: auto;\n}\n</style>",
|
|
"<script>\n\nimport { store } from \"../builderStore\";\nimport Textbox from \"../common/Textbox.svelte\";\nimport Button from \"../common/Button.svelte\";\nimport IconButton from \"../common/IconButton.svelte\";\nimport { libraryDependencies } from \"./pagesParsing/findDependencies\";\nimport UIkit from \"uikit\";\n\nlet addNewLib = \"\";\nlet addNewStylesheet = \"\";\nlet addComponentError = \"\";\nlet modalElement;\nlet components;\n\nstore.subscribe(s => {\n components = s.components;\n})\n\nconst removeLibrary = lib => {\n const dependencies = libraryDependencies(components, lib);\n if(dependencies.length > 0) return;\n store.removeComponentLibrary(lib);\n}\n\nconst addLib = () => {\n store.addComponentLibrary(addNewLib)\n .then(() => {\n addNewLib = \"\";\n }); \n}\n\nconst removeStylesheet = stylesheet => {\n store.removeStylesheet(stylesheet);\n}\n\nconst addStylesheet = () => {\n if(addNewStylesheet)\n store.addStylesheet(addNewStylesheet);\n}\n\nexport const close = () => {\n UIkit.modal(modalElement).hide();\n}\n\nexport const show = () => {\n UIkit.modal(modalElement).show();\n}\n\n</script>\n\n<div bind:this={modalElement} id=\"new-component-modal\" uk-modal>\n <div class=\"uk-modal-dialog\">\n\n <div class=\"uk-modal-header header\">\n <div>Settings</div>\n <div>\n <IconButton icon=\"x\"\n on:click={close}/>\n </div>\n </div>\n\n <div class=\"uk-modal-body uk-form-horizontal\">\n\n <div class=\"section-container\">\n <p>Component Libraries\n <span>\n <input bind:value={addNewLib} /> \n <Button color=\"primary-outline\"\n on:click={addLib}>Add</Button>\n </span>\n </p>\n {#each $store.pages.componentLibraries as lib}\n <div>\n <span class=\"row-text\">{lib}</span>\n <IconButton icon=\"x\" \n on:click={() => removeLibrary(lib)}/>\n </div>\n {/each}\n </div>\n \n\n <div class=\"section-container\">\n <p>Stylesheets\n <span>\n <input bind:value={addNewStylesheet} /> \n <Button color=\"primary-outline\"\n on:click={addStylesheet} >Add</Button>\n </span>\n </p>\n {#each $store.pages.stylesheets as stylesheet}\n <div>\n <span class=\"row-text\">{stylesheet}</span>\n <IconButton icon=\"x\" \n on:click={() => removeStylesheet(stylesheet)}/>\n </div>\n {/each}\n </div>\n\n \n </div>\n </div>\n</div>\n\n<style>\n\n.section-container {\n padding: 15px;\n border-style: dotted;\n border-width: 1px;\n border-color: var(--lightslate);\n border-radius: 2px;\n}\n\n.section-container:nth-child(1) {\n margin-bottom: 15px;\n}\n\n.row-text {\n margin-right: 15px;\n color: var(--primary100);\n}\n\ninput {\n margin-right: 15px;\n}\n\np > span {\n margin-left: 30px;\n}\n\n.header {\n display: grid;\n grid-template-columns: [title] 1fr [icon] auto;\n}\n\n.header > div:nth-child(1) {\n grid-column-start: title;\n}\n\n.header > div:nth-child(2) {\n grid-column-start: icon;\n}\n\n</style>",
|
|
"<script>\r\nimport {\r\n isRootComponent\r\n} from \"./pagesParsing/searchComponents\"\r\nimport { splitName } from \"./pagesParsing/splitRootComponentName.js\"\r\nimport { store } from \"../builderStore\";\r\nimport {\r\n groupBy, keys, find, sortBy\r\n} from \"lodash/fp\";\r\nimport { pipe } from \"../common/core\";\r\n\r\nlet componentLibraries=[];\r\n\r\nconst addRootComponent = (c, all) => {\r\n const { libName } = splitName(c.name);\r\n let group = find(r => r.libName === libName)(all);\r\n\r\n if(!group) {\r\n group = {\r\n libName,\r\n components: [],\r\n generators: []\r\n };\r\n\r\n all.push(group);\r\n }\r\n\r\n group.components.push(c)\r\n \r\n};\r\n\r\nconst onComponentChosen = (component) => {\r\n \r\n};\r\n\r\nstore.subscribe(s => {\r\n\r\n const newComponentLibraries = [];\r\n\r\n for(let comp of sortBy([\"name\"])(s.components)) {\r\n addRootComponent(\r\n comp, \r\n newComponentLibraries);\r\n }\r\n\r\n componentLibraries = newComponentLibraries;\r\n});\r\n\r\n\r\n\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n {#each componentLibraries as lib}\r\n <div class=\"library-header\">\r\n {lib.libName}\r\n </div>\r\n\r\n <div class=\"library-container\">\r\n\r\n \r\n <div class=\"inner-header\">\r\n Components\r\n </div>\r\n\r\n {#each lib.components as component}\r\n\r\n <div class=\"component\"\r\n on:click={() => onComponentChosen(component)}>\r\n <div class=\"name\">\r\n {splitName(component.name).componentName}\r\n </div>\r\n <div class=\"description\">\r\n {component.description}\r\n </div>\r\n </div>\r\n\r\n {/each}\r\n\r\n </div>\r\n\r\n {/each}\r\n\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.library-header {\r\n font-size: 1.1em;\r\n border-color: var(--primary25);\r\n border-width: 1px 0px;\r\n border-style: solid;\r\n background-color: var(--primary10);\r\n padding: 5px 0;\r\n flex: 0 0 auto;\r\n}\r\n\r\n.library-container {\r\n padding: 0 0 10px 10px;\r\n flex: 1 1 auto;\r\n min-height: 0px;\r\n}\r\n\r\n.inner-header {\r\n font-size: 0.9em;\r\n font-weight: bold;\r\n margin-top: 7px;\r\n margin-bottom: 3px;\r\n}\r\n\r\n.component {\r\n padding: 2px 0px;\r\n cursor: pointer;\r\n}\r\n\r\n.component:hover {\r\n background-color: var(--lightslate);\r\n}\r\n\r\n.component > .name {\r\n color: var(--secondary100);\r\n display: inline-block;\r\n}\r\n\r\n.component > .description {\r\n font-size: 0.8em;\r\n color: var(--secondary75);\r\n display: inline-block;\r\n margin-left: 10px;\r\n}\r\n\r\n\r\n\r\n</style>\r\n",
|
|
"<script>\n\nimport ComponentSelector from \"./ComponentSelector.svelte\";\nimport { store } from \"../builderStore\";\nimport PropsView from \"./PropsView.svelte\";\nimport Textbox from \"../common/Textbox.svelte\";\nimport Button from \"../common/Button.svelte\";\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\nimport { pipe } from \"../common/core\";\nimport UIkit from \"uikit\";\nimport { isRootComponent } from \"./pagesParsing/searchComponents\";\nimport { splitName } from \"./pagesParsing/splitRootComponentName.js\"\n\nimport { \n find, filter, some, map, includes\n} from \"lodash/fp\";\nimport { assign } from \"lodash\";\n\n\nexport const show = () => {\n UIkit.modal(componentSelectorModal).show();\n}\n\nlet componentSelectorModal;\nlet layoutComponents;\nlet layoutComponent;\nlet screens;\nlet name=\"\";\nlet saveAttempted=false;\n\nstore.subscribe(s => {\n\n layoutComponents = pipe(s.components, [\n filter(c => includes(\"layout\")(c.tags)),\n map(c => ({name:c.name, ...splitName(c.name)}))\n ]);\n\n layoutComponent = layoutComponent \n ? find(c => c.name === layoutComponent.name)(layoutComponents)\n : layoutComponents[0];\n\n screens = s.screens;\n});\n\nconst save = () => {\n saveAttempted = true;\n\n const isValid = name.length > 0\n && !screenNameExists(name)\n && layoutComponent;\n \n if(!isValid) return;\n\n store.createScreen(name, layoutComponent.name);\n UIkit.modal(componentSelectorModal).hide();\n}\n\nconst cancel = () => {\n UIkit.modal(componentSelectorModal).hide();\n}\n\nconst screenNameExists = (name) => \n some(s => s.name.toLowerCase() === name.toLowerCase())(screens)\n\n</script>\n\n<div bind:this={componentSelectorModal} id=\"new-component-modal\" uk-modal>\n <div class=\"uk-modal-dialog\" uk-overflow-auto>\n\n <div class=\"uk-modal-header\">\n <h1>New Screen</h1>\n </div>\n\n <div class=\"uk-modal-body uk-form-horizontal\">\n <div class=\"uk-margin\">\n <label class=\"uk-form-label\">Name</label>\n <div class=\"uk-form-controls\">\n <input class=\"uk-input uk-form-small\"\n class:uk-form-danger={saveAttempted && (name.length === 0 || screenNameExists(name))}\n bind:value={name} >\n </div>\n </div>\n\n <div class=\"uk-margin\">\n <label class=\"uk-form-label\">Layout Component</label>\n <div class=\"uk-form-controls\">\n <select class=\"uk-select uk-form-small\" \n bind:value={layoutComponent}\n class:uk-form-danger={saveAttempted && !layoutComponent}>\n {#each layoutComponents as comp}\n <option value={comp}>\n {comp.componentName} - {comp.libName}\n </option>\n {/each}\n </select>\n </div>\n </div>\n\n <ButtonGroup style=\"float: right;\">\n <Button color=\"primary\" grouped on:click={save}>Create Screen</Button>\n <Button color=\"tertiary\" grouped on:click={cancel}>Cancel</Button>\n </ButtonGroup>\n </div>\n </div>\n</div>\n\n\n\n<style>\nh1 {\n font-size:1.2em;\n}\n\n.component-option {\n border-style: solid;\n border-color: var(--slate);\n border-width: 0 0 1px 0;\n padding: 3px;\n}\n\n.component-option:hover {\n background-color: var(--lightslate);\n}\n\n.component-name {\n font-size: 11pt;\n}\n\n.lib-name {\n font-size: 9pt;\n}\n\n</style>",
|
|
"<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 hasComponent=false;\r\nlet stylesheetLinks = \"\";\r\nlet appDefinition = {};\r\n\r\nstore.subscribe(s => {\r\n hasComponent = !!s.currentFrontEndItem;\r\n \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(\r\n s.components, \r\n s.screens, \r\n s.currentFrontEndItem),\r\n hierarchy: s.hierarchy,\r\n appRootPath: \"\"\r\n };\r\n\r\n});\r\n\r\n\r\n\r\n</script>\r\n\r\n\r\n<div class=\"component-container\">\r\n {#if hasComponent}\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('/_builder/budibase-client.esm.mjs')\r\n .then(module => {\r\n module.loadBudibase();\r\n }) \r\n </script>\r\n <style>\r\n\r\n body {\r\n box-sizing: border-box;\r\n padding: 20px;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n</body>\r\n</html>`}>\r\n </iframe>\r\n {/if}\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.component-container {\r\n grid-row-start: middle;\r\n grid-column-start: middle;\r\n position: relative;\r\n overflow: hidden;\r\n padding-top: 56.25%;\r\n margin: auto;\r\n}\r\n\r\n.component-container iframe {\r\n border: 0;\r\n height: 100%;\r\n left: 0;\r\n position: absolute;\r\n top: 0;\r\n width: 100%;\r\n}\r\n\r\n</style>",
|
|
"<script>\n\nexport let name = \"\";\n\n</script>\n\n<div>\n <h4>Coming Sometime: {name}</h4>\n</div>\n\n<style>\n\nh4 {\n margin-top: 20px;\n}\n\n</style>",
|
|
"<script>\n\nimport Textbox from \"../common/Textbox.svelte\";\nimport Dropdown from \"../common/Dropdown.svelte\";\nimport Button from \"../common/Button.svelte\";\nimport { store } from \"../builderStore\";\nimport { isRootComponent } from \"./pagesParsing/searchComponents\";\nimport { pipe } from \"../common/core\";\nimport {\n filter, find, concat\n} from \"lodash/fp\";\n\nlet entryComponent;\nlet title = \"\";\nlet components = [];\nlet page={};\nconst notSeletedComponent = {name:\"(none selected)\"};\n\nstore.subscribe(s => {\n page = s.pages[s.currentPageName];\n if(!page) return;\n title = page.index.title;\n components = pipe(s.components, [\n filter(s => !isRootComponent(s)),\n concat([notSeletedComponent])\n ]);\n entryComponent = find(c => c.name === page.appBody)(components);\n if(!entryComponent) entryComponent = notSeletedComponent;\n});\n\nconst save = () => {\n if(!title || !entryComponent || entryComponent === notSeletedComponent) return;\n const page = {\n index: {\n title\n },\n appBody: entryComponent.name,\n }\n store.savePage(page);\n}\n\n</script>\n\n<div class=\"root\">\n\n <h3>{$store.currentPageName}</h3>\n\n <form class=\"uk-form-horizontal\">\n <Textbox bind:text={title} label=\"Title\" hasError={!title}/>\n <div class=\"help-text\">The title of your page, displayed in the bowser tab</div>\n <Dropdown label=\"App Entry Component\"\n options={components}\n bind:selected={entryComponent}\n textMember={(v) => v.name} />\n\n <div class=\"help-text\">The component that will be loaded into the body of the page</div>\n <div style=\"margin-top: 20px\"></div>\n <Button on:click={save}>Save</Button>\n </form>\n\n</div>\n\n<style>\n.root {\n padding: 15px;\n}\n.help-text {\n color: var(--slate);\n font-size: 10pt;\n}\n</style>",
|
|
"<script>\n\nimport { store } from \"../builderStore\";\nimport HierarchyRow from \"./HierarchyRow.svelte\";\nimport DropdownButton from \"../common/DropdownButton.svelte\";\nimport {hierarchy as hierarchyFunctions} from \"../../../core/src\";\nimport NavItem from \"./NavItem.svelte\";\nimport getIcon from \"../common/icon\";\n\n\nconst newRootRecord = () => {\n store.newRootRecord();\n}\n\nconst newRootIndex = () => {\n store.newRootIndex();\n}\n\nconst newChildRecord = () => {\n store.newChildRecord();\n}\n\nconst newChildIndex = () => {\n store.newChildIndex();\n}\n\nconst defaultNewChildActions = [\n {\n label:\"New Root Record\", \n onclick: newRootRecord\n },\n {\n label:\"New Root Index\", \n onclick: newRootIndex\n }\n];\n\nlet newChildActions = defaultNewChildActions;\n\nconst setActiveNav = (name) => () => {\n store.setActiveNav(name);\n}\n\nstore.subscribe(db => {\n if(!db.currentNode || hierarchyFunctions.isIndex(db.currentNode)) {\n newChildActions = defaultNewChildActions;\n } else {\n newChildActions = [\n {\n label:\"New Root Record\", \n onclick: newRootRecord\n },\n {\n label:\"New Root Index\", \n onclick: newRootIndex\n },\n {\n label: `New Child Record of ${db.currentNode.name}`, \n onclick: newChildRecord\n },\n {\n label: `New Index on ${db.currentNode.name}`, \n onclick: newChildIndex\n }\n ];\n }\n});\n\n</script>\n\n\n<div class=\"items-root\">\n <div class=\"hierarchy\">\n <div class=\"components-list-container\">\n <div class=\"nav-group-header\">\n <div>{@html getIcon(\"database\",\"18\")}</div>\n <div class=\"hierarchy-title\">Database</div>\n <DropdownButton iconName=\"plus\" actions={newChildActions} />\n </div>\n </div>\n\n <div class=\"hierarchy-items-container\">\n {#each $store.hierarchy.children as record}\n <HierarchyRow node={record}\n type=\"record\" />\n {/each}\n\n {#each $store.hierarchy.indexes as index}\n <HierarchyRow node={index}\n type=\"index\" />\n {/each}\n </div>\n </div>\n\n <NavItem name=\"actions\" label=\"Actions & Triggers\"/>\n <NavItem name=\"access levels\" label=\"User Levels\"/>\n\n</div>\n\n\n<style>\n\n\n.items-root {\n display: flex;\n flex-direction: column;\n max-height: 100%;\n height: 100%;\n background-color: var(--secondary5);\n}\n\n.nav-group-header {\n display:grid;\n grid-template-columns: [icon] auto [title] 1fr [button] auto;\n padding: 2rem 1rem 0rem 1rem;\n font-size: .9rem;\n font-weight: bold;\n}\n\n.nav-group-header>div:nth-child(1) {\n padding: 0rem .7rem 0rem 0rem;\n vertical-align: bottom;\n grid-column-start: icon;\n margin-right: 5px;\n}\n\n.nav-group-header>div:nth-child(2) {\n margin-left:5px;\n vertical-align: bottom;\n grid-column-start: title;\n margin-top:auto;\n}\n\n.nav-group-header>div:nth-child(3) {\n vertical-align: bottom;\n grid-column-start: button;\n cursor: pointer;\n color: var(--primary75);\n}\n\n.nav-group-header>div:nth-child(3):hover {\n color: var(--primary75); \n}\n\n.hierarchy-title {\n flex: auto 1 1;\n}\n\n\n.hierarchy {\n display:flex;\n flex-direction: column;\n flex: 1 0 auto;\n height: 100px;\n}\n\n.hierarchy-items-container {\n flex: 1 1 auto;\n overflow-y:auto;\n}\n\n\n</style>",
|
|
"<script>\n\nimport getIcon from \"../common/icon\";\nimport {store} from \"../builderStore\";\nimport Button from \"../common/Button.svelte\";\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\nimport Actions from \"./Actions.svelte\";\nimport Triggers from \"./Triggers.svelte\";\nimport {getNewAction, getNewTrigger} from \"../common/core\";\n\nlet editingAction = null;\nlet editingActionIsNew = true;\nlet editingTrigger = null;\nlet editingTriggerIsNew = true;\n\nlet getDefaultOptionsHtml = defaultOptions => \n pipe(defaultOptions, [\n keys,\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${JSON.parse(typeOptions[k])}`),\n join(\"<br>\")\n ]);\n\nlet onActionEdit = (action) => {\n editingAction = action;\n editingActionIsNew = false;\n}\n\nlet newAction = () => {\n editingAction = getNewAction();\n editingActionIsNew = true;\n}\n\nlet onActionDelete = (action) => {\n store.deleteAction(action);\n}\n\nlet deleteTrigger = () => {}\n\nlet editTrigger = (trigger) => {\n editingTrigger = trigger;\n editingTriggerIsNew = false;\n}\n\nlet newTrigger = () => {\n editingTrigger = getNewTrigger();\n editingTriggerIsNew = true;\n}\n\nlet onActionSave = action => {\n store.saveAction(\n action, \n editingActionIsNew, \n editingAction);\n\n editingAction = null;\n}\n\nlet onActionCancel = () => {\n editingAction = null;\n}\n\nlet onTriggerSave = trigger => {\n store.saveTrigger(\n trigger, \n editingTriggerIsNew, \n editingTrigger);\n\n editingTrigger = null;\n}\n\nlet onTriggerCancel = () => {\n editingTrigger = null;\n}\n\nlet onTriggerEdit = (trigger) => {\n editingTrigger = trigger;\n editingTriggerIsNew = false;\n}\n\n\nlet onTriggerDelete = (trigger) => {\n store.deleteTrigger(trigger);\n}\n\n</script>\n\n<div class=\"root\">\n <div class=\"actions-header\">\n <ButtonGroup>\n <Button color=\"secondary\" \n grouped\n on:click={newAction}>Create New Action</Button>\n <Button color=\"tertiary\" \n grouped\n on:click={newTrigger}>Create New Trigger</Button>\n </ButtonGroup>\n </div>\n\n <div class=\"node-view\">\n <Actions {editingActionIsNew} {editingAction} \n {onActionEdit} {onActionDelete} {onActionSave}\n {onActionCancel} />\n\n <Triggers {editingTriggerIsNew} {editingTrigger} \n {onTriggerEdit} {onTriggerDelete} {onTriggerSave}\n {onTriggerCancel} />\n </div>\n\n</div>\n\n<style>\n\n.root {\n height: 100%;\n position: relative;\n padding: 1.5rem;\n\n}\n\n.actions-header {\n flex: 0 1 auto;\n}\n\n.node-view {\n overflow-y: auto;\n flex: 1 1 auto;\n}\n\n</style>",
|
|
"<script>\n\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\nimport Button from \"../common/Button.svelte\";\nimport {store} from \"../builderStore\";\nimport {generateFullPermissions, getNewAccessLevel} from \"../common/core\";\nimport getIcon from \"../common/icon\";\nimport AccessLevelView from \"./AccessLevelView.svelte\";\nimport Modal from \"../common/Modal.svelte\";\n\nlet editingLevel = null;\nlet editingLevelIsNew = false;\n$: isEditing = (editingLevel !== null); \n\nlet allPermissions = [];\nstore.subscribe(db => {\n allPermissions = generateFullPermissions(db.hierarchy, db.actions);\n})\n\nlet onLevelEdit = (level) => {\n editingLevel = level;\n editingLevelIsNew = false;\n};\n\nlet onLevelCancel = () => {\n editingAction = null;\n};\n\nlet onLevelDelete = (level) => {\n store.deleteLevel(level);\n};\n\n\nlet createNewLevel = () => {\n editingLevelIsNew = true;\n editingLevel = getNewAccessLevel();\n}\n\nlet onEditingFinished = (level) => {\n if(level) {\n store.saveLevel(level, editingLevelIsNew, editingLevel);\n }\n editingLevel = null;\n}\n\nconst getPermissionsString = perms => {\n return `${perms.length} / ${allPermissions.length}`;\n}\n\n</script>\n\n<div class=\"root\">\n\n<ButtonGroup>\n <Button grouped color=\"secondary\" on:click={createNewLevel}>Create New Access Level</Button>\n</ButtonGroup>\n\n{#if $store.accessLevels}\n<table class=\"fields-table uk-table uk-table-small\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Permissions</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n {#each $store.accessLevels.levels as level}\n <tr>\n <td >{level.name}</td>\n <td >{getPermissionsString(level.permissions)}</td>\n <td class=\"edit-button\">\n <span on:click={() => onLevelEdit(level)}>{@html getIcon(\"edit\")}</span>\n <span on:click={() => onLevelDelete(level)}>{@html getIcon(\"trash\")}</span>\n </td>\n </tr>\n {/each}\n </tbody>\n</table>\n{:else}\n(no actions added)\n{/if}\n\n\n<Modal bind:isOpen={isEditing}>\n {#if isEditing}\n <AccessLevelView level={editingLevel}\n allPermissions={allPermissions}\n onFinished={onEditingFinished}\n isNew={editingLevelIsNew}\n allLevels={$store.accessLevels.levels}\n hierarchy={$store.hierarchy}\n actions={$store.actions} />\n {/if} \n</Modal>\n\n\n</div>\n\n<style>\n\n.root {\n height: 100%;\n position: relative;\n padding: 1.5rem;\n\n}\n\n.actions-header {\n flex: 0 1 auto;\n}\n\n.node-view {\n overflow-y: auto;\n flex: 1 1 auto;\n}\n\n\n</style>",
|
|
"<script>\n\nimport HierarchyRow from \"./HierarchyRow.svelte\";\nimport RecordView from \"./RecordView.svelte\";\nimport IndexView from \"./IndexView.svelte\";\nimport ActionsHeader from \"./ActionsHeader.svelte\";\nimport {store} from \"../builderStore\";\nimport getIcon from \"../common/icon\";\nimport DropdownButton from \"../common/DropdownButton.svelte\";\nimport {hierarchy as hierarchyFunctions} from \"../../../core/src\";\n\nconst hierarchyWidth = \"200px\";\n\nconst defaultNewIndexActions = [{\n label:\"New Root Index\", \n onclick: store.newRootIndex\n}];\n\nconst defaultNewRecordActions = [{\n label:\"New Root Record\", \n onclick: store.newRootRecord\n}];\n\nlet newIndexActions = defaultNewIndexActions;\nlet newRecordActions = defaultNewRecordActions;\n\nstore.subscribe(db => {\n if(!db.currentNode || hierarchyFunctions.isIndex(db.currentNode)) {\n newRecordActions = defaultNewRecordActions;\n newIndexActions = defaultNewIndexActions;\n } else {\n newRecordActions = [\n ...defaultNewRecordActions,\n {label: `New Child Record of ${db.currentNode.name}`, \n onclick: store.newChildRecord}\n ];\n\n newIndexActions = [\n ...defaultNewIndexActions,\n {label: `New Index on ${db.currentNode.name}`, \n onclick: store.newChildIndex}\n ];\n }\n});\n\n\n</script>\n\n<div class=\"root\">\n <div class=\"actions-header\">\n {#if $store.currentNode}\n <ActionsHeader left={hierarchyWidth}/>\n {/if}\n </div>\n <div class=\"node-view\">\n {#if !$store.currentNode}\n <h1 style=\"margin-left: 100px\">:)</h1>\n {:else if $store.currentNode.type === \"record\"}\n <RecordView />\n {:else}\n <IndexView />\n {/if}\n </div>\n</div>\n\n\n<style>\n.root {\n height: 100%;\n position: relative;\n}\n\n.actions-header {\n flex: 0 1 auto;\n}\n\n.node-view {\n overflow-y: auto;\n flex: 1 1 auto;\n}\n\n</style>",
|
|
"<script>\nexport let style=\"\";\n</script>\n\n<div class=\"root\" style={style}>\n <slot />\n</div>\n\n<style>\n\n.root {\n display: flex;\n}\n\n.root:last-child {\n border-radius: 0 var(--borderradius) var(--borderradius) 0;\n}\n\n.root:first-child {\n border-radius: var(--borderradius) 0 0 var(--borderradius); \n}\n\n.root:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n\n</style>",
|
|
"<script>\r\nimport {\r\n isRootComponent\r\n} from \"./pagesParsing/searchComponents\"\r\nimport { splitName } from \"./pagesParsing/splitRootComponentName.js\"\r\nimport { store } from \"../builderStore\";\r\nimport {\r\n groupBy, keys, find, sortBy\r\n} from \"lodash/fp\";\r\nimport { pipe } from \"../common/core\";\r\n\r\nexport let onComponentChosen;\r\nexport let onGeneratorChosen;\r\nexport let allowGenerators;\r\n\r\nlet screens=[];\r\nlet componentLibraries=[];\r\n\r\nconst addRootComponent = (c, all, isGenerator) => {\r\n const { libName } = splitName(c.name);\r\n let group = find(r => r.libName === libName)(all);\r\n\r\n if(!group) {\r\n group = {\r\n libName,\r\n components: [],\r\n generators: []\r\n };\r\n\r\n all.push(group);\r\n } \r\n \r\n if(isGenerator) {\r\n group.generators.push(c)\r\n } else {\r\n group.components.push(c)\r\n }\r\n \r\n};\r\n\r\nstore.subscribe(s => {\r\n\r\n const newComponentLibraries = [];\r\n const newscreens = [];\r\n\r\n for(let comp of sortBy([\"name\"])(s.components)) {\r\n if(isRootComponent(comp)) {\r\n addRootComponent(\r\n comp, \r\n newComponentLibraries, \r\n false);\r\n } else {\r\n newscreens.push(comp);\r\n }\r\n }\r\n\r\n for(let generator of s.generators) {\r\n addRootComponent(\r\n generator, \r\n newComponentLibraries, \r\n true);\r\n }\r\n\r\n screens = sortBy([\"name\"])(newscreens);\r\n componentLibraries = newComponentLibraries;\r\n});\r\n\r\n\r\n\r\n\r\n\r\n</script>\r\n\r\n{#each componentLibraries as lib}\r\n<div class=\"library-header\">\r\n {lib.libName}\r\n</div>\r\n\r\n<div class=\"library-container\">\r\n\r\n {#if allowGenerators}\r\n <div class=\"inner-header\">\r\n Generators\r\n </div>\r\n\r\n {#each lib.generators as generator}\r\n\r\n <div class=\"component\"\r\n on:click={() => onGeneratorChosen(generator)}>\r\n <div class=\"name\">\r\n {splitName(generator.name).componentName}\r\n </div>\r\n <div class=\"description\">\r\n {generator.description}\r\n </div>\r\n </div>\r\n\r\n {/each}\r\n {/if}\r\n\r\n <div class=\"inner-header\">\r\n Components\r\n </div>\r\n\r\n {#each lib.components as component}\r\n\r\n <div class=\"component\"\r\n on:click={() => onComponentChosen(component)}>\r\n <div class=\"name\">\r\n {splitName(component.name).componentName}\r\n </div>\r\n <div class=\"description\">\r\n {component.description}\r\n </div>\r\n </div>\r\n\r\n {/each}\r\n\r\n</div>\r\n\r\n{/each}\r\n\r\n\r\n<div class=\"library-header\">\r\n My Components\r\n</div>\r\n\r\n<div class=\"library-container\">\r\n\r\n {#each screens as component}\r\n\r\n <div class=\"component\"\r\n on:click={() => onComponentChosen(component)}>\r\n <div class=\"name\">\r\n {component.name}\r\n </div>\r\n <div class=\"description\">\r\n {component.description}\r\n </div>\r\n </div>\r\n\r\n {/each}\r\n\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.library-header {\r\n font-size: 1.1em;\r\n border-color: var(--primary25);\r\n border-width: 1px 0px;\r\n border-style: solid;\r\n background-color: var(--primary10);\r\n padding: 5px 0;\r\n}\r\n\r\n.library-container {\r\n padding: 0 0 10px 10px;\r\n}\r\n\r\n.inner-header {\r\n font-size: 0.9em;\r\n font-weight: bold;\r\n margin-top: 7px;\r\n margin-bottom: 3px;\r\n}\r\n\r\n.component {\r\n padding: 2px 0px;\r\n cursor: pointer;\r\n}\r\n\r\n.component:hover {\r\n background-color: var(--lightslate);\r\n}\r\n\r\n.component > .name {\r\n color: var(--secondary100);\r\n display: inline-block;\r\n}\r\n\r\n.component > .description {\r\n font-size: 0.8em;\r\n color: var(--secondary75);\r\n display: inline-block;\r\n margin-left: 10px;\r\n}\r\n\r\n\r\n\r\n</style>\r\n",
|
|
"<script>\nexport let text = \"\";\nexport let label = \"\";\nexport let width = \"medium\";\nexport let size = \"small\";\nexport let margin = true;\nexport let infoText = \"\";\nexport let hasError = false;\nexport let disabled = false;\n</script>\n\n<div class:uk-margin={margin}>\n <label class=\"uk-form-label\">{label}</label>\n <div class=\"uk-form-controls\">\n <input class=\"uk-input uk-form-width-{width} uk-form-{size}\"\n class:uk-form-danger={hasError}\n on:change\n bind:value={text} \n {disabled}>\n </div>\n {#if infoText}\n <div class=\"info-text\">{infoText}</div>\n {/if}\n</div>\n\n<style>\n.info-text {\n font-size: 0.7rem;\n color: var(--secondary50);\n}\n</style>\n\n",
|
|
"<script>\n\nimport {\n keys, map, some, includes,\n cloneDeep, isEqual, sortBy,\n filter, difference\n} from \"lodash/fp\";\nimport { pipe } from \"../common/core\";\nimport { getInstanceProps } from \"./pagesParsing/createProps\";\nimport Checkbox from \"../common/Checkbox.svelte\";\nimport Textbox from \"../common/Textbox.svelte\";\nimport Dropdown from \"../common/Dropdown.svelte\";\nimport { validateProps } from \"./pagesParsing/validateProps\";\nimport PropControl from \"./PropControl.svelte\";\nimport IconButton from \"../common/IconButton.svelte\";\n\nexport let shouldValidate = true;\nexport let onValidate = () => {};\nexport let componentInfo;\nexport let instanceProps = null;\nexport let onPropsChanged = () => {};\n\nlet errors = [];\nlet props = {};\nlet propsDefinitions = [];\nlet isInstance = false;\n\n\n$: {\n if(componentInfo)\n {\n isInstance = !!instanceProps;\n props = isInstance \n ? getInstanceProps(componentInfo, instanceProps)\n : cloneDeep(componentInfo.fullProps);\n\n propsDefinitions = pipe(componentInfo.propsDefinition, [\n keys,\n map(k => ({...componentInfo.propsDefinition[k], ____name:k})),\n sortBy(\"____name\")\n ]);\n }\n}\n\n\nlet setProp = (name, value) => {\n const newProps = cloneDeep(props);\n\n let finalProps = isInstance ? newProps : cloneDeep(componentInfo.component.props);\n\n if(!isInstance) {\n const nowSet = [];\n for(let p of componentInfo.unsetProps) {\n if(!isEqual(newProps[p])(componentInfo.rootDefaultProps[p])) {\n finalProps[p] = newProps[p];\n nowSet.push(p);\n }\n }\n componentInfo.unsetProps = difference(nowSet)(componentInfo.unsetProps);\n }\n\n newProps[name] = value;\n finalProps[name] = value;\n props = newProps;\n if(validate(finalProps))\n onPropsChanged(finalProps);\n \n}\n \nconst validate = (finalProps) => {\n errors = validateProps(componentInfo.rootComponent, finalProps, [], false);\n onValidate(errors);\n return errors.length === 0;\n}\n\nconst fieldHasError = (propName) => \n some(e => e.propName === propName)(errors);\n\n</script>\n\n<div class=\"root\">\n\n <form class=\"uk-form-stacked form-root\">\n {#each propsDefinitions as propDef, index}\n \n <div class=\"prop-container\">\n\n <PropControl {setProp}\n {fieldHasError}\n {propDef}\n {props}\n {index}\n disabled={false} />\n\n </div>\n \n {/each}\n\n </form>\n\n\n \n\n</div>\n\n\n<style>\n\n.root {\n font-size:10pt;\n width: 100%;\n}\n\n.form-root {\n display: flex;\n flex-wrap: wrap;\n}\n\n.prop-container {\n flex: 1 1 auto;\n min-width: 250px;\n}\n\n</style>",
|
|
"<script>\n\nimport {store} from \"../builderStore\";\nimport getIcon from \"../common/icon\";\n\nexport let name = \"\";\nexport let label = \"\";\n\nlet navActive = \"\";\n\nstore.subscribe(db => {\n navActive = (db.activeNav === name ? \"active\" : \"\")\n});\n\nconst setActive = () => \n store.setActiveNav(name);\n\n</script>\n\n<div class=\"nav-item {navActive}\" on:click={setActive}>\n {label}\n</div>\n\n\n<style>\n\n.nav-item {\n padding: 1.5rem 1rem 0rem 1rem;\n font-size: .9rem;\n font-weight: bold;\n cursor: pointer;\n flex: 0 0 auto;\n}\n\n.nav-item:hover {\n background-color: var(--primary10);\n}\n\n.active {\n background-color: var(--primary10);\n}\n\n</style>",
|
|
"<script>\n\nimport getIcon from \"./icon\";\nexport let iconName;\nexport let actions = []; // [ {label: \"Action Name\", onclick: () => {...} } ]\nlet isDroppedDown = false;\n\n</script>\n\n\n<div class=\"root\" on:click={() => isDroppedDown = !isDroppedDown}>\n {@html getIcon(iconName)}\n \n <div class=\"dropdown-background\" on:click|stopPropagation={() => isDroppedDown = false} style=\"display: {isDroppedDown ? 'block' : 'none'}\"></div>\n\n <div class=\"dropdown-content\" style=\"display: {isDroppedDown ? 'inline-block' : 'none'}\">\n {#each actions as action}\n <div class=\"action-row\" on:click={action.onclick}>\n {action.label}\n </div>\n {/each}\n </div>\n \n</div>\n\n\n<style>\n\n.dropdown-background {\n position: fixed;\n top:0;\n left:0;\n width:100vw;\n height:100vh;\n}\n\n.root {\n cursor: pointer;\n z-index: 1;\n}\n\n.dropdown-content {\n position: absolute;\n background-color: var(--white);\n min-width: 160px;\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\n z-index: 1;\n font-weight: normal;\n border-style: solid;\n border-width: 1px;\n border-color: var(--secondary10);\n}\n\n.dropdown-content:not(:focus) {\n display: none;\n}\n\n.action-row {\n padding: 7px 10px;\n cursor:pointer;\n}\n\n.action-row:hover {\n background-color: var(--primary100);\n color:var(--white);\n}\n\n</style>",
|
|
"<script>\n\nimport {store} from \"../builderStore\";\nimport {cloneDeep} from \"lodash/fp\";\nimport getIcon from \"../common/icon\";\nexport let level = 0;\nexport let node;\nexport let type;\n\nlet navActive = \"\";\n$:icon = type===\"index\" ? \"list\" : \"file\";\n\nstore.subscribe(s => {\n if(s.currentNode)\n navActive = (s.activeNav === \"database\" && node.nodeId === s.currentNode.nodeId \n ? \"active\" : \"\")\n});\n\n</script>\n\n<div class=\"root\">\n <div class=\"title {navActive}\" on:click={() => store.selectExistingNode(node.nodeId)} style=\"padding-left: {20 + (level * 20)}px\">\n {@html getIcon(icon, 12)} <span style=\"margin-left: 1rem\">{node.name}</span>\n </div>\n {#if node.children}\n {#each node.children as child}\n <svelte:self node={child} \n level={level+1}\n type=\"record\"/>\n {/each}\n {/if}\n {#if node.indexes}\n {#each node.indexes as index}\n <svelte:self node={index} \n level={level+1}\n type=\"index\"/>\n {/each}\n {/if}\n</div>\n\n\n<style>\n\n.root { \n display: block;\n font-size: .9rem;\n width: 100%;\n cursor: pointer;\n color: var(--secondary50);\n font-weight: 500;\n}\n\n.title {\n padding-top: .5rem;\n padding-right: .5rem;\n}\n\n.title:hover {\n background-color: var(--secondary10);\n}\n\n.active {\n background-color: var(--primary10);\n}\n\n</style>",
|
|
"<script>\n\nimport {store} from \"../builderStore\";\nimport {cloneDeep} from \"lodash/fp\";\nexport let level = 0;\nexport let node;\n\n</script>\n\n<div class=\"root\">\n <div class=\"title\" on:click={() => store.selectExistingNode(node.nodeId)} style=\"padding-left: {20 + (level * 20)}px\">\n {node.name}\n </div>\n {#if node.children}\n {#each node.children as child}\n <svelte:self node={child} \n level={level+1}/>\n {/each}\n {/if}\n</div>\n\n\n<style>\n\n.root { \n display: block;\n font-size: .9rem;\n width: 100%;\n cursor: pointer;\n font-weight: bold;\n}\n\n.title {\n font: var(--fontblack);\n padding-top: 10px;\n padding-right: 5px;\n padding-bottom: 10px;\n color: var(--secondary100);\n}\n\n.title:hover {\n background-color: var(--secondary10);\n}\n\n</style>",
|
|
"<script>\n\nimport {store} from \"../builderStore\";\nimport getIcon from \"../common/icon\";\nimport Button from \"../common/Button.svelte\";\nimport Modal from \"../common/Modal.svelte\";\nimport TriggerView from \"./TriggerView.svelte\";\n\n\nexport let editingTrigger = null;\nexport let editingTriggerIsNew = true;\nexport let onTriggerEdit = (trigger) => {};\nexport let onTriggerDelete = (trigger) => {};\nexport let onTriggerSave = (trigger) => {};\nexport let onTriggerCancel = () => {};\n\n$: isEditing = (editingTrigger !== null); \n\nlet triggerEditingFinished = (trigger) => {\n \n if(trigger) {\n onTriggerSave(trigger)\n } else {\n onTriggerCancel();\n }\n}\n\n</script>\n\n<h3 class=\"title\">Triggers</h3>\n\n{#if $store.triggers}\n<table class=\"fields-table uk-table uk-table-small uk-table-striped\">\n <thead>\n <tr>\n <th>Event</th>\n <th>Action</th>\n <th>Condition</th>\n <th>Create Options</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n {#each $store.triggers as trigger}\n <tr>\n <td class=\"table-content\">{trigger.eventName}</td>\n <td class=\"table-content\">{trigger.actionName}</td>\n <td class=\"table-content\">{trigger.condition}</td>\n <td class=\"table-content\">{trigger.optionsCreator}</td>\n <td class=\"edit-button\">\n <span on:click={() => onTriggerEdit(trigger)}>{@html getIcon(\"edit\")}</span>\n <span on:click={() => onTriggerDelete(trigger)}>{@html getIcon(\"trash\")}</span>\n </td>\n </tr>\n {/each}\n </tbody>\n</table>\n{:else}\n(no triggers added)\n{/if}\n\n\n<Modal bind:isOpen={isEditing}>\n {#if isEditing}\n <TriggerView trigger={editingTrigger}\n allActions={$store.actions}\n allTriggers={$store.triggers}\n onFinished={triggerEditingFinished}\n isNew={editingTriggerIsNew}/>\n {/if} \n</Modal>\n\n<style>\n\n.edit-button {\n cursor:pointer;\n color: var(--secondary25);\n}\n\n.title {\n margin: 3rem 0rem 0rem 0rem;\n font-weight: 700;\n}\n\n.table-content {\n font-weight: 500;\n font-size: .9rem;\n}\n\ntr:hover .edit-button {\n color: var(--secondary75);\n}\n\n</style>",
|
|
"<script>\n\nimport getIcon from \"../common/icon\";\nimport {store} from \"../builderStore\";\nimport Button from \"../common/Button.svelte\";\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\nimport ActionView from \"./ActionView.svelte\";\nimport Modal from \"../common/Modal.svelte\";\nimport {pipe} from \"../common/core\";\nimport {keys, map, join} from \"lodash/fp\";\n\nexport let editingActionIsNew = false;\nexport let editingAction = null;\nexport let onActionEdit = (action) => {};\nexport let onActionDelete = (action) => {};\nexport let onActionSave = (action) => {};\nexport let onActionCancel = () => {};\n\n$: isEditing = (editingAction !== null); \n\nlet actionsArray = [];\nstore.subscribe(s => {\n actionsArray = pipe(s.actions, [\n keys,\n map(k => s.actions[k])\n ]);\n});\n\nlet getDefaultOptionsHtml = defaultOptions => \n pipe(defaultOptions, [\n keys,\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${JSON.stringify(defaultOptions[k])}`),\n join(\"<br>\")\n ]);\n\n\nlet actionEditingFinished = (action) => {\n \n if(action) {\n onActionSave(action)\n } else {\n onActionCancel();\n }\n}\n\n</script>\n\n<h3 class=\"title\">Actions</h3>\n\n{#if actionsArray}\n<table class=\"fields-table uk-table uk-table-small uk-table-striped\">\n <thead>\n <tr>\n <th >Description</th>\n <th>Behaviour Source</th>\n <th>Behaviour Name</th>\n <th>Default Options</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n {#each actionsArray as action}\n <tr>\n <td class=\"table-content\">{action.name}</td>\n <td class=\"table-content\">{action.behaviourSource}</td>\n <td class=\"table-content\">{action.behaviourName}</td>\n <td class=\"table-content\">{@html getDefaultOptionsHtml(action.initialOptions)}</td>\n <td class=\"edit-button\">\n <span on:click={() => onActionEdit(action)}>{@html getIcon(\"edit\")}</span>\n <span on:click={() => onActionDelete(action)}>{@html getIcon(\"trash\")}</span>\n </td>\n </tr>\n {/each}\n </tbody>\n</table>\n{:else}\n(no actions added)\n{/if}\n\n\n<Modal bind:isOpen={isEditing}>\n {#if isEditing}\n <ActionView action={editingAction}\n allActions={$store.actions}\n onFinished={actionEditingFinished}\n isNew={editingActionIsNew}/>\n {/if} \n</Modal>\n\n\n<style>\n\n.edit-button {\n cursor:pointer;\n color: var(--secondary25);\n}\n\ntr:hover .edit-button {\n color: var(--secondary75);\n}\n\n.title {\n margin: 3rem 0rem 0rem 0rem;\n font-weight: 700;\n}\n\n.table-content {\n font-weight: 500;\n font-size: .9rem;\n}\n\n</style>",
|
|
"<script>\nimport Button from \"../common/Button.svelte\";\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\nimport {store} from \"../builderStore\";\nimport Modal from \"../common/Modal.svelte\";\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\n\nexport let left;\nlet confirmDelete = false;\nconst openConfirmDelete = () => {\n confirmDelete = true;\n}\n\nconst deleteCurrentNode = () => {\n confirmDelete = false;\n store.deleteCurrentNode();\n}\n\n</script>\n\n<div class=\"root\" style=\"left: {left}\">\n\n <ButtonGroup>\n <Button color=\"secondary\" grouped on:click={store.saveCurrentNode}>\n {#if $store.currentNodeIsNew}\n Create\n {:else}\n Update\n {/if}\n </Button>\n\n {#if !$store.currentNodeIsNew}\n <Button color=\"tertiary\" grouped on:click={openConfirmDelete}>\n Delete\n </Button>\n {/if}\n </ButtonGroup>\n\n {#if !!$store.errors && $store.errors.length > 0}\n <div style=\"width: 500px\">\n <ErrorsBox errors={$store.errors}/>\n </div>\n {/if}\n \n <Modal bind:isOpen={confirmDelete}>\n <div style=\"margin: 10px 0px 20px 0px\">Are you sure you want to delete {$store.currentNode.name} ?</div>\n <div style=\"float:right\">\n <Button color=\"primary\" on:click={deleteCurrentNode}>Yes</Button>\n <Button color=\"secondary\" on:click={() => confirmDelete = false}>No</Button>\n </div>\n </Modal>\n</div>\n\n<style>\n\n.root {\n padding: 1.5rem;\n width: 100%;\n align-items: right;\n }\n\n</style>",
|
|
"<script>\n\nimport Textbox from \"../common/Textbox.svelte\";\nimport CodeArea from \"../common/CodeArea.svelte\";\nimport Button from \"../common/Button.svelte\";\nimport Dropdown from \"../common/Dropdown.svelte\";\nimport {store} from \"../builderStore\";\nimport {filter, some, map} from \"lodash/fp\";\nimport {hierarchy as hierarchyFunctions, common} from \"../../../core/src\";\n\nconst pipe = common.$;\n\nlet index;\nlet indexableRecords = [];\n\nstore.subscribe($store => {\n index = $store.currentNode;\n indexableRecords = pipe($store.hierarchy,[\n hierarchyFunctions.getFlattenedHierarchy,\n filter(hierarchyFunctions.isDecendant(index.parent())),\n filter(hierarchyFunctions.isRecord),\n map(n => ({\n node:n,\n isallowed: some(id => n.nodeId === id)(index.allowedRecordNodeIds)\n }))\n ]);\n});\n\nconst toggleAllowedRecord = record => {\n if(record.isallowed) {\n index.allowedRecordNodeIds = filter(id => id !== record.node.nodeId)\n (index.allowedRecordNodeIds);\n } else {\n index.allowedRecordNodeIds.push(record.node.nodeId);\n }\n};\n\n</script>\n\n<form class=\"uk-form-horizontal root\">\n <Textbox bind:text={index.name} label=\"Name\"/>\n \n <div class=\"allowed-records\">\n <div>Records to Index</div>\n {#each indexableRecords as rec}\n <input type=\"checkbox\" checked={rec.isallowed} on:change={() => toggleAllowedRecord(rec)}/>\n <span>{rec.node.name}</span>\n {/each}\n </div>\n\n\n <Dropdown label=\"Index Type\" bind:selected={index.indexType} options={[\"ancestor\", \"reference\"]} />\n\n <CodeArea bind:text={index.map} label=\"Map (javascript)\"/>\n <CodeArea bind:text={index.filter} label=\"Filter (javascript expression)\"/>\n <CodeArea bind:text={index.getShardName} label=\"Shard Name (javascript expression)\"/>\n\n \n</form>\n\n<style>\n\n.root {\n height: 100%;\n padding: 15px;\n}\n\n.allowed-records {\n margin: 20px 0px;\n}\n\n.allowed-records > span {\n margin-right:30px;\n}\n\n</style>",
|
|
"<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\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\nconst nameChanged = ev => {\r\n const pluralName = n => `${n}s`;\r\n if(record.collectionName === \"\") {\r\n record.collectionName = pluralName(ev.target.value);\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} on:change={nameChanged}/>\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 class=\"field-label\">{field.label}</div>\r\n <div style=\"font-size: 0.8em; 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={() => deleteField(field)}>{@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 fields added)\r\n {/if}\r\n\r\n {#if editingField}\r\n <Modal bind:isOpen={editingField} onClosed={() => onFinishedFieldEdit(false) }>\r\n <FieldView field={fieldToEdit} \r\n onFinished={onFinishedFieldEdit}\r\n allFields={record.fields} \r\n store={$store}/>\r\n </Modal>\r\n {/if}\r\n\r\n <h3 class=\"title\">\r\n Indexes \r\n </h3>\r\n\r\n {#each record.indexes as index}\r\n <div class=\"index-container\">\r\n <div class=\"index-name\">\r\n {index.name}\r\n <span style=\"margin-left: 7px\" on:click={() => editIndex(index)}>{@html getIcon(\"edit\")}</span>\r\n </div>\r\n <div class=\"index-field-row\">\r\n <span class=\"index-label\">records indexed: </span> \r\n <span>{getIndexAllowedRecords(index)}</span>\r\n <span class=\"index-label\" style=\"margin-left: 15px\">type:</span> \r\n <span>{index.indexType}</span>\r\n </div>\r\n <div class=\"index-field-row\">\r\n <span class=\"index-label\">map:</span>\r\n <code class=\"index-mapfilter\">{index.map}</code>\r\n </div>\r\n {#if index.filter}\r\n <div class=\"index-field-row\">\r\n <span class=\"index-label\">filter:</span>\r\n <code class=\"index-mapfilter\">{index.filter}</code>\r\n </div>\r\n {/if}\r\n </div>\r\n {:else}\r\n <div class=\"no-indexes\">\r\n No indexes added.\r\n </div>\r\n {/each}\r\n\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n padding: 2rem;\r\n}\r\n\r\n.settings-title {\r\n font-weight: 700;\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.recordkey {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: var(--primary100);\r\n}\r\n\r\n.fields-table {\r\n margin: 1rem 1rem 0rem 0rem;\r\n border-collapse:collapse;\r\n}\r\n\r\n.add-field-button {\r\n cursor:pointer;\r\n}\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--secondary25);\r\n}\r\n\r\n.edit-button:hover {\r\n cursor:pointer;\r\n color: var(--secondary75);\r\n}\r\n\r\nth {\r\n text-align: left; \r\n}\r\n\r\ntd {\r\n padding: 1rem 5rem 1rem 0rem;\r\n margin:0;\r\n font-size: 14px;\r\n font-weight: 500;\r\n\r\n}\r\n\r\n.field-label {\r\n font-size: 14px;\r\n font-weight: 500;\r\n}\r\n\r\nthead > tr {\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: var(--secondary75);\r\n margin-bottom: 20px;\r\n}\r\n\r\ntbody > tr {\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: var(--primary10);\r\n}\r\n\r\ntbody > tr:hover {\r\n background-color: var(--primary10);\r\n}\r\n\r\ntbody > tr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n.index-container {\r\n border-style: solid;\r\n border-width: 0 0 1px 0;\r\n border-color: var(--secondary25);\r\n padding: 10px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.index-label {\r\n color: var(--slate);\r\n}\r\n\r\n.index-name {\r\n font-weight: bold;\r\n color: var(--primary100);\r\n}\r\n\r\n.index-container code {\r\n margin: 0;\r\n display: inline;\r\n background-color: var(--primary10);\r\n color: var(--secondary100);\r\n padding:3px;\r\n}\r\n\r\n.index-field-row {\r\n margin: 1rem 0rem 0rem 0rem;\r\n}\r\n\r\n.no-indexes {\r\n margin: 1rem 0rem 0rem 0rem;\r\n font-family: var(--fontnormal);\r\n font-size: 14px;\r\n}\r\n</style>",
|
|
"<script>\n\nexport let checked=false;\nexport let label=\"\";\n\n</script>\n\n<input class=\"uk-checkbox\" type=\"checkbox\" bind:checked on:change />{label}\n\n<style>\n\ninput {\n margin-right:7px;\n}\n\n</style>",
|
|
"<script>\n\nimport Checkbox from \"../common/Checkbox.svelte\";\nimport Textbox from \"../common/Textbox.svelte\";\nimport Dropdown from \"../common/Dropdown.svelte\";\nimport EventListSelector from \"./EventListSelector.svelte\";\nimport StateBindingControl from \"./StateBindingControl.svelte\";\n\nexport let errors = [];\nexport let setProp = () => {};\nexport let fieldHasError =() => {};\nexport let propDef = {};\nexport let props = {};\nexport let disabled;\nexport let index;\n\n$: isOdd = (index % 2 !== 0);\n\nconst setComponentProp = (props) => {\n setProp(propDef.____name, props);\n}\n\n</script>\n\n\n<div class=\"root\" >\n\n {#if propDef.type === \"event\"}\n\n <div class=\"prop-label\">{propDef.____name}</div>\n <EventListSelector parentProps={props}\n {propDef}\n onValueChanged={setComponentProp} />\n\n {:else }\n\n <div class=\"prop-label\">{propDef.____name}</div>\n <StateBindingControl value={props[propDef.____name]}\n type={propDef.type}\n options={propDef.options}\n onChanged={v => setProp(propDef.____name, v)}/>\n\n {/if} \n\n</div>\n\n<style>\n\n.root {\n padding: 1rem 1rem 0rem 1rem;\n}\n\n.prop-label {\n font-size: 0.8rem;\n color: var(--secondary100);\n font-weight: bold;\n}\n\n</style>",
|
|
"<script>\nexport let errors = [];\n\n$:hasErrors = errors.length > 0;\n</script>\n\n{#if hasErrors}\n<div class=\"error-container\">\n {#each errors as error}\n <div class=\"error-row\">{error.field ? `${error.field}: ` : \"\"}{error.error}</div>\n {/each}\n</div>\n{/if}\n\n<style>\n\n.error-container {\n padding:10px;\n border-style: solid;\n border-color: var(--deletion100);\n border-radius: var(--borderradiusall);\n background: var(--deletion75);\n}\n\n.error-row {\n padding: 5px 0px;\n}\n\n</style>",
|
|
"<script>\n\nimport Textbox from \"../common/Textbox.svelte\";\nimport Button from \"../common/Button.svelte\";\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\nimport {cloneDeep, filter, keys,\nmap, isUndefined} from \"lodash/fp\";\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\nimport {validateActions, pipe} from \"../common/core\";\nimport getIcon from \"../common/icon\";\n\nexport let action;\nexport let onFinished = (action) => {};\nexport let allActions;\nexport let isNew = true;\n\nlet optKey = \"\";\nlet optValue = \"\";\n\nlet clonedAction = cloneDeep(action); \nlet initialOptions = pipe(action.initialOptions, [\n keys,\n map(k => ({key:k, value:action.initialOptions[k]}))\n]);\nlet errors = [];\n\nconst addNewOption = () => {\n\n if(optKey && optValue && isUndefined(clonedAction.initialOptions[optKey])) {\n clonedAction.initialOptions[optKey] = optValue;\n initialOptions = [...initialOptions, {\n key:optKey, value: optValue\n }];\n optKey = \"\";\n optValue = \"\";\n }\n}\n\nconst removeOption = (opt) => {\n if(opt) {\n delete clonedAction.initialOptions[opt.key]\n initialOptions = pipe(initialOptions, [\n filter(o => o.key !== opt.key)\n ]);\n }\n}\n\nconst save = () => {\n\n const newActionsList = [\n ...pipe(allActions ,[filter(a => a !== action)]),\n clonedAction]\n\n errors = pipe(newActionsList ,[\n validateActions,\n map(e => e.error)\n ]);\n\n if(errors.length === 0)\n onFinished(clonedAction);\n}\n\nconst cancel = () => {\n onFinished();\n}\n\n</script>\n\n<div class=\"root\">\n\n <ErrorsBox {errors} />\n\n <form class=\"uk-form-horizontal\">\n\n <Textbox label=\"Name\" bind:text={clonedAction.name} />\n <Textbox label=\"Behaviour Source\" bind:text={clonedAction.behaviourSource} />\n <Textbox label=\"Behaviour\" bind:text={clonedAction.behaviourName} />\n\n </form>\n\n <div class=\" uk-form-stacked\" style=\"margin-bottom: 20px\">\n <label class=\"uk-form-label\">Default Options</label>\n <div class=\"uk-grid-small\" uk-grid>\n <input class=\"uk-input uk-width-1-4 uk-margin-right\" placeholder=\"key\" bind:value={optKey} > \n <input class=\"uk-input uk-width-1-4 uk-margin-right\" placeholder=\"value\" bind:value={optValue} > \n <Button color=\"primary-outline uk-width-1-4\" on:click={addNewOption}>Add</Button>\n </div>\n <div style=\"margin-top: 10px\">\n {#each initialOptions as option}\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>\n {/each}\n </div>\n </div>\n\n <ButtonGroup>\n <Button color=\"secondary\" grouped on:click={save}>Save</Button>\n <Button color=\"tertiary\" grouped on:click={cancel}>Cancel</Button>\n </ButtonGroup>\n\n \n</div>\n\n\n<style>\n\n.root {\n padding: 2rem;\n border-radius: 2rem;\n}\n\n.uk-grid-small {\n padding: 1rem;\n}\n\n.option-container {\n border-style: dotted;\n border-width: 1px;\n border-color: var(--primary75);\n padding: 3px;\n margin-right: 5px;\n}\n\n</style>",
|
|
"<script>\n// todo: use https://ace.c9.io\nexport let text = \"\";\nexport let label = \"\";\n</script>\n\n<div>{label}</div>\n<textarea class=\"uk-textarea\" bind:value={text}></textarea>\n\n<style>\n\ntextarea {\n padding:3px;\n margin-top:5px;\n margin-bottom:10px;\n background: var(--lightslate);\n color: var(--white);\n font-family: 'Courier New', Courier, monospace;\n width:95%;\n height:100px;\n border-radius: 5px;\n}\n\n</style>",
|
|
"<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",
|
|
"<script>\nimport {\n isString\n} from \"lodash/fp\";\nimport IconButton from \"../common/IconButton.svelte\";\nimport {\n isBinding, getBinding, setBinding\n} from \"../common/binding\";\n\nexport let value=\"\";\nexport let onChanged= () => {};\nexport let type=\"\";\nexport let options=[];\n\nlet isBound=false;\nlet bindingPath=\"\";\nlet bindingFallbackValue=\"\";\nlet bindingSource=\"store\";\nlet isExpanded = false;\nlet forceIsBound = false;\nlet canOnlyBind = false;\n\n$: {\n canOnlyBind = type === \"state\";\n if(!forceIsBound && canOnlyBind)\n forceIsBound = true;\n\n isBound= forceIsBound || isBinding(value);\n\n if(isBound) {\n const binding = getBinding(value);\n bindingPath= binding.path;\n bindingFallbackValue= binding.fallback;\n bindingSource = binding.source || \"store\";\n } else {\n bindingPath=\"\";\n bindingFallbackValue=\"\";\n bindingSource=\"store\";\n }\n}\n\nconst clearBinding = () => {\n forceIsBound = false;\n onChanged(\"\");\n}\n\nconst bind = (path, fallback, source) => {\n if(!path) {\n clearBinding(\"\");\n return;\n }\n const binding = setBinding({path, fallback, source});\n onChanged(binding);\n}\n\nconst setBindingPath = ev => {\n forceIsBound = canOnlyBind;\n bind(ev.target.value, bindingFallbackValue, bindingSource)\n}\n\nconst setBindingFallback = ev => {\n bind(bindingPath, ev.target.value, bindingSource);\n}\n\nconst setBindingSource = ev => {\n bind(bindingPath, bindingFallbackValue, ev.target.value);\n}\n\nconst makeBinding = () => {\n forceIsBound=true;\n isExpanded=true;\n}\n\n</script>\n\n{#if isBound}\n<div>\n <div class=\"bound-header\">\n <div>{isExpanded ? \"\" : bindingPath}</div>\n <IconButton icon={isExpanded ? \"chevron-up\" : \"chevron-down\"} \n size=\"12\"\n on:click={() => isExpanded=!isExpanded}/>\n {#if !canOnlyBind}\n <IconButton icon=\"trash\" \n size=\"12\"\n on:click={clearBinding}/>\n {/if}\n </div>\n {#if isExpanded}\n <div>\n <div class=\"binding-prop-label\">Binding Path</div>\n <input class=\"uk-input uk-form-small\"\n value={bindingPath}\n on:change={setBindingPath} >\n <div class=\"binding-prop-label\">Fallback Value</div>\n <input class=\"uk-input uk-form-small\"\n value={bindingFallbackValue}\n on:change={setBindingFallback} >\n <div class=\"binding-prop-label\">Binding Source</div>\n <select class=\"uk-select uk-form-small\" \n value={bindingSource} \n on:change={setBindingSource}>\n\n <option>store</option>\n <option>context</option>\n\n </select>\n </div>\n {/if}\n\n</div>\n{:else}\n<div class=\"unbound-container\">\n\n {#if type === \"bool\"}\n\n <div>\n <IconButton icon={value == true ? \"check-square\" : \"square\"}\n size=\"19\"\n on:click={() => onChanged(!value)}/>\n </div>\n\n {:else if type === \"options\"}\n\n <select class=\"uk-select uk-form-small\" \n value={value} \n on:change={ev => onChanged(ev.target.value)}>\n {#each options as option}\n <option value={option}>{option}</option>\n {/each}\n </select>\n\n {:else}\n\n <input class=\"uk-input uk-form-small\"\n on:change={ev => onChanged(ev.target.value)}\n bind:value={value}\n style=\"flex: 1 0 auto;\" > \n\n\n {/if}\n <IconButton icon=\"link\" \n size=\"12\"\n on:click={makeBinding} />\n</div>\n{/if}\n\n\n<style>\n\n.unbound-container {\n display:flex;\n margin: .5rem 0rem .5rem 0rem;\n}\n\n.unbound-container > *:nth-child(1) {\n width:auto;\n flex: 1 0 auto;\n font-size: 0.8rem;\n color: var(--secondary100);\n border-radius: .2rem;\n}\n\n.bound-header {\n display: flex;\n}\n\n.bound-header > div:nth-child(1) {\n flex: 1 0 auto;\n width: 30px;\n color: var(--secondary50);\n padding-left: 5px;\n}\n\n.binding-prop-label {\n color: var(--secondary50);\n}\n\n\n</style>",
|
|
"<script>\nimport {join} from \"lodash/fp\";\n\nexport let values;\nexport let label;\n\nconst inputChanged = ev => {\n try {\n values = ev.target.value.split(\"\\n\");\n } catch(_) {\n values = [];\n }\n}\n\n$: valuesText = join(\"\\n\")(values);\n\n\n</script>\n\n\n<div class=\"uk-margin\">\n <label class=\"uk-form-label\">{label}</label>\n <div class=\"uk-form-controls\">\n <textarea value={valuesText} on:change={inputChanged} ></textarea>\n </div>\n</div>\n\n<style>\n\ntextarea {\n width:300px;\n height:200px;\n}\n\n</style>",
|
|
"<script>\r\nimport IconButton from \"../common/IconButton.svelte\";\r\nimport StateBindingControl from \"./StateBindingControl.svelte\";\r\nimport {\r\n find, map, keys, reduce, keyBy\r\n} from \"lodash/fp\";\r\nimport { pipe, userWithFullAccess } from \"../common/core\";\r\nimport { EVENT_TYPE_MEMBER_NAME, allHandlers } from \"../common/eventHandlers\";\r\nimport { store } from \"../builderStore\";\r\n\r\nexport let event;\r\nexport let onChanged;\r\nexport let onRemoved;\r\n\r\nlet events;\r\nlet eventType;\r\nlet parameters = [];\r\n\r\nstore.subscribe(s => {\r\n events = allHandlers(\r\n {hierarchy: s.hierarchy},\r\n userWithFullAccess({\r\n hierarchy: s.hierarchy,\r\n actions: keyBy(\"name\")(s.actions)\r\n })\r\n );\r\n});\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 <option></option>\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>",
|
|
"<script>\r\nimport EditComponentProps from \"./EditComponentProps.svelte\";\r\nimport ComponentsList from \"./ComponentsList.svelte\";\r\n\r\nlet selected=\"properties\";\r\n\r\nconst isSelected = tab => \r\n selected === tab;\r\n\r\nconst selectTab = tab => \r\n selected = tab;\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <div class=\"switcher\">\r\n\r\n <button \r\n class:selected={selected===\"properties\"}\r\n on:click={() => selectTab(\"properties\")}>\r\n Properties\r\n </button>\r\n\r\n <button \r\n class:selected={selected===\"components\"}\r\n on:click={() => selectTab(\"components\")}>\r\n Components\r\n </button>\r\n\r\n </div>\r\n\r\n <div class=\"panel\">\r\n {#if selected===\"properties\"}\r\n <EditComponentProps />\r\n {/if}\r\n\r\n {#if selected===\"components\"}\r\n <ComponentsList />\r\n {/if}\r\n </div>\r\n\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.switcher {\r\n flex: 0 0 auto;\r\n}\r\n\r\n.switcher > button {\r\n display: inline-block;\r\n background-color: rgba(0,0,0,0);\r\n border-style: solid;\r\n border-color: var(--slate);\r\n margin: 5px;\r\n padding: 5px;\r\n cursor: pointer;\r\n}\r\n\r\n.switcher > .selected {\r\n background-color: red;\r\n}\r\n\r\n.panel {\r\n flex: 1 1 auto;\r\n height: 0px;\r\n overflow-y: auto;\r\n}\r\n\r\n</style>"
|
|
],
|
|
"names": [],
|
|
"mappings": "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"
|
|
} |