ontologyviewer 0.1.1 → 0.2.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.
package/README.ja.md CHANGED
@@ -19,21 +19,21 @@ Webページ内のTurtleを、読み取り専用の **Schema** 図と **Triples*
19
19
  </script>
20
20
 
21
21
  <script type="module">
22
- import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.1.1/dist/ontologyviewer.esm.min.mjs";
22
+ import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.2.0/dist/ontologyviewer.esm.min.mjs";
23
23
  ontologyviewer.initialize({ startOnLoad: true });
24
24
  </script>
25
25
  ```
26
26
 
27
27
  実行されない `text/turtle` の `<script>` はDOM内に保持され、Viewer稼働中は非表示です。この形式ならTurtleの `<...>` IRIをHTML entityへ変換せず、そのまま記述できます。ただし、Turtle内にリテラルな `</script>` があるとHTMLがsource要素の終了タグとして扱うため避けてください。従来の `<pre class="ontologyviewer">` も利用できますが、HTMLソース内の `<` は `&lt;` と書く必要があります。`destroy()` はどちらのsource要素も元の状態へ戻します。
28
28
 
29
- `examples/` のHTMLをFinderなどから直接開かないでください。ブラウザのES Moduleは `file:` URLでCORSブロックされます。`webplugin/` で `npm run examples` を実行し、`http://127.0.0.1:4173/examples/index.html` を開いてください。直開きや `dist/` 未生成時には、example画面に起動手順が表示されます。
29
+ `examples/` のHTMLをFinderなどから直接開かないでください。ブラウザのES Moduleは `file:` URLでCORSブロックされます。`npm run examples` を実行し、`http://127.0.0.1:4173/examples/index.html` を開いてください。直開きや `dist/` 未生成時には、example画面に起動手順が表示されます。
30
30
 
31
- 再現性を重視するページでは完全なバージョン(`@0.1.1`)を固定してください。`@10` のようなmajor指定は互換更新に追従できますが、配信内容は将来変化します。
31
+ 再現性を重視するページでは完全なバージョン(`@0.2.0`)を固定してください。`@10` のようなmajor指定は互換更新に追従できますが、配信内容は将来変化します。
32
32
 
33
33
  ## npmから利用
34
34
 
35
35
  ```bash
36
- npm install --save-exact ontologyviewer@0.1.1
36
+ npm install --save-exact ontologyviewer@0.2.0
37
37
  ```
38
38
 
39
39
  ```ts
@@ -51,6 +51,7 @@ await manager.ready;
51
51
 
52
52
  - datatype property、アイコン、色指定、cardinality、推論関係、統計、凡例、読み取り専用Inspectorを備えたSchemaカード。
53
53
  - Triples表示、検索、近傍focus、pan、zoom、fit、fCoSE/Dagre、node移動、PNG出力。
54
+ - Triples表示の簡約(既定で有効)。ラベル・コメント・標準語彙の用語を、それを参照しているノードに畳み込みます。1182トリプルのスキーマオントロジーで箱が3分の1、エッジが70%減りました。ツールバーのトグルで展開でき、`compactTriples: false` または `data-compact-triples="false"` で最初から展開状態にできます。
54
55
  - 1ページ内の複数Viewerを完全に分離。
55
56
  - 英語・日本語UIとlight/darkテーマの自動追従。
56
57
  - `storageKey` を指定した場合だけ、有効値を検査してレイアウトを `localStorage` に保存。
@@ -69,6 +70,7 @@ await manager.ready;
69
70
  data-locale="ja"
70
71
  data-layout="dagre"
71
72
  data-default-view="schema"
73
+ data-compact-triples="true"
72
74
  data-base-iri="https://example.org/base/"
73
75
  data-storage-key="harbor-market"
74
76
  >...</script>
@@ -83,6 +85,7 @@ const source = document.querySelector<HTMLElement>("#ontology")!;
83
85
  const instance = ontologyviewer.render(source, {
84
86
  baseIri: "https://example.org/base/",
85
87
  defaultView: "schema",
88
+ compactTriples: true,
86
89
  layout: "fcose",
87
90
  storageKey: "example-layout", // 省略すると保存しない
88
91
  onError(error) {
@@ -107,13 +110,13 @@ inline `<style>` が許可されない場合は自動注入を止め、CSSを明
107
110
 
108
111
  ```html
