lightview 1.7.1-b → 1.8.1-b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/components/chart/chart.html +7 -5
- package/components/chart/example.html +3 -5
- package/components/chart.html +67 -65
- package/components/components.js +29 -9
- package/components/gantt/example.html +2 -7
- package/components/gantt/gantt.html +33 -26
- package/components/gauge/example.html +1 -1
- package/components/gauge/gauge.html +20 -0
- package/components/gauge.html +47 -44
- package/components/orgchart/example.html +25 -0
- package/components/orgchart/orgchart.html +41 -0
- package/components/repl/code-editor.html +64 -0
- package/components/repl/editor.html +37 -0
- package/components/repl/editorjs-inline-tool/index.js +3 -0
- package/components/repl/editorjs-inline-tool/inline-tools.js +28 -0
- package/components/repl/editorjs-inline-tool/tool.js +175 -0
- package/components/repl/repl-with-wysiwyg.html +355 -0
- package/components/repl/repl.html +345 -0
- package/components/repl/sup.js +44 -0
- package/components/repl/wysiwyg-repl.html +258 -0
- package/components/timeline/example.html +33 -0
- package/components/timeline/timeline.html +44 -0
- package/examples/anchor.html +11 -0
- package/examples/chart.html +22 -54
- package/examples/counter.html +5 -3
- package/examples/counter2.html +26 -0
- package/examples/directives.html +19 -17
- package/examples/forgeinform.html +45 -43
- package/examples/form.html +22 -20
- package/examples/gauge.html +2 -0
- package/examples/invalid-template-literals.html +5 -3
- package/examples/message.html +10 -4
- package/examples/nested.html +1 -1
- package/examples/object-bound-form.html +12 -10
- package/examples/remote.html +17 -15
- package/examples/shared.html +41 -0
- package/examples/xor.html +21 -19
- package/lightview.js +138 -90
- package/package.json +7 -2
- package/sites/client.html +48 -0
- package/sites/index.html +247 -0
- package/test/basic.html +17 -16
- package/test/basic.test.mjs +0 -10
- package/test/extended.html +17 -20
- package/types.js +10 -1
- package/unsplash.key +1 -0
- package/components/gauge/guage.html +0 -19
- package/examples/duration.html +0 -279
package/sites/index.html
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Lightview:Sites</title>
|
|
6
|
+
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
|
7
|
+
<script src="https://unpkg.com/turndown/dist/turndown.js"></script>
|
|
8
|
+
<script src="https://cdn.tiny.cloud/1/y2ts772rioh7s7bmlcosnef03zs6kpedu5ovw1sdfzslurej/tinymce/6/tinymce.min.js" referrerpolicy="origin"></script>
|
|
9
|
+
<script src="https://unpkg.com/@isomorphic-git/lightning-fs"></script>
|
|
10
|
+
<script src="https://unpkg.com/isomorphic-git"></script>
|
|
11
|
+
<script src="https://unpkg.com/peerjs@1.3.2/dist/peerjs.min.js"></script>
|
|
12
|
+
<script type="module">
|
|
13
|
+
const fs = new LightningFS('my-app');
|
|
14
|
+
const files = await git.listFiles({ fs, dir: '/' });
|
|
15
|
+
console.log(files);
|
|
16
|
+
window.fs = fs.promises;
|
|
17
|
+
</script>
|
|
18
|
+
<script>
|
|
19
|
+
var server = new Peer("anywhichway1");
|
|
20
|
+
// on open will be launch when you successfully connect to PeerServer
|
|
21
|
+
server.on('open', (id) => {
|
|
22
|
+
console.log(id);
|
|
23
|
+
});
|
|
24
|
+
server.on("connection",(conn) => {
|
|
25
|
+
conn.on('data', async (data) => {
|
|
26
|
+
console.log('Received', data);
|
|
27
|
+
let content = await fs.readFile("/test.html",{encoding:"utf8"});
|
|
28
|
+
const client = server.connect(conn.peer);
|
|
29
|
+
client.on("open",() => {
|
|
30
|
+
content += `<p>${new Date().toISOString()}</p>`
|
|
31
|
+
client.send(content);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//const client = server.connect(conn.peer);
|
|
35
|
+
})
|
|
36
|
+
</script>
|
|
37
|
+
<script src="../lightview.js?as=x-body"></script>
|
|
38
|
+
</head>
|
|
39
|
+
<body style="display:flex;flex-direction:row;min-height:98vh;margin: 10px">
|
|
40
|
+
<div style="width:200px;min-height:100%;border:1px solid;padding-left:10px;padding-bottom:10px">
|
|
41
|
+
<div style="width:100%;"><label for="hamburger" style="float:left" l-on:click="${onTabClick}">hamburger</label><br></br>Files</div>
|
|
42
|
+
<div id="files"></div>
|
|
43
|
+
</div>
|
|
44
|
+
<div id="content" style="flex:auto;min-height:100%;border:1px solid;padding:10px">
|
|
45
|
+
<div style="display:flex;flex-direction:column;min-height:100%">
|
|
46
|
+
<div id="tabs" style="flex-grow:0;width:100%;border:1px;padding-bottom:5px;display:none">
|
|
47
|
+
<label for="markdown" l-on:click="${onTabClick}">Markdown</label>
|
|
48
|
+
<label for="html" l-on:click="${onTabClick}">HTML</label>
|
|
49
|
+
<label for="css" l-on:click="${onTabClick}">Style</label>
|
|
50
|
+
<label for="script" l-on:click="${onTabClick}">Script</label>
|
|
51
|
+
<label for="head" l-on:click="${onTabClick}">Head</label>
|
|
52
|
+
<label for="preview" l-on:click="${onTabClick}">Preview</label>
|
|
53
|
+
</div>
|
|
54
|
+
<textarea id="markdown" style="flex-grow:1;padding-right:2px;;display:none">${bodyMarkdown}</textarea>
|
|
55
|
+
<textarea id="html" style="flex-grow:1;padding-right:2px;display:none">${bodyHTML}</textarea>
|
|
56
|
+
<textarea id="css" style="flex-grow:1;display:none">${cssText}</textarea>
|
|
57
|
+
<textarea id="script" style="flex-grow:1;display:none">${scriptText}</textarea>
|
|
58
|
+
<textarea id="head" style="flex-grow:1;display:none">${headText}</textarea>
|
|
59
|
+
<div id="preview" style="flex-grow:1;display:none"></div>
|
|
60
|
+
<div id="hamburger" style="flex-grow:1;display:none">options</div>
|
|
61
|
+
<div id="wysiwyg" style="flex-grow:1;width:100%;border:1px solid">
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
<style id="style"></style>
|
|
66
|
+
<script type="lightview/module">
|
|
67
|
+
const turndownService = new TurndownService({headingStyle:"atx",codeBlockStyle:"fenced",emDelimiter:"*"}),
|
|
68
|
+
fs = new LightningFS('my-app').promises;
|
|
69
|
+
turndownService.keep(() => true);
|
|
70
|
+
|
|
71
|
+
const {html,css,script} = await import("../types.js");
|
|
72
|
+
self.variables({
|
|
73
|
+
onTabClick:"function"
|
|
74
|
+
});
|
|
75
|
+
self.variables({
|
|
76
|
+
bodyMarkdown:html,
|
|
77
|
+
bodyHTML:html,
|
|
78
|
+
cssText:css,
|
|
79
|
+
scriptText:script,
|
|
80
|
+
headHTML:html
|
|
81
|
+
},{reactive});
|
|
82
|
+
|
|
83
|
+
let fragment;
|
|
84
|
+
try {
|
|
85
|
+
const fullHTML = await fs.readFile("/test.html",{encoding:"utf8"}),
|
|
86
|
+
parser = new DOMParser();
|
|
87
|
+
fragment = parser.parseFromString(fullHTML||"","text/html");
|
|
88
|
+
} catch(e) {
|
|
89
|
+
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const body_el = fragment?.body,
|
|
93
|
+
style_el = fragment?.querySelector("style"),
|
|
94
|
+
script_el = fragment?.querySelector("script");
|
|
95
|
+
if(style_el) style_el.remove();
|
|
96
|
+
if(script_el) script_el.remove();
|
|
97
|
+
|
|
98
|
+
bodyHTML = body_el?.innerHTML || "";
|
|
99
|
+
bodyMarkdown = "";
|
|
100
|
+
cssText = style_el?.innerHTML || "";
|
|
101
|
+
scriptText = script_el?.innerHTML || "",
|
|
102
|
+
headHTML = fragment?.head.innerHTML || "";
|
|
103
|
+
|
|
104
|
+
const tabs = [...self.querySelectorAll("label[for]")]
|
|
105
|
+
.map((label) => {
|
|
106
|
+
const id = label.getAttribute("for");
|
|
107
|
+
return [id,self.getElementById(id),label];
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
onTabClick = (event) => {
|
|
111
|
+
const targetid = event.target.getAttribute("for");
|
|
112
|
+
tabs.forEach(([id,el,label]) => {
|
|
113
|
+
if(id===targetid) {
|
|
114
|
+
el.style.display = "unset";
|
|
115
|
+
label.style.borderBottom = "solid";
|
|
116
|
+
} else {
|
|
117
|
+
el.style.display = "none";
|
|
118
|
+
label.style.borderBottom = "none";
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
if(targetid==="preview") doPreview();
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const doPreview = () => {
|
|
125
|
+
const template = document.createElement("template");
|
|
126
|
+
template.innerHTML = "<style>" + cssText + "</style>" + htmlEl.value + '<script type="lightview/module">' + scriptText + "<" + "/script>";
|
|
127
|
+
const component = window.customElements.get("x-preview");
|
|
128
|
+
if(component) { component.setTemplateNode(template); }
|
|
129
|
+
else { Lightview.createComponent("x-preview",template); }
|
|
130
|
+
previewEl.innerHTML = "<x-preview></x-preview>";
|
|
131
|
+
fs.writeFile("/test.html",template.innerHTML,{encoding:"utf8"},()=>{});
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const wysywigEl = self.getElementById("wysiwyg"),
|
|
135
|
+
markdownEl = self.getElementById("markdown"),
|
|
136
|
+
htmlEl = self.getElementById("html"),
|
|
137
|
+
tabsEl = self.getElementById("tabs"),
|
|
138
|
+
styleEl = self.getElementById("style"),
|
|
139
|
+
previewEl = self.getElementById("preview");
|
|
140
|
+
|
|
141
|
+
let prevtext; // prevents indirect recursion
|
|
142
|
+
observe(() => {
|
|
143
|
+
const text = turndownService.turndown(bodyHTML).trim();
|
|
144
|
+
if(text && text!==prevtext) {
|
|
145
|
+
bodyMarkdown = markdownEl.innerHTML = prevtext = text;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
let prevhtml; // prevents indirect recursion
|
|
150
|
+
observe(() => {
|
|
151
|
+
const html = marked.parse(bodyMarkdown).trim();
|
|
152
|
+
if(html && html!==prevhtml) {
|
|
153
|
+
bodyHTML = htmlEl.innerText = prevhtml = html;
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
observe(() => {
|
|
158
|
+
const dummy = cssText;
|
|
159
|
+
if(tinymce.activeEditor) {
|
|
160
|
+
tinymce.activeEditor.destroy();
|
|
161
|
+
initMCE();
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
let advEdit = false;
|
|
166
|
+
const toggleAdvEdit = () => {
|
|
167
|
+
advEdit = !advEdit;
|
|
168
|
+
if(advEdit) {
|
|
169
|
+
tabsEl.style.display = "unset";
|
|
170
|
+
} else {
|
|
171
|
+
tabsEl.style.display = "none";
|
|
172
|
+
}
|
|
173
|
+
tabs.forEach(([_,el,label]) => {
|
|
174
|
+
if(advEdit && el===markdownEl) {
|
|
175
|
+
el.style.display = "unset";
|
|
176
|
+
label.style.borderBottom = "solid";
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
el.style.display = "none";
|
|
180
|
+
label.style.borderBottom = "none";
|
|
181
|
+
});
|
|
182
|
+
initMCE();
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const initMCE = () => {
|
|
186
|
+
tinymce.init({
|
|
187
|
+
target: wysywigEl,
|
|
188
|
+
content_style: cssText,
|
|
189
|
+
setup: (editor) => {
|
|
190
|
+
editor.ui.registry.addButton('advancedEdit', {
|
|
191
|
+
text: 'AdvEdit',
|
|
192
|
+
onAction: () => {
|
|
193
|
+
editor.destroy();
|
|
194
|
+
toggleAdvEdit();
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
editor.on("init",() => {
|
|
198
|
+
observe(()=> {
|
|
199
|
+
const html = editor.getContent();
|
|
200
|
+
if(html !== bodyHTML) {
|
|
201
|
+
editor.setContent(bodyHTML);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
["input","FormatApply","FormatRemove"]
|
|
206
|
+
.forEach((event) => {
|
|
207
|
+
editor.on(event,() => {
|
|
208
|
+
const html = editor.getContent();
|
|
209
|
+
if(!bodyHTML || (bodyHTML !== html)) {
|
|
210
|
+
bodyHTML = htmlEl.innerText = html;
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
},
|
|
215
|
+
plugins: "a11ychecker advcode casechange export formatpainter image editimage linkchecker autolink lists checklist media mediaembed pageembed powerpaste searchreplace table advtable tableofcontents tinycomments tinymcespellchecker",
|
|
216
|
+
toolbar: "undo redo | addcomment showcomments | h1 h2 h3 h4 formatselect casechange bullist numlist checklist | advancedEdit",
|
|
217
|
+
toolbar_mode: "floating",
|
|
218
|
+
tinycomments_mode: "embedded",
|
|
219
|
+
tinycomments_author: "Author name",
|
|
220
|
+
removed_menuitems: 'fontsizes, fontformats, forecolor, backcolor, lineheight, inline, inserttable code undo redo',
|
|
221
|
+
style_formats: [
|
|
222
|
+
{ title: 'Headings', items: [
|
|
223
|
+
{ title: 'Heading 1', format: 'h1' },
|
|
224
|
+
{ title: 'Heading 2', format: 'h2' },
|
|
225
|
+
{ title: 'Heading 3', format: 'h3' },
|
|
226
|
+
{ title: 'Heading 4', format: 'h4' },
|
|
227
|
+
{ title: 'Heading 5', format: 'h5' },
|
|
228
|
+
{ title: 'Heading 6', format: 'h6' }
|
|
229
|
+
]
|
|
230
|
+
}
|
|
231
|
+
],
|
|
232
|
+
statusbar: false,
|
|
233
|
+
menu: {
|
|
234
|
+
format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | codeformat blockformats align | removeformat'}
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
self.addEventListener("connected",() => {
|
|
240
|
+
initMCE();
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// format: remove fonts, line height, text color, background color formats.inline, formats.block.div and formats.blocks.pre, block.pre
|
|
244
|
+
// view: remove source code
|
|
245
|
+
</script>
|
|
246
|
+
</body>
|
|
247
|
+
</html>
|
package/test/basic.html
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
<title>Basic</title>
|
|
6
6
|
<template id="x-test" name="joe" open="true" count=1 children='["mary"]' l-on:click="${bump}">
|
|
7
7
|
|
|
8
|
-
<span id="children">${children}</span>
|
|
9
|
-
|
|
10
8
|
<input id="idatetime" type="datetime" value="${idatetime}">
|
|
11
9
|
|
|
10
|
+
<span id="children">${children}</span>
|
|
11
|
+
|
|
12
12
|
<span id="name">${name}</span>
|
|
13
13
|
<span id="open">${open}</span>
|
|
14
14
|
<span id="count">${count}</span>
|
|
@@ -32,16 +32,18 @@
|
|
|
32
32
|
<input id="inumber" type="number" value="${inumber}">
|
|
33
33
|
<input id="irange" type="range" value="${irange}">
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
35
|
<input id="icheckbox" type="checkbox" value="${icheckbox}">
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
self.variables({
|
|
43
|
-
self.variables({
|
|
44
|
-
|
|
36
|
+
</template>
|
|
37
|
+
<script>
|
|
38
|
+
document.getElementById("x-test").mount = (self) => {
|
|
39
|
+
// debugger;
|
|
40
|
+
self.variables({name: "string", open: "boolean", count: "number", children: Array}, {imported, reactive});
|
|
41
|
+
self.variables({color: "string", checked: "boolean", age: "number", hamburger: Array}, {
|
|
42
|
+
exported,
|
|
43
|
+
reactive
|
|
44
|
+
});
|
|
45
|
+
self.variables({counter: "number"}, {reactive});
|
|
46
|
+
self.variables({myshare: "number"}, {shared});
|
|
45
47
|
|
|
46
48
|
color = "green";
|
|
47
49
|
checked = true;
|
|
@@ -63,7 +65,6 @@
|
|
|
63
65
|
|
|
64
66
|
inumber = 1;
|
|
65
67
|
irange = 1;
|
|
66
|
-
|
|
67
68
|
idatetime = new Date();
|
|
68
69
|
|
|
69
70
|
icheckbox = true;
|
|
@@ -74,12 +75,12 @@
|
|
|
74
75
|
counter++;
|
|
75
76
|
};
|
|
76
77
|
|
|
77
|
-
addEventListener("change",({variableName,value}) => {
|
|
78
|
+
addEventListener("change", ({variableName, value}) => {
|
|
78
79
|
self[variableName] = value;
|
|
79
80
|
});
|
|
80
|
-
|
|
81
|
-
</
|
|
82
|
-
<script src="../
|
|
81
|
+
}
|
|
82
|
+
</script>
|
|
83
|
+
<script src="../lightview2.js"></script>
|
|
83
84
|
<script>
|
|
84
85
|
Lightview.createComponent("x-test",document.getElementById("x-test"));
|
|
85
86
|
</script>
|
package/test/basic.test.mjs
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import 'expect-puppeteer';
|
|
2
2
|
|
|
3
|
-
describe('Google', () => {
|
|
4
|
-
beforeAll(async () => {
|
|
5
|
-
await page.goto('https://google.com');
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
test('should be titled "Google"', async () => {
|
|
9
|
-
await expect(page.title()).resolves.toMatch('Google');
|
|
10
|
-
});
|
|
11
|
-
});
|
|
12
|
-
|
|
13
3
|
describe('Lightview - Variables', () => {
|
|
14
4
|
beforeAll(async () => {
|
|
15
5
|
await page.goto('http://localhost:8080/test/basic.html');
|
package/test/extended.html
CHANGED
|
@@ -3,30 +3,27 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<title>Extended</title>
|
|
6
|
-
<script src="../
|
|
6
|
+
<script src="../lightview2.js?as=x-body"></script>
|
|
7
7
|
</head>
|
|
8
8
|
<body>
|
|
9
|
-
<script
|
|
10
|
-
|
|
9
|
+
<script>
|
|
10
|
+
document.body.mount = async (self) => {
|
|
11
|
+
const {array,boolean,number,object,string} = await import("../types.js");
|
|
11
12
|
|
|
12
|
-
self.variables({strictarray:array},{set:[]});
|
|
13
|
-
self.variables({strictboolean:boolean},{set:true});
|
|
14
|
-
self.variables({strictnumber:number},{set:0});
|
|
15
|
-
self.variables({strictobject:object},{set:{}});
|
|
16
|
-
self.variables({strictstring:string},{set:"test"});
|
|
17
|
-
self.variables({extendedarray:array({required:true,minlength:2,maxlength:3})});
|
|
18
|
-
self.variables({extendedboolean:boolean({required:true})});
|
|
19
|
-
self.variables({extendednumber:number({required:true,min:1,max:4,step:2,allowNaN:false})});
|
|
20
|
-
self.variables({extendedobject:object({required:true})});
|
|
21
|
-
self.variables({extendedstring:string({required:true,minlength:2,maxlength:4})});
|
|
22
|
-
|
|
23
|
-
self.variables({allowNaNnumber:number({min:null,max:null,step:null})});
|
|
24
|
-
self.variables({noNaNnumber:number({allowNaN:false})});
|
|
25
|
-
|
|
26
|
-
//debugger;
|
|
27
|
-
//self.setVariableValue("extendedarray",[]);
|
|
28
|
-
//console.log(typeof(extendedarray),extendedarray);
|
|
13
|
+
self.variables({strictarray:array},{set:[]});
|
|
14
|
+
self.variables({strictboolean:boolean},{set:true});
|
|
15
|
+
self.variables({strictnumber:number},{set:0});
|
|
16
|
+
self.variables({strictobject:object},{set:{}});
|
|
17
|
+
self.variables({strictstring:string},{set:"test"});
|
|
18
|
+
self.variables({extendedarray:array({required:true,minlength:2,maxlength:3})});
|
|
19
|
+
self.variables({extendedboolean:boolean({required:true})});
|
|
20
|
+
self.variables({extendednumber:number({required:true,min:1,max:4,step:2,allowNaN:false})});
|
|
21
|
+
self.variables({extendedobject:object({required:true})});
|
|
22
|
+
self.variables({extendedstring:string({required:true,minlength:2,maxlength:4})});
|
|
29
23
|
|
|
24
|
+
self.variables({allowNaNnumber:number({min:null,max:null,step:null})});
|
|
25
|
+
self.variables({noNaNnumber:number({allowNaN:false})});
|
|
26
|
+
}
|
|
30
27
|
</script>
|
|
31
28
|
</body>
|
|
32
29
|
</html>
|
package/types.js
CHANGED
|
@@ -356,6 +356,15 @@ const string = ({coerce=false, required = false,whenInvalid = ifInvalid, maxleng
|
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
358
|
|
|
359
|
+
const html = (...args) => string(...args);
|
|
360
|
+
html.safe = true;
|
|
361
|
+
|
|
362
|
+
const css = (...args) => string(...args);
|
|
363
|
+
css.safe = true;
|
|
364
|
+
|
|
365
|
+
const script = (...args) => string(...args);
|
|
366
|
+
script.safe = true;
|
|
367
|
+
|
|
359
368
|
|
|
360
369
|
const validateSymbol = function(value,variable) {
|
|
361
370
|
if(value===undefined && variable.value===undefined) {
|
|
@@ -522,4 +531,4 @@ const remote = (config) => {
|
|
|
522
531
|
|
|
523
532
|
const remoteGenerator = handleRemote;
|
|
524
533
|
|
|
525
|
-
export {ValidityState,any,array,boolean,duration,number,object,remote,remoteGenerator,string,symbol,reviver}
|
|
534
|
+
export {ValidityState,any,array,boolean,duration,number,object,remote,remoteGenerator,string,symbol,reviver,html,css,script}
|
package/unsplash.key
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
nRe-dHABvjv2shxyvDFQd3Y9MPni77qBG9ImAVH0wig
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<html>
|
|
2
|
-
<head>
|
|
3
|
-
<meta charset="UTF-8">
|
|
4
|
-
<title>Lightview:Gauge</title>
|
|
5
|
-
</head>
|
|
6
|
-
<body>
|
|
7
|
-
<div id="target"></div>
|
|
8
|
-
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
|
|
9
|
-
<script src="https://unpkg.com/json5@^2.0.0/dist/index.min.js"></script>
|
|
10
|
-
<script type="lightview/module">
|
|
11
|
-
const {chart} = await import("/components/components.js");
|
|
12
|
-
chart(self,{
|
|
13
|
-
packages:["corechart","gauge"],
|
|
14
|
-
columns:[{label:"Label",type:"string"},{label:"Value",type:"number"}],
|
|
15
|
-
type:"Gauge"
|
|
16
|
-
});
|
|
17
|
-
</script>
|
|
18
|
-
</body>
|
|
19
|
-
</html>
|