mirror of https://github.com/Budibase/budibase.git
committed by
GitHub
25 changed files with 21945 additions and 0 deletions
@ -0,0 +1,5 @@ |
|||
.DS_Store |
|||
node_modules |
|||
yarn.lock |
|||
package-lock.json |
|||
dist/index.js |
|||
@ -0,0 +1,33 @@ |
|||
*Psst — looking for an app template? Go here --> [sveltejs/template](https://github.com/sveltejs/template)* |
|||
|
|||
--- |
|||
|
|||
# component-template |
|||
|
|||
A base for building shareable Svelte components. Clone it with [degit](https://github.com/Rich-Harris/degit): |
|||
|
|||
```bash |
|||
npx degit sveltejs/component-template my-new-component |
|||
cd my-new-component |
|||
npm install # or yarn |
|||
``` |
|||
|
|||
Your component's source code lives in `src/index.html`. |
|||
|
|||
TODO |
|||
|
|||
* [ ] some firm opinions about the best way to test components |
|||
* [ ] update `degit` so that it automates some of the setup work |
|||
|
|||
|
|||
## Setting up |
|||
|
|||
* Run `npm init` (or `yarn init`) |
|||
* Replace this README with your own |
|||
|
|||
|
|||
## Consuming components |
|||
|
|||
Your package.json has a `"svelte"` field pointing to `src/index.html`, which allows Svelte apps to import the source code directly, if they are using a bundler plugin like [rollup-plugin-svelte](https://github.com/rollup/rollup-plugin-svelte) or [svelte-loader](https://github.com/sveltejs/svelte-loader) (where [`resolve.mainFields`](https://webpack.js.org/configuration/resolve/#resolve-mainfields) in your webpack config includes `"svelte"`). **This is recommended.** |
|||
|
|||
For everyone else, `npm run build` will bundle your component's source code into a plain JavaScript module (`index.mjs`) and a UMD script (`index.js`). This will happen automatically when you publish your component to npm, courtesy of the `prepublishOnly` hook in package.json. |
|||
@ -0,0 +1,12 @@ |
|||
{ |
|||
"_lib": "./dist/index.js", |
|||
"h1": { |
|||
"name": "H1", |
|||
"description": "An HTML H1 tag", |
|||
"props" : { |
|||
"text": "string", |
|||
"className":"string" |
|||
}, |
|||
"tags": [] |
|||
} |
|||
} |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,37 @@ |
|||
{ |
|||
"name": "@budibase/materialdesign-components", |
|||
"svelte": "src/index.svelte", |
|||
"main": "dist/index.js", |
|||
"module": "dist/index.js", |
|||
"scripts": { |
|||
"build": "rollup -c && rollup -c rollup.generatorsconfig.js", |
|||
"prepublishOnly": "npm run build", |
|||
"testbuild": "rollup -w -c rollup.testconfig.js", |
|||
"dev": "run-p start:dev testbuild", |
|||
"start:dev": "sirv public --single --dev", |
|||
"publishdev": "yarn build && node ./scripts/publishDev.js" |
|||
}, |
|||
"devDependencies": { |
|||
"@budibase/client": "^0.0.15", |
|||
"@nx-js/compiler-util": "^2.0.0", |
|||
"fs-extra": "^8.1.0", |
|||
"lodash": "^4.17.15", |
|||
"npm-run-all": "^4.1.5", |
|||
"rollup": "^1.11.0", |
|||
"rollup-plugin-commonjs": "^10.0.2", |
|||
"rollup-plugin-json": "^4.0.0", |
|||
"rollup-plugin-livereload": "^1.0.1", |
|||
"rollup-plugin-node-resolve": "^5.0.0", |
|||
"rollup-plugin-svelte": "^5.0.0", |
|||
"rollup-plugin-terser": "^5.1.1", |
|||
"shortid": "^2.2.15", |
|||
"sirv-cli": "^0.4.4", |
|||
"svelte": "^3.12.1" |
|||
}, |
|||
"keywords": [ |
|||
"svelte" |
|||
], |
|||
"version": "0.0.15", |
|||
"license": "MIT", |
|||
"gitHead": "115189f72a850bfb52b65ec61d932531bf327072" |
|||
} |
|||
|
After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,3 @@ |
|||
#current_component.svelte-uuhis1{height:100%;width:100%} |
|||
|
|||
/*# sourceMappingURL=bundle.css.map */ |
|||
@ -0,0 +1,12 @@ |
|||
{ |
|||
"version": 3, |
|||
"file": "bundle.css", |
|||
"sources": [ |
|||
"..\\src\\Test\\TestApp.svelte" |
|||
], |
|||
"sourcesContent": [ |
|||
"<script>\r\nimport createApp from \"./createApp\";\r\nimport { props } from \"./props\";\r\n\r\nlet _bb;\r\n\r\nconst _appPromise = createApp();\r\n_appPromise.then(a => _bb = a);\r\n\r\nconst testProps = props.justAnH1;\r\n\r\nlet currentComponent;\r\n\r\n$: {\r\n if(_bb && currentComponent) {\r\n _bb.hydrateChildren(testProps._children, currentComponent);\r\n }\r\n}\r\n\r\n\r\n\r\n</script>\r\n\r\n{#await _appPromise}\r\nloading\r\n{:then _bb}\r\n\r\n<div id=\"current_component\" bind:this={currentComponent}>\r\n</div>\r\n\r\n{/await}\r\n\r\n\r\n<style>\r\n#current_component {\r\n height: 100%;\r\n width: 100%;\r\n}\r\n</style>\r\n\r\n" |
|||
], |
|||
"names": [], |
|||
"mappings": "AAkCA,kBAAkB,cAAC,CAAC,AAChB,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,AACf,CAAC" |
|||
} |
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
window['##BUDIBASE_APPDEFINITION##'] = {"hierarchy":{"name":"root","type":"root","children":[{"name":"customer","type":"record","fields":[{"name":"name","type":"string","typeOptions":{"maxLength":1000,"values":null,"allowDeclaredValuesOnly":false},"label":"name","getInitialValue":"default","getUndefinedValue":"default"}],"children":[{"name":"invoiceyooo","type":"record","fields":[{"name":"amount","type":"number","typeOptions":{"minValue":99999999999,"maxValue":99999999999,"decimalPlaces":2},"label":"amount","getInitialValue":"default","getUndefinedValue":"default"}],"children":[],"validationRules":[],"nodeId":2,"indexes":[],"allidsShardFactor":1,"collectionName":"invoices","isSingle":false}],"validationRules":[],"nodeId":1,"indexes":[{"name":"customer_invoices","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[2],"nodeId":5}],"allidsShardFactor":64,"collectionName":"customers","isSingle":false}],"pathMaps":[],"indexes":[{"name":"Yeo index","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[1],"nodeId":4},{"name":"everyones_invoices","type":"index","map":"return {...record};","filter":"","indexType":"ancestor","getShardName":"","getSortKey":"record.id","aggregateGroups":[],"allowedRecordNodeIds":[2],"nodeId":6}],"nodeId":0},"componentLibraries":["budibase-standard-components"],"appRootPath":"/testApp2","props":{}} |
|||
|
After Width: | Height: | Size: 3.1 KiB |
@ -0,0 +1,62 @@ |
|||
html, body { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
|
|||
body { |
|||
color: #333; |
|||
margin: 0; |
|||
padding: 0; |
|||
box-sizing: border-box; |
|||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; |
|||
} |
|||
|
|||
a { |
|||
color: rgb(0,100,200); |
|||
text-decoration: none; |
|||
} |
|||
|
|||
a:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
a:visited { |
|||
color: rgb(0,80,160); |
|||
} |
|||
|
|||
label { |
|||
display: block; |
|||
} |
|||
|
|||
input, button, select, textarea { |
|||
font-family: inherit; |
|||
font-size: inherit; |
|||
padding: 0.4em; |
|||
margin: 0 0 0.5em 0; |
|||
box-sizing: border-box; |
|||
border: 1px solid #ccc; |
|||
border-radius: 2px; |
|||
} |
|||
|
|||
input:disabled { |
|||
color: #ccc; |
|||
} |
|||
|
|||
input[type="range"] { |
|||
height: 0; |
|||
} |
|||
|
|||
button { |
|||
color: #333; |
|||
background-color: #f4f4f4; |
|||
outline: none; |
|||
} |
|||
|
|||
button:active { |
|||
background-color: #ddd; |
|||
} |
|||
|
|||
button:focus { |
|||
border-color: #666; |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
<!doctype html> |
|||
<html> |
|||
<head> |
|||
<meta charset='utf8'> |
|||
<meta name='viewport' content='width=device-width'> |
|||
|
|||
<title>Svelte app</title> |
|||
|
|||
<link rel='icon' type='image/png' href='/favicon.png'> |
|||
<link rel='stylesheet' href='/global.css'> |
|||
<link rel='stylesheet' href='/bundle.css'> |
|||
|
|||
</head> |
|||
|
|||
<body> |
|||
<script src='/bundle.js'></script> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,20 @@ |
|||
import svelte from 'rollup-plugin-svelte'; |
|||
import resolve from 'rollup-plugin-node-resolve'; |
|||
|
|||
export default { |
|||
input: 'src/index.js', |
|||
output: [ |
|||
{ |
|||
file: "dist/index.js", |
|||
format: 'esm', |
|||
name:"budibaseStandardComponents", |
|||
sourcemap: "inline" |
|||
} |
|||
], |
|||
plugins: [ |
|||
svelte({ |
|||
hydratable:true |
|||
}), |
|||
resolve() |
|||
] |
|||
}; |
|||
@ -0,0 +1,89 @@ |
|||
import svelte from 'rollup-plugin-svelte'; |
|||
import resolve from 'rollup-plugin-node-resolve'; |
|||
import commonjs from 'rollup-plugin-commonjs'; |
|||
import livereload from 'rollup-plugin-livereload'; |
|||
import { terser } from 'rollup-plugin-terser'; |
|||
import json from 'rollup-plugin-json'; |
|||
|
|||
const production = !process.env.ROLLUP_WATCH; |
|||
|
|||
const lodash_fp_exports = [ |
|||
"find", "isUndefined", "split", "max", |
|||
"last", "union", "reduce", "isObject", |
|||
"cloneDeep", "some", "isArray", "map", |
|||
"filter", "keys", "isFunction", "isEmpty", |
|||
"countBy", "join", "includes", "flatten", |
|||
"constant", "first", "intersection", "take", |
|||
"has", "mapValues", "isString", "isBoolean", |
|||
"isNull", "isNumber", "isObjectLike", "isDate", |
|||
"clone", "values", "keyBy", "isNaN", |
|||
"isInteger", "toNumber"]; |
|||
|
|||
const lodash_exports = [ |
|||
"flow", "head", "find","each", |
|||
"tail", "findIndex", "startsWith", |
|||
"dropRight", "takeRight", |
|||
"trim", "split", "replace", |
|||
"merge", "assign"]; |
|||
|
|||
const coreExternal = [ |
|||
"lodash", "lodash/fp", "date-fns", |
|||
"lunr", "safe-buffer", "shortid", |
|||
"@nx-js/compiler-util", "bcryptjs" |
|||
]; |
|||
|
|||
export default { |
|||
input: 'src/Test/testMain.js', |
|||
output: { |
|||
sourcemap: true, |
|||
format: 'iife', |
|||
name: 'app', |
|||
file: 'public/bundle.js' |
|||
}, |
|||
plugins: [ |
|||
svelte({ |
|||
// enable run-time checks when not in production
|
|||
dev: !production, |
|||
// we'll extract any component CSS out into
|
|||
// a separate file — better for performance
|
|||
css: css => { |
|||
css.write('public/bundle.css'); |
|||
}, |
|||
|
|||
hydratable:true |
|||
}), |
|||
|
|||
// If you have external dependencies installed from
|
|||
// npm, you'll most likely need these plugins. In
|
|||
// some cases you'll need additional configuration —
|
|||
// consult the documentation for details:
|
|||
// https://github.com/rollup/rollup-plugin-commonjs
|
|||
resolve({ |
|||
browser: true, |
|||
dedupe: importee => { |
|||
return importee === 'svelte' |
|||
|| importee.startsWith('svelte/') |
|||
|| coreExternal.includes(importee); |
|||
} |
|||
}), |
|||
commonjs({ |
|||
namedExports: { |
|||
"lodash/fp": lodash_fp_exports, |
|||
"lodash":lodash_exports, |
|||
"shortid": ["generate"] |
|||
} |
|||
}), |
|||
json(), |
|||
|
|||
// Watch the `public` directory and refresh the
|
|||
// browser on changes when not in production
|
|||
!production && livereload('public'), |
|||
|
|||
// If we're building for production (npm run build
|
|||
// instead of npm run dev), minify
|
|||
production && terser() |
|||
], |
|||
watch: { |
|||
clearScreen: false |
|||
} |
|||
}; |
|||
@ -0,0 +1,63 @@ |
|||
const { readdir, stat, copyFile } = require("fs-extra"); |
|||
const { constants } = require("fs"); |
|||
const { join, basename } = require("path"); |
|||
const serverConfig = require("../../server/config")(); |
|||
|
|||
const packagesFolder = ".."; |
|||
|
|||
const jsFile = dir => join(dir, "index.js"); |
|||
const generatorsFile = dir => join(dir, "generators.js"); |
|||
const jsMapFile = dir => join(dir, "index.js.map"); |
|||
const sourceJs = jsFile("dist"); |
|||
const sourceJsMap = jsMapFile("dist"); |
|||
const componentsFile = "components.json"; |
|||
const sourceGenerators = generatorsFile("dist"); |
|||
|
|||
const appPackages = join(packagesFolder, "server", serverConfig.latestPackagesFolder); |
|||
|
|||
const publicMain = appName => join(appPackages, appName, "public", "main", "lib", "node_modules", "@budibase", "standard-components"); |
|||
const publicUnauth = appName => join(appPackages, appName, "public", "unauthenticated", "lib", "node_modules", "@budibase", "standard-components"); |
|||
const nodeModulesDist = appName => join(appPackages, appName, "node_modules", "@budibase", "standard-components", "dist"); |
|||
const nodeModules = appName => join(appPackages, appName, "node_modules", "@budibase", "standard-components"); |
|||
|
|||
(async () => { |
|||
|
|||
const apps = await readdir(appPackages); |
|||
|
|||
const copySource = file => async toDir => { |
|||
const dest = join(toDir, basename(file)); |
|||
try { |
|||
await copyFile(file, dest, constants.COPYFILE_FICLONE); |
|||
console.log(`COPIED ${file} to ${dest}`); |
|||
} catch(e) { |
|||
console.log(`COPY FAILED ${file} to ${dest}: ${e}`); |
|||
} |
|||
} |
|||
|
|||
const copySourceJs = copySource(sourceJs); |
|||
const copySourceJsMap = copySource(sourceJsMap); |
|||
const copyGenerators = copySource(sourceGenerators); |
|||
const copyComponentsJson = copySource(componentsFile); |
|||
|
|||
|
|||
for(let app of apps) { |
|||
if(app === ".data") continue; |
|||
if(!(await stat(join(appPackages, app))).isDirectory()) continue; |
|||
|
|||
await copySourceJs(nodeModulesDist(app)); |
|||
await copySourceJsMap(nodeModulesDist(app)); |
|||
await copyGenerators(nodeModulesDist(app)); |
|||
|
|||
await copyComponentsJson(nodeModules(app)); |
|||
|
|||
await copySourceJs(join(publicMain(app), "dist")); |
|||
await copySourceJsMap(join(publicMain(app), "dist")); |
|||
await copyGenerators(join(publicMain(app), "dist")); |
|||
|
|||
|
|||
await copySourceJs(join(publicUnauth(app), "dist")); |
|||
await copySourceJsMap(join(publicUnauth(app), "dist")); |
|||
await copyGenerators(join(publicUnauth(app), "dist")); |
|||
} |
|||
|
|||
})(); |
|||
@ -0,0 +1,12 @@ |
|||
<script> |
|||
export let text=""; |
|||
export let className="" |
|||
|
|||
export let _bb; |
|||
|
|||
|
|||
</script> |
|||
|
|||
<h1 class={className}> |
|||
{text} |
|||
</h1> |
|||
@ -0,0 +1,40 @@ |
|||
<script> |
|||
import createApp from "./createApp"; |
|||
import { props } from "./props"; |
|||
|
|||
let _bb; |
|||
|
|||
const _appPromise = createApp(); |
|||
_appPromise.then(a => _bb = a); |
|||
|
|||
const testProps = props.justAnH1; |
|||
|
|||
let currentComponent; |
|||
|
|||
$: { |
|||
if(_bb && currentComponent) { |
|||
_bb.hydrateChildren(testProps._children, currentComponent); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
</script> |
|||
|
|||
{#await _appPromise} |
|||
loading |
|||
{:then _bb} |
|||
|
|||
<div id="current_component" bind:this={currentComponent}> |
|||
</div> |
|||
|
|||
{/await} |
|||
|
|||
|
|||
<style> |
|||
#current_component { |
|||
height: 100%; |
|||
width: 100%; |
|||
} |
|||
</style> |
|||
|
|||
@ -0,0 +1,18 @@ |
|||
import { createApp } from "@budibase/client/src/createApp"; |
|||
import componentsJson from "../../components.json"; |
|||
import packageJson from "../../package.json"; |
|||
|
|||
export default async () => { |
|||
|
|||
const components = {...componentsJson}; |
|||
delete components._lib; |
|||
|
|||
componentLibraries[packageJson.name] = components; |
|||
|
|||
const appDef = {hierarchy:{}, actions:{}}; |
|||
const user = {name:"yeo", permissions:[]}; |
|||
|
|||
var app = createApp(componentLibraries, appDef, user); |
|||
return app; |
|||
|
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
|
|||
export const props = { |
|||
|
|||
justAnH1 : { |
|||
_component:"@budibase/materialdesign-components/h1", |
|||
text: "This is a Header" |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
import App from './TestApp.svelte'; |
|||
|
|||
const app = new App({ |
|||
target: document.body, |
|||
}); |
|||
|
|||
export default app; |
|||
@ -0,0 +1,9 @@ |
|||
export const buildStyle = (styles) => { |
|||
let str = ""; |
|||
for(let s in styles) { |
|||
if(styles[s]) { |
|||
str += `${s}: ${styles[s]}; ` |
|||
} |
|||
} |
|||
return str; |
|||
} |
|||
@ -0,0 +1 @@ |
|||
export {default as h1} from "./H1.svelte"; |
|||
Loading…
Reference in new issue