109
112
  <link rel="stylesheet"
110
- href="https://cdn.jsdelivr.net/npm/ontologyviewer@0.1.1/dist/ontologyviewer.css"
113
+ href="https://cdn.jsdelivr.net/npm/ontologyviewer@0.2.0/dist/ontologyviewer.css"
111
114
  data-ontologyviewer-styles>
112
115
  <script type="module" src="/assets/start-ontologyviewer.mjs"></script>
113
116
  ```
114
117
 
115
118
  ```js
116
- import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.1.1/dist/ontologyviewer.esm.min.mjs";
119
+ import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.2.0/dist/ontologyviewer.esm.min.mjs";
117
120
  ontologyviewer.initialize({ startOnLoad: true, injectStyles: false });
118
121
  ```
119
122
 
@@ -142,7 +145,7 @@ ESM bundleはES2020をtargetとし、CIでPlaywright Chromium、Firefox、WebKit
142
145
 
143
146
  ## 開発・公開
144
147
 
145
- `webplugin/` は自己完結しています。内容を新しいrepositoryのrootへコピーしても、次の手順で検証できます。
148
+ このパッケージは自己完結しています。cloneしたあと、次の手順で検証できます。
146
149
 
147
150
  ```bash
148
151
  npm ci
package/README.md CHANGED
@@ -19,21 +19,21 @@ A standalone, read-only Turtle ontology viewer for web pages. It renders class-f
19
19
  </script>
20
20
 
21
21
  <script type="module">
22
- import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.1.1/dist/ontologyviewer.esm.min.mjs";
22
+ import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.2.0/dist/ontologyviewer.esm.min.mjs";
23
23
  ontologyviewer.initialize({ startOnLoad: true });
24
24
  </script>
25
25
  ```
26
26
 
27
27
  The inert `text/turtle` script is retained in the DOM and hidden while its viewer is active. It accepts ordinary Turtle `<...>` IRIs without HTML entity escaping. Avoid a literal `</script>` sequence in that Turtle because HTML treats it as the closing tag. A `<pre class="ontologyviewer">` remains supported, but literal HTML source must write `<` as `&lt;`; `destroy()` restores either source element.
28
28
 
29
- Do not double-click the files under `examples/`: browser ES Modules are commonly blocked on `file:` URLs. From `webplugin/`, run `npm run examples` and open `http://127.0.0.1:4173/examples/index.html`. The example page now keeps an actionable message visible when it is opened incorrectly or when `dist/` has not been built.
29
+ Do not double-click the files under `examples/`: browser ES Modules are commonly blocked on `file:` URLs. Run `npm run examples` and open `http://127.0.0.1:4173/examples/index.html`. The example page now keeps an actionable message visible when it is opened incorrectly or when `dist/` has not been built.
30
30
 
31
- For reproducible pages, pin a complete version (`@0.1.1`). A major selector such as `@10` follows compatible releases but can change the delivered bytes.
31
+ For reproducible pages, pin a complete version (`@0.2.0`). A major selector such as `@10` follows compatible releases but can change the delivered bytes.
32
32
 
33
33
  ## Install from npm
34
34
 
35
35
  ```bash
36
- npm install --save-exact ontologyviewer@0.1.1
36
+ npm install --save-exact ontologyviewer@0.2.0
37
37
  ```
38
38
 
