@explorable-viz/fluid 0.7.28 → 0.7.29

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.
@@ -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