sol-components 2.1.0

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.
Files changed (150) hide show
  1. package/README.md +7 -0
  2. package/core/activate.js +27 -0
  3. package/core/adopt.js +71 -0
  4. package/core/auth-core.js +73 -0
  5. package/core/auth-fetch.js +154 -0
  6. package/core/component-mount.js +110 -0
  7. package/core/defaults.js +48 -0
  8. package/core/define.js +15 -0
  9. package/core/display-target.js +166 -0
  10. package/core/edit-placements.js +28 -0
  11. package/core/editor-self.js +127 -0
  12. package/core/editor.js +162 -0
  13. package/core/events.js +27 -0
  14. package/core/extension-points.js +189 -0
  15. package/core/form-utils.js +210 -0
  16. package/core/from-query.js +138 -0
  17. package/core/from-rdf.js +52 -0
  18. package/core/here.js +33 -0
  19. package/core/include-core.js +73 -0
  20. package/core/inrupt-global.js +18 -0
  21. package/core/menu-consumer.js +41 -0
  22. package/core/menu-rdf.js +154 -0
  23. package/core/pod-ops.js +392 -0
  24. package/core/pod-registry.js +82 -0
  25. package/core/popup-proxy.js +255 -0
  26. package/core/rdf-core.js +280 -0
  27. package/core/rdf-render.js +136 -0
  28. package/core/rdf-utils.js +411 -0
  29. package/core/rdf.js +154 -0
  30. package/core/services.js +106 -0
  31. package/core/shape-to-form.js +741 -0
  32. package/core/sparql-safety.js +20 -0
  33. package/core/utils.js +196 -0
  34. package/dist/importmap-cdn.json +49 -0
  35. package/dist/importmap-local.json +49 -0
  36. package/dist/sol-loader.manifest.json +140 -0
  37. package/dist/vendor/@comunica-query-sparql.js +137851 -0
  38. package/dist/vendor/@inrupt-solid-client-authn-browser.js +7503 -0
  39. package/dist/vendor/dompurify.js +1476 -0
  40. package/dist/vendor/ical.js.js +9739 -0
  41. package/dist/vendor/marked.js +85 -0
  42. package/dist/vendor/n3.js +14670 -0
  43. package/dist/vendor/rdf-validate-shacl.js +6970 -0
  44. package/dist/vendor/rdflib.js +35172 -0
  45. package/dist/vendor/solid-logic.js +6819 -0
  46. package/dist/vendor/solid-ui.js +21945 -0
  47. package/node/sol-form.js +133 -0
  48. package/node/sol-include.js +55 -0
  49. package/node/sol-login.js +632 -0
  50. package/node/sol-menu.js +639 -0
  51. package/node/sol-query.js +116 -0
  52. package/package.json +133 -0
  53. package/web/menu-from-rdf.js +23 -0
  54. package/web/scripts/prefs.js +25 -0
  55. package/web/sol-accordion.js +114 -0
  56. package/web/sol-basic.js +50 -0
  57. package/web/sol-breadcrumb.js +131 -0
  58. package/web/sol-button.js +244 -0
  59. package/web/sol-calendar.js +465 -0
  60. package/web/sol-default.js +118 -0
  61. package/web/sol-dropdown-button.js +222 -0
  62. package/web/sol-feed.js +1336 -0
  63. package/web/sol-form.js +949 -0
  64. package/web/sol-full.js +43 -0
  65. package/web/sol-gallery.js +303 -0
  66. package/web/sol-include.js +246 -0
  67. package/web/sol-live-edit.js +415 -0
  68. package/web/sol-login.js +856 -0
  69. package/web/sol-menu.js +593 -0
  70. package/web/sol-modal.js +377 -0
  71. package/web/sol-pod-extras.js +17 -0
  72. package/web/sol-pod-ops.js +680 -0
  73. package/web/sol-pod.js +1039 -0
  74. package/web/sol-query.js +546 -0
  75. package/web/sol-rolodex.js +95 -0
  76. package/web/sol-search.js +402 -0
  77. package/web/sol-settings.js +199 -0
  78. package/web/sol-solidos.js +93 -0
  79. package/web/sol-tabs.js +445 -0
  80. package/web/sol-time.js +194 -0
  81. package/web/sol-tree-edit.js +492 -0
  82. package/web/sol-wac.js +456 -0
  83. package/web/sol-weather.js +337 -0
  84. package/web/sol-window.js +142 -0
  85. package/web/styles/buttons-css.js +108 -0
  86. package/web/styles/help.css +242 -0
  87. package/web/styles/root.css +112 -0
  88. package/web/styles/sol-accordion-css.js +97 -0
  89. package/web/styles/sol-calendar-css.js +154 -0
  90. package/web/styles/sol-feed-css.js +475 -0
  91. package/web/styles/sol-form-css.js +471 -0
  92. package/web/styles/sol-gallery-css.js +181 -0
  93. package/web/styles/sol-include-css.js +95 -0
  94. package/web/styles/sol-live-edit-css.js +84 -0
  95. package/web/styles/sol-live-edit.css +101 -0
  96. package/web/styles/sol-login-css.js +116 -0
  97. package/web/styles/sol-menu-css.js +145 -0
  98. package/web/styles/sol-modal-css.js +134 -0
  99. package/web/styles/sol-pod-css.js +187 -0
  100. package/web/styles/sol-pod-modal-css.js +203 -0
  101. package/web/styles/sol-query-css.js +140 -0
  102. package/web/styles/sol-query-help.css +267 -0
  103. package/web/styles/sol-query-one-pager.css +67 -0
  104. package/web/styles/sol-search-css.js +157 -0
  105. package/web/styles/sol-solidos-css.js +7 -0
  106. package/web/styles/sol-tabs-css.js +114 -0
  107. package/web/styles/sol-time-css.js +30 -0
  108. package/web/styles/sol-wac-css.js +73 -0
  109. package/web/styles/sol-weather-css.js +59 -0
  110. package/web/styles/solid-logo.svg +9 -0
  111. package/web/styles/view-accordion-css.js +66 -0
  112. package/web/styles/view-anchorlist-css.js +22 -0
  113. package/web/styles/view-autocomplete-css.js +59 -0
  114. package/web/styles/view-rolodex-css.js +102 -0
  115. package/web/styles/view-select-css.js +21 -0
  116. package/web/utils/calendar-fetch.js +388 -0
  117. package/web/utils/code-mirror-editor.js +82 -0
  118. package/web/utils/commons-fetch.js +108 -0
  119. package/web/utils/feed-edit.js +159 -0
  120. package/web/utils/feed-edit.smoke.mjs +74 -0
  121. package/web/utils/feed-fetch.js +573 -0
  122. package/web/utils/live-edit-help/csv.js +64 -0
  123. package/web/utils/live-edit-help/graphviz.js +41 -0
  124. package/web/utils/live-edit-help/jsonld.js +55 -0
  125. package/web/utils/live-edit-help/markdown.js +52 -0
  126. package/web/utils/live-edit-help/mermaid.js +48 -0
  127. package/web/utils/live-edit-help/turtle.js +85 -0
  128. package/web/utils/rdf-config.js +125 -0
  129. package/web/utils/renderers/csv.js +124 -0
  130. package/web/utils/renderers/d3-force.js +82 -0
  131. package/web/utils/renderers/graphviz.js +13 -0
  132. package/web/utils/renderers/html.js +10 -0
  133. package/web/utils/renderers/jsonld.js +63 -0
  134. package/web/utils/renderers/markdown.js +19 -0
  135. package/web/utils/renderers/mermaid.js +54 -0
  136. package/web/utils/renderers/turtle.js +51 -0
  137. package/web/utils/sol-query-triple-patterns.js +151 -0
  138. package/web/utils/sol-query-ui.js +250 -0
  139. package/web/utils/sol-query-views.js +32 -0
  140. package/web/views/_helpers.js +34 -0
  141. package/web/views/accordion.js +133 -0
  142. package/web/views/anchorlist.js +59 -0
  143. package/web/views/auto-complete.js +183 -0
  144. package/web/views/dl.js +38 -0
  145. package/web/views/list.js +19 -0
  146. package/web/views/menu.js +56 -0
  147. package/web/views/rolodex.js +126 -0
  148. package/web/views/select.js +79 -0
  149. package/web/views/table.js +73 -0
  150. package/web/views/tabs.js +57 -0