39
39
  ```ts
@@ -51,6 +51,7 @@ await manager.ready;
51
51
 
52
52
  - Schema cards with datatype properties, icons, color hints, cardinality, inferred-relation styling, statistics, legend, and read-only Inspector.
53
53
  - Raw Triples view, search, neighborhood focus, pan, zoom, fit, fCoSE/Dagre layouts, node dragging, and PNG export.
54
+ - Compact Triples view (on by default): labels, comments, and standard vocabulary terms are folded into the nodes that reference them, which removed two thirds of the boxes and 70% of the edges on a 1182-triple schema ontology. A toolbar toggle expands them again; set `compactTriples: false` or `data-compact-triples="false"` to start expanded.
54
55
  - Multiple isolated viewers in one document.
55
56
  - English and Japanese UI; automatic light/dark theme tracking.
56
57
  - Optional, validated `localStorage` layout persistence.
@@ -69,6 +70,7 @@ await manager.ready;
69
70
  data-locale="ja"
70
71
  data-layout="dagre"
71
72
  data-default-view="schema"
73
+ data-compact-triples="true"
72
74
  data-base-iri="https://example.org/base/"
73
75
  data-storage-key="harbor-market"
74
76
  >...</script>
@@ -83,6 +85,7 @@ const source = document.querySelector<HTMLElement>("#ontology")!;
83
85
  const instance = ontologyviewer.render(source, {
84
86
  baseIri: "https://example.org/base/",
85
87
  defaultView: "schema",
88
+ compactTriples: true,
86
89
  layout: "fcose",
87
90
  storageKey: "example-layout", // omit to disable persistence
88
91
  onError(error) {
@@ -109,14 +112,14 @@ Automatic style injection is convenient but requires an inline `<style>`. Disabl
109
112
 
110
113
  ```html
111
114
  <link rel="stylesheet"
112
- href="https://cdn.jsdelivr.net/npm/ontologyviewer@0.1.1/dist/ontologyviewer.css"
115
+ href="https://cdn.jsdelivr.net/npm/ontologyviewer@0.2.0/dist/ontologyviewer.css"
113
116
  data-ontologyviewer-styles>
114
117
  <script type="module" src="/assets/start-ontologyviewer.mjs"></script>
115
118
  ```
116
119
 
117
120
  ```js
118
121
  // /assets/start-ontologyviewer.mjs
119
- import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.1.1/dist/ontologyviewer.esm.min.mjs";
122
+ import ontologyviewer from "https://cdn.jsdelivr.net/npm/ontologyviewer@0.2.0/dist/ontologyviewer.esm.min.mjs";
120
123
  ontologyviewer.initialize({ startOnLoad: true, injectStyles: false });
121
124
  ```
122
125
 
@@ -145,7 +148,7 @@ The ESM bundle targets ES2020 and is tested in CI with current Playwright Chromi
145
148
 
146
149
  ## Development and publishing
147
150
 
148
- `webplugin/` is self-contained. Copy its contents to a repository root without the parent VS Code extension and run:
151
+ This package is self-contained. After cloning, run:
149
152
 
150
153
  ```bash
