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,267 @@
1
+ * {
2
+ box-sizing: border-box;
3
+ margin: 0;
4
+ padding: 0;
5
+ }
6
+
7
+ body {
8
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
9
+ line-height: 1.6;
10
+ color: var(--text, #333);
11
+ max-width: 1200px;
12
+ margin: 0 auto;
13
+ padding: 2rem;
14
+ background: var(--bg, #f5f5f5);
15
+ }
16
+
17
+ .page-nav {
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ gap: 0.4rem 0.6rem;
21
+ margin: 1rem 0 1.5rem;
22
+ padding: 0.75rem 1rem;
23
+ background: var(--surface, #fff);
24
+ border-radius: 6px;
25
+ box-shadow: 0 1px 3px var(--shadow, rgba(0,0,0,0.08));
26
+ }
27
+
28
+ .page-nav a, .cell.name a, .attr-table a {
29
+ color: var(--link, #2980b9);
30
+ text-decoration: none;
31
+ font-size: 0.9rem;
32
+ padding: 0.2rem 0.6rem;
33
+ border-radius: 4px;
34
+ border: 1px solid var(--link-border, #d0dce8);
35
+ white-space: nowrap;
36
+ }
37
+
38
+ .page-nav a:hover, .cell.name a:hover, .attr-table a:hover {
39
+ background: var(--hover, #eaf2fb);
40
+ border-color: var(--accent, #3498db);
41
+ }
42
+
43
+ h1 {
44
+ color: var(--text, #2c3e50);
45
+ margin-bottom: 1rem;
46
+ font-size: 2.5rem;
47
+ }
48
+
49
+ h2 {
50
+ color: var(--text, #34495e);
51
+ margin-top: 2rem;
52
+ margin-bottom: 1rem;
53
+ padding-bottom: 0.5rem;
54
+ border-bottom: 2px solid var(--accent, #3498db);
55
+ }
56
+
57
+ h3 {
58
+ color: var(--text, #555);
59
+ margin-top: 1.5rem;
60
+ margin-bottom: 0.75rem;
61
+ }
62
+
63
+ p {
64
+ margin-bottom: 1rem;
65
+ }
66
+
67
+ code {
68
+ background: var(--code-bg, #f8f8f8);
69
+ border: 1px solid var(--border, #ddd);
70
+ border-radius: 3px;
71
+ padding: 0.2rem 0.4rem;
72
+ font-family: 'Courier New', monospace;
73
+ font-size: 0.9em;
74
+ color: var(--text, inherit);
75
+ }
76
+
77
+ pre {
78
+ background: var(--pre-bg, #2c3e50);
79
+ color: var(--pre-fg, #ecf0f1);
80
+ padding: 1rem;
81
+ border-radius: 5px;
82
+ overflow-x: auto;
83
+ margin-bottom: 1rem;
84
+ }
85
+
86
+ pre code {
87
+ background: none;
88
+ border: none;
89
+ color: inherit;
90
+ padding: 0;
91
+ }
92
+
93
+ .usage-section {
94
+ background: var(--surface, #fff);
95
+ padding: 1.5rem;
96
+ margin-bottom: 1.5rem;
97
+ border-radius: 8px;
98
+ box-shadow: 0 2px 4px var(--shadow, rgba(0,0,0,0.1));
99
+ }
100
+
101
+ .playground {
102
+ background: var(--surface, #fff);
103
+ padding: 2rem;
104
+ border-radius: 8px;
105
+ box-shadow: 0 4px 6px var(--shadow, rgba(0,0,0,0.1));
106
+ margin-top: 2rem;
107
+ }
108
+
109
+ .playground textarea {
110
+ width: 100%;
111
+ min-height: 150px;
112
+ padding: 1rem;
113
+ border: 2px solid var(--border, #ddd);
114
+ border-radius: 5px;
115
+ font-family: 'Courier New', monospace;
116
+ font-size: 0.9rem;
117
+ resize: vertical;
118
+ margin-bottom: 1rem;
119
+ background: var(--surface, #fff);
120
+ color: var(--text, #000);
121
+ }
122
+
123
+ .playground textarea:focus {
124
+ outline: none;
125
+ border-color: var(--accent, #3498db);
126
+ }
127
+
128
+ .button {
129
+ background: var(--accent, #3498db);
130
+ color: #fff;
131
+ border: none;
132
+ padding: 0.75rem 1.5rem;
133
+ font-size: 1rem;
134
+ border-radius: 5px;
135
+ cursor: pointer;
136
+ transition: background 0.3s;
137
+ }
138
+
139
+ .button:hover {
140
+ background: var(--accent-dark, #2980b9);
141
+ }
142
+
143
+ .button:active {
144
+ transform: translateY(1px);
145
+ }
146
+
147
+ .button:focus {
148
+ outline: 2px solid var(--accent, #3498db);
149
+ outline-offset: 2px;
150
+ }
151
+
152
+ .example-btn {
153
+ background: #95a5a6;
154
+ padding: 0.5rem 1rem;
155
+ font-size: 0.9rem;
156
+ margin-right: 0.5rem;
157
+ margin-bottom: 0.5rem;
158
+ display: inline-block;
159
+ }
160
+
161
+ .example-btn:hover {
162
+ background: #7f8c8d;
163
+ }
164
+
165
+ .modal {
166
+ display: none;
167
+ position: fixed;
168
+ top: 0;
169
+ left: 0;
170
+ width: 100%;
171
+ height: 100%;
172
+ background: var(--scrim, rgba(0,0,0,0.5));
173
+ z-index: 1000;
174
+ align-items: center;
175
+ justify-content: center;
176
+ }
177
+
178
+ .modal.active {
179
+ display: flex;
180
+ }
181
+
182
+ .modal-content {
183
+ background: var(--surface, #fff);
184
+ color: var(--text, #000);
185
+ padding: 2rem;
186
+ border-radius: 8px;
187
+ max-width: 90%;
188
+ max-height: 90%;
189
+ overflow: auto;
190
+ position: relative;
191
+ box-shadow: var(--shadow-modal, 0 10px 25px rgba(0,0,0,0.3));
192
+ }
193
+
194
+ .modal-close {
195
+ position: absolute;
196
+ top: 1rem;
197
+ right: 1rem;
198
+ background: var(--error, #e74c3c);
199
+ color: #fff;
200
+ border: none;
201
+ width: 2rem;
202
+ height: 2rem;
203
+ border-radius: 50%;
204
+ cursor: pointer;
205
+ font-size: 1.2rem;
206
+ line-height: 1;
207
+ }
208
+
209
+ .modal-close:hover {
210
+ background: #c0392b;
211
+ }
212
+
213
+ .modal-close:focus {
214
+ outline: 2px solid var(--error, #e74c3c);
215
+ outline-offset: 2px;
216
+ }
217
+
218
+ ul {
219
+ margin-left: 2rem;
220
+ margin-bottom: 1rem;
221
+ }
222
+
223
+ li {
224
+ margin-bottom: 0.5rem;
225
+ }
226
+
227
+ .note {
228
+ background: var(--note-bg, #fff3cd);
229
+ border-left: 4px solid var(--note-border, #ffc107);
230
+ padding: 1rem;
231
+ margin: 1rem 0;
232
+ border-radius: 4px;
233
+ color: var(--text, inherit);
234
+ }
235
+
236
+ .examples-grid {
237
+ display: flex;
238
+ flex-wrap: wrap;
239
+ gap: 0.5rem;
240
+ margin-top: 1rem;
241
+ }
242
+
243
+ .result-table {
244
+ width: 100%;
245
+ border-collapse: collapse;
246
+ margin-top: 1rem;
247
+ }
248
+
249
+ .result-table th,
250
+ .result-table td {
251
+ padding: 0.75rem;
252
+ text-align: left;
253
+ border: 1px solid var(--border, #dee2e6);
254
+ }
255
+
256
+ .result-table th {
257
+ background: var(--th-bg, #f8f9fa);
258
+ font-weight: 600;
259
+ }
260
+
261
+ .result-table tr:nth-child(even) {
262
+ background: var(--hover, #f8f9fa);
263
+ }
264
+
265
+ .result-table td {
266
+ word-break: break-all;
267
+ }
@@ -0,0 +1,67 @@
1
+ * {
2
+ font-family:var(--font-ui);
3
+ font-size:var(--font-size);
4
+ }
5
+ h2 {
6
+ font-size:125%;
7
+ // display:inline-block;
8
+ }
9
+ .code {
10
+ margin-left:3rem;
11
+ margin-top:0.25rem;
12
+ margin-bottom:0.25rem;
13
+ // padding:0.5rem;
14
+ // background:#2C3E51;
15
+ // color:white;
16
+ width:fit-content;
17
+ border-radius:1rem;
18
+ display:inline-block;
19
+ }
20
+ li {
21
+ list-style:none;
22
+ }
23
+ li {
24
+ vertical-align:top;
25
+ // margin-left:1rem;
26
+ margin-left:0;
27
+ margin-bottom:0.5rem;
28
+ display:inline-block;
29
+ }
30
+ p {
31
+ font-size:105%;
32
+ margin-left:1rem;
33
+ }
34
+ sol-query {
35
+ margin:0.5rem;
36
+ padding:0.5rem;
37
+ border:2px solid #666;
38
+ width:fit-content;
39
+ border-radius:var(--radius,4px);
40
+ }
41
+ main {
42
+ display:grid;
43
+ grid-template-columns:600px 1fr;
44
+ gap:1%;
45
+ }
46
+ i {color:green;}
47
+ sol-accordion {
48
+ display:block;
49
+ width:40ch;
50
+ border:2px solid #666;
51
+ border-radius:4px;
52
+ padding:0.5rem;
53
+ margin:0.5rem;
54
+ }
55
+ .example {
56
+ margin-left:1rem;
57
+ }
58
+ pre {
59
+ margin-left:1rem;
60
+ }
61
+ pre,code {
62
+ margin-top:0.25rem !important;
63
+ margin-bottom:0.5rem !important;
64
+ }
65
+ code {
66
+ color:var(--text-muted,red);
67
+ }
@@ -0,0 +1,157 @@
1
+ // Styles for <sol-search>'s shadow root. Two layouts share one stylesheet:
2
+ //
3
+ // :host([data-view="button"]) — icon trigger + floating panel.
4
+ // :host([data-view="inline"]) — bare form, no trigger, flows inline.
5
+ //
6
+ // The component writes the resolved `view` to `dataset.view` on the host so
7
+ // these :host() selectors can pick the right rules.
8
+ import { sheetFrom } from '../../core/adopt.js';
9
+
10
+ export const CSS = `
11
+ :host {
12
+ display: inline-block;
13
+ font-family: var(--font-ui, system-ui, sans-serif);
14
+ font-size: var(--font-size, 1rem);
15
+ color: var(--text, #212121);
16
+ }
17
+ /* Inline mode wants to lay out its form normally; the host shouldn't be
18
+ a stacking context with relative positioning the way the button mode
19
+ needs (so the floating panel positions against the trigger). */
20
+ :host([data-view="button"]) { position: relative; }
21
+ :host([data-view="inline"]) { display: inline-flex; align-items: center; }
22
+
23
+ /* ── trigger button (view=button only) ──────────────────────────────── */
24
+ /* Looks like the host text — a single search glyph that adopts the
25
+ surrounding colour, so it sits comfortably in a header strip
26
+ alongside time / weather. */
27
+ button.icon {
28
+ background: transparent;
29
+ border: 0;
30
+ color: inherit;
31
+ font: inherit;
32
+ font-size: 1.2em;
33
+ line-height: 1;
34
+ padding: .15rem .35rem;
35
+ cursor: pointer;
36
+ border-radius: var(--radius-sm, 4px);
37
+ }
38
+ button.icon:hover { background: var(--hover, rgba(0,0,0,.06)); }
39
+ button.icon:focus-visible {
40
+ outline: 2px solid var(--accent, #3498db);
41
+ outline-offset: 2px;
42
+ }
43
+
44
+ /* ── floating panel (view=button only) ──────────────────────────────── */
45
+ /* Hidden until [open]; positioning is finalised in JS so the right edge
46
+ of the panel lines up with the right edge of the trigger. */
47
+ .panel {
48
+ position: fixed;
49
+ z-index: 1000;
50
+ display: none;
51
+ min-width: 18rem;
52
+ padding: .75rem;
53
+ background: var(--surface, #fff);
54
+ color: var(--text, #212121);
55
+ border: 1px solid var(--border, #d0d0d0);
56
+ border-radius: var(--radius-md, 8px);
57
+ box-shadow: 0 8px 24px rgba(0,0,0,.18);
58
+ }
59
+ .panel[open] { display: block; }
60
+
61
+ /* ── form (shared) ──────────────────────────────────────────────────── */
62
+ /* Inline mode flows the row + engines horizontally; the panel mode wraps
63
+ them on top of each other inside the floating box. */
64
+ :host([data-view="inline"]) form.form {
65
+ display: inline-flex;
66
+ align-items: center;
67
+ gap: .6rem;
68
+ flex-wrap: wrap;
69
+ }
70
+
71
+ .row { display: flex; gap: .35rem; }
72
+
73
+ input.q {
74
+ flex: 1 1 auto;
75
+ min-width: 0;
76
+ padding: .35rem .5rem;
77
+ border: 1px solid var(--border, #d0d0d0);
78
+ border-radius: var(--radius-sm, 4px);
79
+ background: var(--bg, #fff);
80
+ color: var(--text, #212121);
81
+ font: inherit;
82
+ }
83
+ input.q:focus-visible {
84
+ outline: 2px solid var(--accent, #3498db);
85
+ outline-offset: 0;
86
+ border-color: var(--accent, #3498db);
87
+ }
88
+ /* In inline mode the input expands to fill the host's available row
89
+ space (the host itself is inline-flex). A small min-width keeps it
90
+ usable when the host gets squeezed; callers can cap it with their
91
+ own ::part(input) { max-width: … } rule if they want it narrower. */
92
+ :host([data-view="inline"]) input.q {
93
+ flex: 1 1 auto;
94
+ min-width: 8rem;
95
+ }
96
+ /* When the search row is the only content in its column, the form
97
+ itself should stretch so flex children (the input) have room to grow. */
98
+ :host([data-view="inline"]) form.form { flex: 1 1 auto; min-width: 0; }
99
+ :host([data-view="inline"]) .row { flex: 1 1 auto; min-width: 0; }
100
+
101
+ button.go {
102
+ padding: .35rem .7rem;
103
+ border: 1px solid var(--accent, #3498db);
104
+ background: var(--accent, #3498db);
105
+ color: #fff;
106
+ border-radius: var(--radius-sm, 4px);
107
+ font: inherit;
108
+ cursor: pointer;
109
+ }
110
+ button.go:hover {
111
+ background: var(--accent-dark, #2980b9);
112
+ border-color: var(--accent-dark, #2980b9);
113
+ }
114
+
115
+ /* .engines is a flex-wrap row of engine radios. When the list is too
116
+ wide for the available width, items continue on subsequent rows.
117
+ .engines-line is a single-flex-item wrapper that forces the
118
+ engines onto their own row below the input + Go row in the
119
+ inline view. */
120
+ .engines-line {
121
+ display: flex;
122
+ align-items: flex-start;
123
+ min-width: 0;
124
+ }
125
+ .engines {
126
+ margin-top: .5rem;
127
+ font-size: .9em;
128
+ flex: 1 1 auto;
129
+ min-width: 0;
130
+ display: flex;
131
+ flex-wrap: wrap;
132
+ /* Centre each row of engines horizontally — applies on both the
133
+ first row and any wrapped rows below it, so the engine block
134
+ reads as a centred cluster under the input. */
135
+ justify-content: center;
136
+ gap: .35rem .9rem;
137
+ }
138
+ /* Inline view: force the engines line onto its own row below the
139
+ input + Go row (so a wide input doesn't share its row with the
140
+ engines). The wrapping itself comes from .engines's flex-wrap. */
141
+ :host([data-view="inline"]) .engines-line {
142
+ flex: 1 1 100%;
143
+ margin-top: 0;
144
+ }
145
+ :host([data-view="inline"]) .engines { margin-top: 0; }
146
+
147
+ .engine { display: inline-flex; align-items: center; gap: .25rem; cursor: pointer; white-space: nowrap; flex: 0 0 auto; }
148
+
149
+ .sr-only {
150
+ position: absolute; width: 1px; height: 1px;
151
+ padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0);
152
+ white-space: nowrap; border: 0;
153
+ }
154
+ `;
155
+
156
+ export const sheet = sheetFrom(CSS);
157
+ export default sheet;
@@ -0,0 +1,7 @@
1
+ import { sheetFrom } from '../../core/adopt.js';
2
+
3
+ export const CSS = `
4
+ sol-solidos { display: block; width: 100%; height: 100%; overflow: auto; }
5
+ `;
6
+
7
+ export const sheet = sheetFrom(CSS);
@@ -0,0 +1,114 @@
1
+ // Light-DOM styles for <sol-tabs>. Injected into the element's root
2
+ // (document or shadow) once per root via ensureDocStyle.
3
+
4
+ export const CSS = `
5
+ sol-tabs {
6
+ display: flex; flex-direction: column;
7
+ flex: 1; min-height: 0; min-width: 0;
8
+ max-width: 100%;
9
+ overflow: hidden;
10
+ box-sizing: border-box;
11
+ }
12
+ sol-tabs .sol-tab-embed {
13
+ display: flex; flex-direction: column;
14
+ flex: 1; min-height: 0; min-width: 0;
15
+ width: 100%; max-width: 100%;
16
+ overflow: auto;
17
+ }
18
+ sol-tabs > .sol-tabs-content > .sol-tabs-pane {
19
+ display: flex; flex-direction: column;
20
+ flex: 1; min-height: 0; min-width: 0;
21
+ width: 100%; max-width: 100%;
22
+ }
23
+ sol-tabs > .sol-tabs-content > .sol-tabs-pane[hidden] { display: none; }
24
+ sol-tabs[orientation="vertical"] {
25
+ flex-direction: row;
26
+ }
27
+ sol-tabs > .sol-tabs-bar {
28
+ display: flex; flex-shrink: 0;
29
+ border-bottom: 1px solid var(--border, #e0e0e0);
30
+ padding: 0 12px; gap: 2px;
31
+ overflow-x: auto; overflow-y: hidden;
32
+ scrollbar-width: thin;
33
+ }
34
+ /* Page-level action launchers (slot="actions"), grouped at the right of the bar. */
35
+ sol-tabs > .sol-tabs-bar > .sol-tabs-launch {
36
+ margin-left: auto; flex-shrink: 0;
37
+ display: flex; align-items: center; gap: 6px;
38
+ }
39
+ sol-tabs[orientation="vertical"] > .sol-tabs-bar {
40
+ flex-direction: column;
41
+ border-bottom: none;
42
+ border-right: 1px solid var(--border, #e0e0e0);
43
+ padding: 8px; gap: 2px;
44
+ min-width: 140px; max-width: 260px;
45
+ overflow-x: hidden; overflow-y: auto;
46
+ }
47
+ sol-tabs[orientation="vertical"] > .sol-tabs-bar > button {
48
+ text-align: left;
49
+ border-bottom: none;
50
+ border-left: 3px solid transparent;
51
+ border-radius: 4px;
52
+ padding: 8px 12px;
53
+ margin-bottom: 0;
54
+ overflow: hidden; text-overflow: ellipsis;
55
+ }
56
+ sol-tabs[orientation="vertical"] > .sol-tabs-bar > button.active {
57
+ border-bottom-color: transparent;
58
+ border-left-color: var(--accent-dark, #1976d2);
59
+ background: var(--focus-bg, #e3f2fd);
60
+ }
61
+ sol-tabs[variant="sub"] > .sol-tabs-bar {
62
+ padding: 0; gap: 0; margin-bottom: 12px;
63
+ }
64
+ sol-tabs > .sol-tabs-bar > button {
65
+ background: none; border: none;
66
+ border-bottom: 3px solid transparent;
67
+ border-radius: 0;
68
+ padding: 1rem;
69
+ font-size: 105%;
70
+ color: var(--text-muted, #666);
71
+ cursor: pointer; margin-bottom: -1px; font-family: inherit;
72
+ white-space: nowrap; flex-shrink: 0;
73
+ }
74
+ sol-tabs[variant="sub"] > .sol-tabs-bar > button {
75
+ padding: 8px 14px; font-size: 18px;
76
+ border-bottom-width: 2px;
77
+ }
78
+ sol-tabs > .sol-tabs-bar > button:hover { color: var(--accent-dark, #1976d2); }
79
+ sol-tabs > .sol-tabs-bar > button.active {
80
+ color: var(--accent-dark, #1976d2);
81
+ border-bottom-color: var(--accent-dark, #1976d2);
82
+ font-weight: 600;
83
+ }
84
+ sol-tabs > .sol-tabs-actions {
85
+ flex-shrink: 0;
86
+ display: flex;
87
+ justify-content: flex-end;
88
+ align-items: center;
89
+ gap: 6px;
90
+ padding: 6px 20px;
91
+ font-size: 1em;
92
+ font-family: inherit;
93
+ }
94
+ sol-tabs > .sol-tabs-actions:empty { display: none; }
95
+ sol-tabs > .sol-tabs-content {
96
+ flex: 1 1 auto; min-height: 0; min-width: 0;
97
+ max-width: 100%;
98
+ display: flex; flex-direction: column; gap: 12px;
99
+ overflow: auto;
100
+ padding: 16px 20px;
101
+ box-sizing: border-box;
102
+ }
103
+ sol-tabs[variant="sub"] > .sol-tabs-content { padding: 0; }
104
+ sol-tabs > .sol-tabs-content > * {
105
+ min-width: 0; max-width: 100%;
106
+ }
107
+ sol-tabs > .sol-tabs-content img,
108
+ sol-tabs > .sol-tabs-content video,
109
+ sol-tabs > .sol-tabs-content iframe,
110
+ sol-tabs > .sol-tabs-content table,
111
+ sol-tabs > .sol-tabs-content pre {
112
+ max-width: 100%;
113
+ }
114
+ `;
@@ -0,0 +1,30 @@
1
+ // Styles for <sol-time>'s shadow root. Exports the raw `CSS` string plus a
2
+ // constructable `sheet`. Variables reference the shared design tokens so the
3
+ // component themes with the rest of the suite.
4
+ import { sheetFrom } from '../../core/adopt.js';
5
+
6
+ export const CSS = `
7
+ :host {
8
+ display: inline-block;
9
+ font-family: var(--font-ui, system-ui, sans-serif);
10
+ font-size: var(--font-size, 1rem);
11
+ color: var(--text, #212121);
12
+ }
13
+ .sol-time {
14
+ display: inline-flex;
15
+ align-items: baseline;
16
+ gap: .35rem;
17
+ white-space: nowrap;
18
+ padding: .25rem 0;
19
+ }
20
+ .label {
21
+ color: var(--text-muted, #7f8c8d);
22
+ font-size: .8em;
23
+ text-transform: lowercase;
24
+ }
25
+ .value { font-variant-numeric: tabular-nums; }
26
+ .sep { color: var(--text-muted, #7f8c8d); opacity: .6; }
27
+ `;
28
+
29
+ export const sheet = sheetFrom(CSS);
30
+ export default sheet;
@@ -0,0 +1,73 @@
1
+ // Styles for <sol-wac>. Injected via ensureDocStyle into whichever root
2
+ // hosts the element (document body for light-DOM, shadow root when sol-wac
3
+ // is rendered inside <sol-modal>).
4
+ import { sheetFrom } from '../../core/adopt.js';
5
+
6
+ export const CSS = `
7
+ .acl-role-form { display: flex; flex-direction: column; gap: 6px; padding: 6px 2px; }
8
+ .acl-role-row {
9
+ display: flex; align-items: center; gap: 8px;
10
+ padding: 7px 10px; border-radius: 6px;
11
+ background: var(--surface-2, #f9f9f9);
12
+ }
13
+ .acl-role-row:hover { background: var(--focus-bg, #e3f2fd); }
14
+ .acl-role-name { font-size: 0.88em; font-weight: 600; color: var(--text, #212121); width: 68px; flex-shrink: 0; }
15
+ .acl-grant-select {
16
+ font-size: 0.88em; padding: 4px 8px;
17
+ border: 1px solid var(--border, #e0e0e0); border-radius: 4px;
18
+ background: var(--surface, #fff); color: var(--text, #212121);
19
+ cursor: pointer; font-family: inherit;
20
+ }
21
+ .acl-save-btn { margin-left: auto; flex-shrink: 0; }
22
+ .acl-specific-count {
23
+ font-size: 0.72em; font-weight: 700;
24
+ background: var(--accent, #2196f3); color: #fff;
25
+ border-radius: 10px; padding: 1px 7px; min-width: 18px;
26
+ text-align: center; flex-shrink: 0;
27
+ }
28
+ .acl-default-wrap {
29
+ display: flex; align-items: center; gap: 4px;
30
+ font-size: 0.78em; color: var(--text-muted, #666);
31
+ cursor: pointer; white-space: nowrap; flex-shrink: 0;
32
+ }
33
+ .acl-default-wrap input { cursor: pointer; accent-color: var(--accent, #2196f3); }
34
+ .acl-default-global { margin-top: 6px; padding: 6px 10px; font-size: 0.85em; color: var(--text, #212121); }
35
+ .acl-section-label { font-size: 0.82em; font-weight: 600; color: var(--text-muted, #666); text-transform: uppercase; letter-spacing: 0.04em; }
36
+ .acl-agents-input {
37
+ font-family: 'Fira Mono', monospace; font-size: 0.82em;
38
+ width: 100%; border: 1px solid var(--border, #e0e0e0);
39
+ border-radius: 4px; padding: 6px 8px; resize: vertical;
40
+ background: var(--surface, #fff); color: var(--text, #212121);
41
+ }
42
+ .acl-specific-panel {
43
+ display: flex; flex-direction: column; gap: 6px;
44
+ padding: 8px 10px 10px 78px;
45
+ background: var(--surface, #fff);
46
+ border-top: 1px solid var(--border, #e0e0e0);
47
+ margin-top: -1px;
48
+ }
49
+ .acl-banner {
50
+ padding: 8px 12px; margin-bottom: 6px;
51
+ font-size: 0.85em; color: var(--text, #212121);
52
+ background: var(--focus-bg, #e3f2fd);
53
+ border-left: 3px solid var(--accent, #2196f3);
54
+ border-radius: 4px;
55
+ }
56
+ .acl-rdf-editor {
57
+ font-family: 'Fira Mono', 'Consolas', monospace;
58
+ font-size: 0.85em; flex: 1; min-height: 200px;
59
+ width: 100%; resize: vertical;
60
+ border: 1px solid var(--border, #e0e0e0);
61
+ border-radius: 4px; padding: 10px;
62
+ background: var(--surface, #fff); color: var(--text, #212121);
63
+ }
64
+ .acl-rdf-editor:focus { outline: none; border-color: var(--accent, #2196f3); }
65
+ .acl-error {
66
+ padding: 8px 12px; color: var(--error, #c62828);
67
+ background: var(--error-bg, #ffebee); border-radius: 4px;
68
+ font-size: 0.9em;
69
+ }
70
+ `;
71
+
72
+ export const sheet = sheetFrom(CSS);
73
+ export default sheet;