@@ -0,0 +1,73 @@
1
+ import { appendCell } from './_helpers.js';
2
+
3
+ export function render(container, data, host, options = {}) {
4
+ const { hideHeader, mkBnodeLink } = options;
5
+ const vars = data.head.vars;
6
+ const bindings = data.results.bindings;
7
+ const table = document.createElement('table');
8
+ table.setAttribute('role', 'table');
9
+
10
+ if (!hideHeader) {
11
+ const thead = document.createElement('thead');
12
+ const tr = document.createElement('tr');
13
+ tr.setAttribute('role', 'row');
14
+ vars.forEach(v => {
15
+ const th = document.createElement('th');
16
+ th.setAttribute('role', 'columnheader');
17
+ th.setAttribute('tabindex', '0');
18
+ th.setAttribute('aria-sort', 'none');
19
+ th.setAttribute('aria-label', `${v}, sortable column`);
20
+ th.textContent = v;
21
+ tr.appendChild(th);
22
+ });
23
+ thead.appendChild(tr);
24
+ table.appendChild(thead);
25
+ }
26
+
27
+ const tbody = document.createElement('tbody');
28
+ tbody.setAttribute('role', 'rowgroup');
29
+ bindings.forEach(row => {
30
+ const tr = document.createElement('tr');
31
+ tr.setAttribute('role', 'row');
32
+ vars.forEach(v => {
33
+ const td = document.createElement('td');
34
+ td.setAttribute('role', 'cell');
35
+ appendCell(td, row[v], mkBnodeLink);
36
+ tr.appendChild(td);
37
+ });
38
+ tbody.appendChild(tr);
39
+ });
40
+ table.appendChild(tbody);
41
+
42
+ if (!hideHeader) addSort(table);
43
+ container.appendChild(table);
44
+ }
45
+
46
+ function addSort(table) {
47
+ const ths = table.querySelectorAll('th');
48
+ let col = -1, dir = 1;
49
+ const doSort = (i) => {
50
+ dir = col === i ? -dir : 1;
51
+ col = i;
52
+ ths.forEach((h, j) => {
53
+ const active = j === i;
54
+ const order = active ? (dir > 0 ? 'asc' : 'desc') : '';
55
+ h.setAttribute('data-sort', order);
56
+ h.setAttribute('aria-sort', active ? (dir > 0 ? 'ascending' : 'descending') : 'none');
57
+ });
58
+ const tbody = table.querySelector('tbody');
59
+ Array.from(tbody.querySelectorAll('tr'))
60
+ .sort((a, b) => dir * (a.cells[i]?.textContent || '')
61
+ .localeCompare(b.cells[i]?.textContent || '', undefined, { numeric: true, sensitivity: 'base' }))
62
+ .forEach(r => tbody.appendChild(r));
63
+ };
64
+ ths.forEach((th, i) => {
65
+ th.addEventListener('click', () => doSort(i));
66
+ th.addEventListener('keydown', e => {
67
+ if (e.key === 'Enter' || e.key === ' ') {
68
+ e.preventDefault();
69
+ doSort(i);
70
+ }
71
+ });
72
+ });
73
+ }
@@ -0,0 +1,57 @@
1
+ import { siblingUrl } from '../../core/here.js';
2
+
3
+ /**
4
+ * Built-in view renderer for sol-query — "tabs".
5
+ * Turns a result set of URIs + labels into a <sol-tabs> element. Each row
6
+ * becomes one tab: anchor href = link column, anchor text = label column.
7
+ *
8
+ * Column selection: uses vars named `link` + `label` when present,
9
+ * otherwise falls back to the first two columns in order (1st = link,
10
+ * 2nd = label). If only one column is returned, it's used for both.
11
+ *
12
+ * Any additional result columns are forwarded as attributes on the anchor,
13
+ * so <sol-tabs> can pass them through to the panel component. e.g. a query
14
+ * with `?link ?label ?view` lets the `view` value land on the panel element.
15
+ *
16
+ * The handler attribute on <sol-query view="tabs"> is forwarded onto the
17
+ * <sol-tabs> element, so authors can choose the component each tab wraps
18
+ * around:
19
+ * <sol-query view="tabs" handler="sol-live-edit" …>
20
+ *
21
+ * Usage: <sol-query view="tabs" endpoint="…" sparql="SELECT ?link ?label …">
22
+ */
23
+
24
+ export async function render(container, data, host) {
25
+ const vars = data.head.vars;
26
+ const bindings = data.results.bindings;
27
+ if (!bindings?.length) { container.textContent = 'No results'; return; }
28
+
29
+ const hasNamed = vars.includes('link') && vars.includes('label');
30
+ const linkVar = hasNamed ? 'link' : vars[0];
31
+ const labelVar = hasNamed ? 'label' : (vars[1] ?? vars[0]);
32
+ const extraVars = vars.filter(v => v !== linkVar && v !== labelVar);
33
+
34
+ await import(siblingUrl('../sol-tabs.js', import.meta.url));
35
+
36
+ const tabs = document.createElement('sol-tabs');
37
+
38
+ // Forward a handler from the host sol-query (if any) to the new tabs.
39
+ const handler = host?.getAttribute?.('handler');
40
+ if (handler) tabs.setAttribute('handler', handler);
41
+
42
+ for (const row of bindings) {
43
+ const url = row[linkVar]?.value;
44
+ const label = row[labelVar]?.value || url || '';
45
+ if (!url) continue;
46
+ const a = document.createElement('a');
47
+ a.setAttribute('href', url);
48
+ a.textContent = label;
49
+ for (const v of extraVars) {
50
+ const cell = row[v];
51
+ if (cell?.value != null) a.setAttribute(v, cell.value);
52
+ }
53
+ tabs.appendChild(a);
54
+ }
55
+
56
+ container.appendChild(tabs);
57
+ }