151
154
  npm ci
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAEjB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAIjB,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AASrC,wBAAgB,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,qBAA0B,GAAG,sBAAsB,CAgCxG;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,qBAAqB,CA+BjF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,sBAAsB,GAAG,SAAS,CAGpF;AA2ED,QAAA,MAAM,cAAc;;;;CAAsC,CAAC;AAC3D,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAEjB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAIjB,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AASrC,wBAAgB,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,qBAA0B,GAAG,sBAAsB,CAgCxG;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,qBAAqB,CA+BjF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,sBAAsB,GAAG,SAAS,CAGpF;AAqFD,QAAA,MAAM,cAAc;;;;CAAsC,CAAC;AAC3D,eAAe,cAAc,CAAC"}
package/dist/locale.d.ts CHANGED
@@ -2,6 +2,9 @@ export type Locale = "auto" | "en" | "ja";
2
2
  export interface Messages {
3
3
  schemaView: string;
4
4
  triplesView: string;
5
+ compactTriples: string;
6
+ compactTriplesHint: string;
7
+ compactTriplesActiveHint: string;
5
8
  searchPlaceholder: string;
6
9
  noResults: string;
7
10
  properties: string;
@@ -1 +1 @@
1
- {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAOzD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEpD"}
1
+ {"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,wBAAwB,EAAE,MAAM,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAsED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAOzD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEpD"}
package/dist/meta.json CHANGED
@@ -6105,6 +6105,17 @@
6105
6105
  "imports": [],
6106
6106
  "format": "esm"
6107
6107
  },
6108
+ "src/rdf/compactTriples.ts": {
6109
+ "bytes": 5450,
6110
+ "imports": [
6111
+ {
6112
+ "path": "src/rdf/vocabulary.ts",
6113
+ "kind": "import-statement",
6114
+ "original": "./vocabulary"
6115
+ }
6116
+ ],
6117
+ "format": "esm"
6118
+ },
6108
6119
  "src/rdf/graphModel.ts": {
6109
6120
  "bytes": 4741,
6110
6121
  "imports": [
@@ -6171,7 +6182,7 @@
6171
6182
  "format": "esm"
6172
6183
  },
6173
6184
  "src/locale.ts": {
6174
- "bytes": 2920,
6185
+ "bytes": 3622,
6175
6186
  "imports": [],
6176
6187
  "format": "esm"
6177
6188
  },
@@ -6191,7 +6202,7 @@
6191
6202
  "format": "esm"
6192
6203
  },
6193
6204
  "src/viewer.ts": {
6194
- "bytes": 33440,
6205
+ "bytes": 36095,
6195
6206
  "imports": [
6196
6207
  {
6197
6208
  "path": "node_modules/cytoscape/dist/cytoscape.esm.mjs",
@@ -6213,6 +6224,11 @@
6213
6224
  "kind": "import-statement",
6214
6225
  "original": "./rdf/parser"
6215
6226
  },
6227
+ {
6228
+ "path": "src/rdf/compactTriples.ts",
6229
+ "kind": "import-statement",
6230
+ "original": "./rdf/compactTriples"
6231
+ },
6216
6232
  {
6217
6233
  "path": "src/rdf/graphModel.ts",
6218
6234
  "kind": "import-statement",
@@ -6257,7 +6273,7 @@
6257
6273
  "format": "esm"
6258
6274
  },
6259
6275
  "src/index.ts": {
6260
- "bytes": 6519,
6276
+ "bytes": 7082,
6261
6277
  "imports": [
6262
6278
  {
6263
6279
  "path": "src/viewer.ts",
@@ -6279,7 +6295,7 @@
6279
6295
  "imports": [],
6280
6296
  "exports": [],
6281
6297
  "inputs": {},
6282
- "bytes": 3043641
6298
+ "bytes": 3056673
6283
6299
  },
6284
6300
  "dist/ontologyviewer.esm.min.mjs": {
6285
6301
  "imports": [],
@@ -6292,13 +6308,13 @@
6292
6308
  "entryPoint": "src/index.ts",
6293
6309
  "inputs": {
6294
6310
  "node_modules/layout-base/layout-base.js": {
6295
- "bytesInOutput": 59419
6311
+ "bytesInOutput": 59409
6296
6312
  },
6297
6313
  "node_modules/cose-base/cose-base.js": {
6298
- "bytesInOutput": 45319
6314
+ "bytesInOutput": 45326
6299
6315
  },
6300
6316
  "node_modules/cytoscape-fcose/cytoscape-fcose.js": {
6301
- "bytesInOutput": 20847
6317
+ "bytesInOutput": 20824
6302
6318
  },
6303
6319
  "node_modules/lodash/_listCacheClear.js": {
6304
6320
  "bytesInOutput": 78
@@ -7186,10 +7202,10 @@
7186
7202
  "bytesInOutput": 204
7187
7203
  },
7188
7204
  "node_modules/cytoscape/dist/cytoscape.esm.mjs": {
7189
- "bytesInOutput": 379045
7205
+ "bytesInOutput": 379057
7190
7206
  },
7191
7207
  "src/viewer.ts": {
7192
- "bytesInOutput": 16786
7208
+ "bytesInOutput": 17479
7193
7209
  },
7194
7210
  "node_modules/n3/src/N3Lexer.js": {
7195
7211
  "bytesInOutput": 8895
@@ -7209,6 +7225,9 @@
7209
7225
  "src/rdf/vocabulary.ts": {
7210
7226
  "bytesInOutput": 4401
7211
7227
  },
7228
+ "src/rdf/compactTriples.ts": {
7229
+ "bytesInOutput": 918
7230
+ },
7212
7231
  "src/rdf/graphModel.ts": {
7213
7232
  "bytesInOutput": 2064
7214
7233
  },
@@ -7225,7 +7244,7 @@
7225
7244
  "bytesInOutput": 1784
7226
7245
  },
7227
7246
  "src/locale.ts": {
7228
- "bytesInOutput": 2262
7247
+ "bytesInOutput": 3112
7229
7248
  },
7230
7249
  "src/search.ts": {
7231
7250
  "bytesInOutput": 1072
@@ -7237,10 +7256,10 @@
7237
7256
  "bytesInOutput": 828
7238
7257
  },
7239
7258
  "src/index.ts": {
7240
- "bytesInOutput": 9683
7259
+ "bytesInOutput": 11581
7241
7260
  }
7242
7261
  },
7243
- "bytes": 701981
7262
+ "bytes": 706326
7244
7263
  }
7245
7264
  }
7246
7265
  }
@@ -71,6 +71,51 @@
71
71
  color: #fff;
72
72
  background: #0878bd;
73
73
  }
74
+ /* Compaction toggle. A checkbox rather than a pressed button, because
75
+ schema/triples is an exclusive selection while this is an independent on/off
76
+ — and a checkbox shows its state without depending on colour. Styled as a
77
+ toolbar chip so it sits at the same height as the buttons beside it. */
78
+ .ontologyviewer-root .ov-compact-toggle {
79
+ display: inline-flex;
80
+ align-items: center;
81
+ gap: 6px;
82
+ min-height: 32px;
83
+ padding: 4px 10px 4px 8px;
84
+ border: 1px solid var(--ov-border);
85
+ border-radius: 6px;
86
+ color: var(--ov-fg);
87
+ background: var(--ov-bg);
88
+ cursor: pointer;
89
+ user-select: none;
90
+ white-space: nowrap;
91
+ }
92
+ .ontologyviewer-root .ov-compact-toggle:hover { background: var(--ov-hover); }
93
+ .ontologyviewer-root .ov-compact-toggle[hidden] { display: none; }
94
+ .ontologyviewer-root .ov-compact-checkbox {
95
+ width: 14px;
96
+ height: 14px;
97
+ margin: 0;
98
+ accent-color: #0878bd;
99
+ cursor: pointer;
100
+ }
101
+ /* Keyboard focus lands on the input, so raise the ring to the whole chip.
102
+ Scoped to :focus-visible so a mouse click does not leave a blue ring behind
103
+ that reads as "still enabled" on an unchecked control. */
104
+ .ontologyviewer-root .ov-compact-toggle:has(.ov-compact-checkbox:focus-visible) {
105
+ outline: 2px solid #0878bd;
106
+ outline-offset: 1px;
107
+ }
108
+ /* Checked state also shifts the chip itself, so the setting reads at a glance
109
+ from across the toolbar rather than only from the 14px box. */
110
+ .ontologyviewer-root .ov-compact-toggle:has(.ov-compact-checkbox:checked) {
111
+ border-color: #0878bd;
112
+ color: #0878bd;
113
+ font-weight: 600;
114
+ }
115
+ .ontologyviewer-root.ov-dark .ov-compact-toggle:has(.ov-compact-checkbox:checked) {
116
+ border-color: #4aa3dd;
117
+ color: #7dc4f0;
118
+ }
74
119
  .ontologyviewer-root .ov-search {
75
120
  flex: 1 1 250px;
76
121
  min-width: 130px;