@explorable-viz/fluid 0.7.28 → 0.7.29

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,343 @@
1
+ @charset "UTF-8";
2
+ @import url("https://fonts.googleapis.com/css2?family=Fira+Code&display=swap");
3
+ @import url('https://fonts.googleapis.com/css2?family=Ubuntu+Mono&display=swap');
4
+
5
+ @font-face {
6
+ font-family: 'OdiseanTech';
7
+ src: url('/font/OdiseanTech.woff2') format('woff2');
8
+ font-weight: normal;
9
+ font-style: normal;
10
+ }
11
+
12
+ @font-face {
13
+ font-family: 'GraphikLight';
14
+ src: url('/font/GraphikLight.woff2') format('woff2');
15
+ font-weight: 300;
16
+ font-style: normal;
17
+ }
18
+
19
+ @font-face {
20
+ font-family: 'GraphikLightItalic';
21
+ src: url('/font/GraphikLightItalic.woff2') format('woff2');
22
+ font-weight: 300;
23
+ font-style: italic;
24
+ }
25
+
26
+ @font-face {
27
+ font-family: 'GraphikMedium';
28
+ src: url('/font/GraphikMedium.woff2') format('woff2');
29
+ font-weight: 500;
30
+ font-style: normal;
31
+ }
32
+
33
+ @font-face {
34
+ font-family: 'GraphikMediumItalic';
35
+ src: url('/font/GraphikMediumItalic.woff2') format('woff2');
36
+ font-weight: 500;
37
+ font-style: italic;
38
+ }
39
+
40
+ .fluid-logo {
41
+ margin-bottom: 0;
42
+ }
43
+
44
+ .fluid-subtitle {
45
+ margin-bottom: 0;
46
+ margin-top: 0;
47
+ font-size: 12pt;
48
+ }
49
+
50
+ a:link {
51
+ color: darkslategray;
52
+ }
53
+
54
+ a:visited {
55
+ color: #004d40;
56
+ }
57
+
58
+ a:hover {
59
+ color: #009688;
60
+ }
61
+
62
+ a:active {
63
+ color: #003d33;
64
+ }
65
+
66
+ .right-justified {
67
+ margin-left: auto;
68
+ width: fit-content;
69
+ }
70
+
71
+ .nowrap {
72
+ white-space: nowrap;
73
+ }
74
+
75
+ code {
76
+ font-family: 'Ubuntu Mono', monospace;
77
+ }
78
+
79
+ body {
80
+ font-size: 12pt;
81
+ font-family: "GraphikLight", sans-serif;
82
+ font-weight: 300;
83
+ line-height: 1.25;
84
+ padding: 0;
85
+ margin: 0;
86
+ background-color: #FFFFFF;
87
+ color: #404040;
88
+ margin-bottom: 10em;
89
+ }
90
+
91
+ p {
92
+ margin-top: 1em;
93
+ margin-bottom: 1em;
94
+ }
95
+
96
+ p + p {
97
+ margin-top: 0;
98
+ }
99
+
100
+ .faq-question {
101
+ font-family: 'GraphikMedium';
102
+ color: darkslategrey;
103
+ }
104
+
105
+ .highlight {
106
+ font-family: 'GraphikMedium';
107
+ }
108
+
109
+ .align-right {
110
+ text-align: right;
111
+ }
112
+
113
+ h2 {
114
+ font-size: 18pt;
115
+ }
116
+
117
+ h3 {
118
+ width: 100%;
119
+ font-size: 16pt;
120
+ font-weight: bold;
121
+ margin-top: 10pt;
122
+ margin-bottom: 4pt;
123
+ border-bottom: 0.5px solid lightgray;
124
+ }
125
+
126
+ h4 {
127
+ font-size: 16pt;
128
+ font-weight: bold;
129
+ margin-top: 0.4em;
130
+ margin-bottom: 0;
131
+ }
132
+
133
+ .sub-header * {
134
+ font-size: 16pt;
135
+ margin-bottom: 4px;
136
+ }
137
+
138
+ ul {
139
+ padding-left: 20px;
140
+ margin-top: 0;
141
+ margin-bottom: 0;
142
+ }
143
+
144
+ li {
145
+ margin-bottom: 1ex;
146
+ }
147
+
148
+ li:last-child {
149
+ margin-bottom: 0;
150
+ }
151
+
152
+ .table-caption {
153
+ text-align: left;
154
+ }
155
+
156
+ nav ul {
157
+ padding-left: 0;
158
+ list-style: none;
159
+ }
160
+
161
+ nav ul li {
162
+ float: left;
163
+ overflow: hidden;
164
+ margin-bottom: 0;
165
+ }
166
+
167
+ nav ul li:not(:last-child)::after {
168
+ content: "•";
169
+ margin-right: 5px;
170
+ margin-left: 5px;
171
+ }
172
+
173
+ nav ul li.active-page a {
174
+ pointer-events: none;
175
+ color: inherit;
176
+ text-decoration: none;
177
+ cursor: default;
178
+ font-weight: bold;
179
+ color: rgb(135, 129, 255);
180
+ }
181
+
182
+ .cm-editor {
183
+ background: #2D2D2D;
184
+ color: #F0F0F0;
185
+ }
186
+
187
+ .cm-line {
188
+ font-family: 'Ubuntu Mono';
189
+ font-size: 10pt;
190
+ }
191
+
192
+ .cm-gutter {
193
+ background-color: #232323;
194
+ }
195
+
196
+ .cm-gutterElement {
197
+ font-family: 'Ubuntu Mono';
198
+ font-size: 10pt;
199
+ color: #88C0D0;
200
+ }
201
+
202
+ .right-border {
203
+ border-right: 0.5px solid lightgray;
204
+ padding-right: 6px;
205
+ }
206
+
207
+ .right-border + div {
208
+ padding-left: 4px
209
+ }
210
+
211
+ .header-grid-container {
212
+ display: grid;
213
+ background-color: #f0f0f0;
214
+ width: 100%;
215
+ grid-template-columns: 35% 1fr;
216
+ padding-top: 7px;
217
+ padding-bottom: 7px;
218
+ }
219
+
220
+ .footer-grid-container {
221
+ display: grid;
222
+ background-color: #f0f0f0;
223
+ width: 100%;
224
+ grid-template-columns: 35% 1fr;
225
+ margin-top: 10px;
226
+ }
227
+
228
+ :root {
229
+ --toggle-button-width: 24px;
230
+ --text-pane-width: 800px;
231
+ }
232
+
233
+ .grid-container {
234
+ display: grid;
235
+ grid-template-columns: auto var(--toggle-button-width) var(--text-pane-width);
236
+ justify-content: center;
237
+ }
238
+
239
+ .grid-container.data-pane-hidden {
240
+ grid-template-columns: 0 var(--toggle-button-width) var(--text-pane-width);
241
+ }
242
+
243
+ .grid-container.double-size {
244
+ max-width: 66.7vw; /* undo effect of transform: scale(1.5) for layout purposes */
245
+ }
246
+
247
+ .grid-container > :last-child {
248
+ padding-right: 10px;
249
+ }
250
+
251
+ .flex-bottom-align {
252
+ display: flex;
253
+ flex-direction: row;
254
+ }
255
+
256
+ .flex-bottom-align:first-child {
257
+ margin-top: auto;
258
+ }
259
+
260
+ .flex-left-align {
261
+ display: flex;
262
+ flex-direction: column;
263
+ align-items: start;
264
+ }
265
+
266
+ .flex-right-align {
267
+ display: flex;
268
+ flex-direction: column;
269
+ align-items: flex-end;
270
+ }
271
+
272
+ .flex-bottom-align {
273
+ display: flex;
274
+ flex-direction: row;
275
+ align-items: flex-end;
276
+ }
277
+
278
+ .data-pane-button {
279
+ font-size: 10pt;
280
+ }
281
+
282
+ .toggle-button {
283
+ color: #CCCCCC;
284
+ user-select: none;
285
+ }
286
+
287
+ .toggle-button:hover {
288
+ color: #999999;
289
+ cursor: pointer;
290
+ }
291
+
292
+ .data-pane {
293
+ border-right: 1px dotted #CCCCCC;
294
+ }
295
+
296
+ .data-pane-hidden .data-pane {
297
+ visibility: hidden;
298
+ }
299
+
300
+ .data-pane-hidden .data-pane * {
301
+ display: none;
302
+ }
303
+
304
+ .data-pane * {
305
+ font-size: 10pt;
306
+ }
307
+
308
+ .data-pane p {
309
+ margin-right: 3px;
310
+ }
311
+
312
+ /* Not actually double-size any more.. */
313
+ .double-size {
314
+ transform: scale(1.5);
315
+ transform-origin: top;
316
+ --text-pane-width: 600px;
317
+ }
318
+
319
+ body.standalone {
320
+ height: 100%;
321
+ display: grid;
322
+ justify-items: center;
323
+ align-items: start;
324
+ }
325
+
326
+ /* Needed for contained height specifications to work */
327
+ html {
328
+ height: 100%;
329
+ }
330
+
331
+ @keyframes fadeIn {
332
+ from { opacity: 0; }
333
+ to { opacity: 1; }
334
+ }
335
+
336
+ .fig-loading:only-child {
337
+ color: fuchsia;
338
+ animation: fadeIn 2s ease-in-out infinite alternate;
339
+ }
340
+
341
+ .fig-loading:not(:only-child) {
342
+ display: none;
343
+ }
@@ -0,0 +1,182 @@
1
+ .legend-box {
2
+ stroke: lightgray;
3
+ stroke-width: 0.5px;
4
+ fill: none;
5
+ }
6
+
7
+ .legend-text {
8
+ font-size: 9pt;
9
+ }
10
+
11
+ .title-text {
12
+ fill: Black;
13
+ font-size: 9pt;
14
+ }
15
+
16
+ .table-view th {
17
+ font-size: 11px;
18
+ text-align: left;
19
+ border-bottom: 'thin solid';
20
+ }
21
+
22
+ .table-view td {
23
+ font-size: 11px;
24
+ }
25
+
26
+ .table-view td:nth-child(1) {
27
+ color: lightgray;
28
+ }
29
+
30
+ table {
31
+ border-collapse: collapse;
32
+ }
33
+
34
+ thead {
35
+ border-top: 0.5px solid lightgray;
36
+ }
37
+
38
+ .table-cell {
39
+ border-radius: 0px;
40
+ }
41
+
42
+ td.table-cell {
43
+ background-color: white;
44
+ }
45
+
46
+ .table-cell.inert {
47
+ color: lightgrey;
48
+ }
49
+
50
+ .table-cell.selected-primary-persistent {
51
+ background-color: #93E9BE;
52
+ }
53
+
54
+ .table-cell.selected-secondary-persistent {
55
+ background-color: rgb(226, 226, 226);
56
+ }
57
+
58
+ .table-cell.selected-primary-transient {
59
+ color: blue;
60
+ }
61
+
62
+ .table-cell.selected-secondary-transient {
63
+ color: royalblue;
64
+ }
65
+
66
+ .table-row {
67
+ display: table-row;
68
+ }
69
+
70
+ .table-row.hidden {
71
+ visibility: collapse;
72
+ }
73
+
74
+ .linked-text {
75
+ border-radius: 0px;
76
+ background-color: White;
77
+ border-bottom-style: solid;
78
+ border-bottom-color: white;
79
+ border-bottom-width: 1px;
80
+ display: inline;
81
+ }
82
+
83
+ .linked-text.inert {
84
+ fill: lightgrey;
85
+ }
86
+
87
+ .linked-text.selected-primary-persistent {
88
+ background-color: #93E9BE;
89
+ }
90
+
91
+ .linked-text.selected-primary-transient {
92
+ border-bottom-color: blue;
93
+ }
94
+
95
+ .linked-text.selected-secondary-persistent {
96
+ background-color: rgb(226, 226, 226);
97
+ }
98
+
99
+ .linked-text.selected-secondary-transient {
100
+ border-bottom-color: lightblue;
101
+ }
102
+
103
+ .matrix-cell {
104
+ stroke: DarkGray;
105
+ fill: White;
106
+ }
107
+
108
+ .matrix-cell.inert {
109
+ stroke: DarkGray;
110
+ fill: rgb(185, 185, 185);
111
+ }
112
+
113
+ .matrix-cell.selected-primary-persistent {
114
+ fill: LightGreen;
115
+ }
116
+
117
+ .matrix-cell.selected-secondary-persistent {
118
+ fill: rgb(214, 240, 214)
119
+ }
120
+
121
+ .matrix-cell.selected-primary-transient {
122
+ }
123
+
124
+ .matrix-cell.selected-secondary-transient {
125
+ }
126
+
127
+ .matrix-cell-text {
128
+ font-size: 10pt;
129
+ font-family: "GraphikLight", sans-serif;
130
+ color: rgb(205, 205, 205)
131
+ }
132
+
133
+ .matrix-cell-text.selected-primary-persistent {
134
+ font-weight: 400;
135
+ color: darkgreen
136
+ }
137
+
138
+ .matrix-cell-text.selected-secondary-persistent {
139
+ color: green
140
+ }
141
+
142
+ .matrix-cell-text.selected-primary-transient {
143
+ font-weight: 400;
144
+ color: blue
145
+ }
146
+
147
+ .matrix-cell-text.selected-secondary-transient {
148
+ color: royalblue
149
+ }
150
+
151
+ .scatterplot-point {
152
+ fill: white;
153
+ stroke: black;
154
+ }
155
+
156
+ .scatterplot-point.inert {
157
+ fill: rgb(185,185,185);
158
+ stroke: black;
159
+ }
160
+
161
+ .scatterplot-point.selected-primary-persistent {
162
+ fill: LightGreen;
163
+ stroke: teal;
164
+ }
165
+
166
+ .scatterplot-point.selected-secondary-transient {
167
+ stroke: blue;
168
+ stroke-width: 1;
169
+ }
170
+
171
+ .scatterplot-point.selected-primary-transient {
172
+ stroke: blue;
173
+ stroke-width: 1;
174
+ }
175
+
176
+ .scatterplot-point.selected-secondary-persistent {
177
+ fill: rgb(226, 226, 226);
178
+ }
179
+
180
+ .scatterplot-point.selected-secondary-transient {
181
+ stroke-width: 1;
182
+ }
Binary file
@@ -0,0 +1,6 @@
1
+ <div class="footer-grid-container">
2
+ <div></div>
3
+ <div class="flex-left-align">
4
+ <p>© Fluid Contributors 2019–2024</p>
5
+ </div>
6
+ </div>
@@ -0,0 +1,26 @@
1
+ <div class="header-grid-container">
2
+ <div class="flex-right-align right-border">
3
+ <img class="fluid-logo" src="/image/fluid-logo.png" width="150px">
4
+ <h2 class="fluid-subtitle">explorable, self-explanatory research outputs</h2>
5
+ </div>
6
+ <div class="flex-left-align" style="justify-content: center; margin-left: 5px;">
7
+ <nav>
8
+ <ul>
9
+ <li><a href="https://github.com/explorable-viz/fluid">GitHub</a></li>
10
+ <li><a href="https://dl.acm.org/doi/10.1145/3498668">POPL 2022 paper</a></li>
11
+ <li><a href="https://www.youtube.com/watch?v=M_ePrtD9axk">POPL 2022 talk</a></li>
12
+ <li><a href="https://www.youtube.com/watch?v=2-S6yVyzypU">PROPL 2024</a></li>
13
+ <li><a href="https://www.youtube.com/watch?v=F3JaftEnFfM">ICCS Summer School</a></li>
14
+ <li><a href="https://arxiv.org/abs/2403.04403">ESOP 2025 preprint</a></li>
15
+ </ul>
16
+ </nav>
17
+ <nav>
18
+ <ul>
19
+ <li><a href="/">Overview</a></li>
20
+ <li><a href="/faq">FAQ</a></li>
21
+ <li><a href="/contributors">Contributors &amp; Funding</a></li>
22
+ </ul>
23
+ </nav>
24
+ <div></div>
25
+ </div>
26
+ </div>
@@ -0,0 +1,12 @@
1
+ <div></div>
2
+ <div></div>
3
+ <div>
4
+ <h3 class="title">Overview</h3>
5
+ <nav class="sub-header">
6
+ <ul>
7
+ <li><a href="/">Transparent research outputs</a></li>
8
+ <li><a href="/convolution">Matrix convolution</a></li>
9
+ <li><a href="/moving-average">Moving average</a></li>
10
+ </ul>
11
+ </nav>
12
+ </div>
@@ -0,0 +1,72 @@
1
+ function loadHeader () {
2
+ fetch('/shared/header.html')
3
+ .then(response => response.text())
4
+ .then(data => {
5
+ const header = document.createElement('div')
6
+ header.innerHTML = data
7
+ activateCurrentLink(header)
8
+ const divElement = header.children[0]
9
+ const grid = document.getElementById('grid')
10
+ grid.parentNode.insertBefore(divElement, grid)
11
+ })
12
+ .catch(error => console.error('Error loading shared HTML:', error))
13
+
14
+ fetch('/shared/footer.html')
15
+ .then(response => response.text())
16
+ .then(data => {
17
+ const footer = document.createElement('div')
18
+ footer.innerHTML = data
19
+ const divElement = footer.children[0]
20
+ const grid = document.getElementById('grid')
21
+ grid.parentNode.appendChild(divElement)
22
+ })
23
+ .catch(error => console.error('Error loading shared HTML:', error))
24
+ }
25
+
26
+ function eqPaths (path1, path2) {
27
+ const trailingSlashes = /\/+$/
28
+ return path1.replace(trailingSlashes, '') === path2.replace(trailingSlashes, '')
29
+ }
30
+
31
+ function activateCurrentLink (el) {
32
+ const listItems = el.querySelectorAll('li')
33
+ const n_ = Array.from(listItems).findIndex(li => {
34
+ const link = li.querySelector('a')
35
+ return link && eqPaths(link.getAttribute('href'), window.location.pathname)
36
+ })
37
+ if (n_ !== -1) {
38
+ listItems[n_].classList.add('active-page')
39
+ }
40
+ }
41
+
42
+ function loadSubHeader () {
43
+ fetch('/shared/sub-header.html')
44
+ .then(response => response.text())
45
+ .then(data => {
46
+ const header = document.createElement('div')
47
+ header.innerHTML = data
48
+ activateCurrentLink(header)
49
+ const divElements = header.children
50
+ const grid = document.getElementById('grid')
51
+ for (let i = Math.min(3, divElements.length - 1); i >= 0; --i) {
52
+ grid.insertBefore(divElements[i], grid.firstChild)
53
+ }
54
+ })
55
+ .catch(error => console.error('Error loading shared HTML:', error))
56
+ }
57
+
58
+ function toggleDataPane(gridId) {
59
+ const grid = document.getElementById(gridId)
60
+ const hidden = grid.classList.contains('data-pane-hidden')
61
+ const dataPaneButton = document.querySelector('.data-pane-button')
62
+
63
+ if (hidden) {
64
+ grid.classList.remove('data-pane-hidden')
65
+ dataPaneButton.classList.remove('fa-eye-slash')
66
+ dataPaneButton.classList.add('fa-eye')
67
+ } else {
68
+ grid.classList.add('data-pane-hidden')
69
+ dataPaneButton.classList.remove('fa-eye')
70
+ dataPaneButton.classList.add('fa-eye-slash')
71
+ }
72
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@explorable-viz/fluid",
3
- "version": "0.7.28",
3
+ "version": "0.7.29",
4
4
  "description": "Fluid is an experimental programming language which integrates a bidirectional dynamic analysis to connect outputs to data sources in a fine-grained way. Fluid is implemented in PureScript and runs in the browser.",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -80,6 +80,7 @@ cp $DIST/fluid/load-fig.js dist/$WEBSITE_LISP_CASE/shared/load-fig.js
80
80
  cp -r $DIST/fluid/font dist/$WEBSITE_LISP_CASE/font
81
81
  cp -r $DIST/fluid/css dist/$WEBSITE_LISP_CASE/css
82
82
  cp $DIST/fluid/favicon.ico dist/$WEBSITE_LISP_CASE/favicon.ico
83
+ cp -r $DIST/fluid/image dist/$WEBSITE_LISP_CASE/image
83
84
 
84
85
  echo "Processing static files:"
85
86