slexkit 0.3.0 → 0.3.1

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 (45) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +4 -3
  3. package/README.zh-CN.md +4 -3
  4. package/dist/ai/llms-components.txt +2 -1
  5. package/dist/ai/llms-full.txt +73 -42
  6. package/dist/ai/llms-runtime.txt +11 -12
  7. package/dist/ai/llms.txt +1 -1
  8. package/dist/ai/slexkit-ai-manifest.json +77 -73
  9. package/dist/components/checkbox.js +1 -0
  10. package/dist/components/choice.css +2 -2
  11. package/dist/components/display.css +1 -1
  12. package/dist/components/index.js +56 -153
  13. package/dist/components/input.css +53 -119
  14. package/dist/components/input.js +33 -143
  15. package/dist/components/radio-group.js +1 -0
  16. package/dist/components/select.css +0 -6
  17. package/dist/components/slider.css +27 -18
  18. package/dist/components/specs.js +2 -1
  19. package/dist/components/switch.css +3 -3
  20. package/dist/components/switch.js +1 -0
  21. package/dist/components/text-input.css +21 -90
  22. package/dist/components/text.js +12 -0
  23. package/dist/components/tooling.css +0 -1
  24. package/dist/runtime.cjs +22 -5
  25. package/dist/runtime.js +22 -5
  26. package/dist/slexkit.cjs +78 -158
  27. package/dist/slexkit.css +54 -121
  28. package/dist/slexkit.js +78 -158
  29. package/dist/types/version.d.ts +2 -2
  30. package/dist/umd/slexkit.tooling.umd.js +77 -158
  31. package/dist/umd/slexkit.umd.js +78 -158
  32. package/package.json +3 -2
  33. package/skills/slexkit-host-integration/SKILL.md +1 -1
  34. package/src/components/svelte/display/Text.svelte +14 -1
  35. package/src/components/svelte/input/Checkbox.svelte +1 -1
  36. package/src/components/svelte/input/Input.svelte +0 -110
  37. package/src/components/svelte/input/RadioGroup.svelte +1 -1
  38. package/src/components/svelte/input/Switch.svelte +1 -1
  39. package/src/styles/components/choice.css +2 -2
  40. package/src/styles/components/select.css +0 -6
  41. package/src/styles/components/slider.css +27 -18
  42. package/src/styles/components/switch.css +3 -3
  43. package/src/styles/components/text-input.css +21 -90
  44. package/src/styles/display.css +1 -1
  45. package/src/styles/tooling.css +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to SlexKit.
4
4
 
5
+ ## v0.3.1 - Host stability and control rendering hardening
6
+
7
+ ### Added
8
+ - Runtime style safety tests that block broad `:has()` selectors, `clip-path`, and slider track regressions in shipped CSS.
9
+ - Regression coverage for disabled Switch, Checkbox, and Radio state attributes.
10
+
11
+ ### Changed
12
+ - CI now installs dependencies with `bun install --frozen-lockfile` and runs lint before tests.
13
+ - Disabled Switch, Checkbox, and Radio styling now uses explicit `data-disabled` attributes instead of broad relational selectors.
14
+ - Select and sr-only helper styles avoid `clip-path` for better host and Obsidian CSS compatibility.
15
+
16
+ ### Fixed
17
+ - Slider thumb rendering artifacts caused by painting the range track on the native input box.
18
+ - Input focus visibility after removing custom engineering steppers.
19
+ - Home RC example input labels now use native Input component labels instead of separate text labels.
20
+ - Stat cards no longer clip updated text during cross-document state examples.
21
+ - Markdown calculator examples no longer render duplicate section labels.
22
+
5
23
  ## v0.3.0 - Examples overhaul with component audit and i18n
6
24
 
7
25
  ### Added
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  <a href="README.zh-CN.md">简体中文</a>
16
16
  </p>
17
17
  <p>
18
- <img alt="version" src="https://img.shields.io/badge/version-0.2.0-18181b">
18
+ <img alt="version" src="https://img.shields.io/badge/version-0.3.1-18181b">
19
19
  <img alt="script" src="https://img.shields.io/badge/Slex-v0.1-18181b">
20
20
  <img alt="TypeScript" src="https://img.shields.io/badge/runtime-TypeScript-3178c6">
21
21
  <img alt="Svelte 5" src="https://img.shields.io/badge/components-Svelte_5-ff3e00">
@@ -31,6 +31,8 @@ It is built for chat messages, documents, agent panels, tool results, and AI-aut
31
31
 
32
32
  ## Installation
33
33
 
34
+ > Just want to use SlexKit in Obsidian? Open **Settings -> Community plugins**, search for **SlexKit**, then install and enable it. The npm package below is for developers integrating SlexKit into web apps, Markdown renderers, Streamdown, or custom hosts.
35
+
34
36
  ```sh
35
37
  npm install slexkit
36
38
  ```
@@ -115,7 +117,6 @@ Markdown platforms without SlexKit support show the fallback text. Hosts with Sl
115
117
  | `@slexkit/components-svelte` | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` | Svelte component registration |
116
118
  | `@slexkit/theme-shadcn` | `npm install @slexkit/theme-shadcn` | CSS theme tokens |
117
119
  | `@slexkit/streamdown` | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` | React / Streamdown Markdown renderer |
118
- | `@slexkit/obsidian` | `npm install slexkit @slexkit/obsidian` | Obsidian plugin adapter |
119
120
  | `@slexkit/mcp` | `npx -y @slexkit/mcp` | Read-only MCP server for docs, examples, and source validation |
120
121
 
121
122
  See [Package Boundaries](site/content/reference/packages/en-US.md) for details.
@@ -127,7 +128,7 @@ See [Package Boundaries](site/content/reference/packages/en-US.md) for details.
127
128
  | Browser DOM | `mount()`, `ingest()`, `boot()`, `disposeNamespace()` |
128
129
  | Markdown renderers | `createSlexKitMarkdownRuntimeHost()` |
129
130
  | React / Streamdown | `@slexkit/streamdown` |
130
- | Obsidian | `@slexkit/obsidian` |
131
+ | Obsidian | Install **SlexKit** from Community Plugins; release repo: <https://github.com/slexkit/obsidian-slexkit> |
131
132
  | AI agents | `@slexkit/mcp`, `llms.txt`, SlexKit skill docs |
132
133
  | Custom components | `register()`, `registerSvelteComponent()`, `registerSubset()` |
133
134
 
package/README.zh-CN.md CHANGED
@@ -15,7 +15,7 @@
15
15
  <a href="README.md">English</a>
16
16
  </p>
17
17
  <p>
18
- <img alt="version" src="https://img.shields.io/badge/version-0.2.0-18181b">
18
+ <img alt="version" src="https://img.shields.io/badge/version-0.3.1-18181b">
19
19
  <img alt="script" src="https://img.shields.io/badge/Slex-v0.1-18181b">
20
20
  <img alt="TypeScript" src="https://img.shields.io/badge/runtime-TypeScript-3178c6">
21
21
  <img alt="Svelte 5" src="https://img.shields.io/badge/components-Svelte_5-ff3e00">
@@ -31,6 +31,8 @@
31
31
 
32
32
  ## 安装
33
33
 
34
+ > 只想在 Obsidian 里使用 SlexKit?打开 **Settings -> Community plugins**,搜索 **SlexKit**,安装并启用即可。下面的 npm 安装方式主要面向需要把 SlexKit 接入网页、Markdown renderer、Streamdown 或自定义宿主的开发者。
35
+
34
36
  ```sh
35
37
  npm install slexkit
36
38
  ```
@@ -115,7 +117,6 @@ import "slexkit/style.css";
115
117
  | `@slexkit/components-svelte` | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` | Svelte 组件注册 |
116
118
  | `@slexkit/theme-shadcn` | `npm install @slexkit/theme-shadcn` | CSS 主题 token |
117
119
  | `@slexkit/streamdown` | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` | React / Streamdown Markdown 渲染器 |
118
- | `@slexkit/obsidian` | `npm install slexkit @slexkit/obsidian` | Obsidian 插件适配器 |
119
120
  | `@slexkit/mcp` | `npx -y @slexkit/mcp` | 面向文档、示例和源码校验的只读 MCP 服务 |
120
121
 
121
122
  更多说明见 [Package Boundaries](site/content/reference/packages/zh-CN.md)。
@@ -127,7 +128,7 @@ import "slexkit/style.css";
127
128
  | 浏览器 DOM | `mount()`、`ingest()`、`boot()`、`disposeNamespace()` |
128
129
  | Markdown 渲染器 | `createSlexKitMarkdownRuntimeHost()` |
129
130
  | React / Streamdown | `@slexkit/streamdown` |
130
- | Obsidian | `@slexkit/obsidian` |
131
+ | Obsidian | 从 Community Plugins 安装 **SlexKit**;发布仓库:<https://github.com/slexkit/obsidian-slexkit> |
131
132
  | AI Agents | `@slexkit/mcp`、`llms.txt`、SlexKit skill 文档 |
132
133
  | 自定义组件 | `register()`、`registerSvelteComponent()`、`registerSubset()` |
133
134
 
@@ -355,7 +355,6 @@ Since: 0.1.0
355
355
  - `min` (string | number; optional; dynamic): Minimum value used by numeric input controls.
356
356
  - `max` (string | number; optional; dynamic): Maximum value used by numeric input controls.
357
357
  - `step` (string | number; optional; dynamic): Step size used by numeric input controls.
358
- - `controls` (boolean; optional; dynamic; default: true): Show decrement and increment buttons for numeric inputs.
359
358
  - `onchange` (write-expression; optional; static): Write expression invoked when the value changes.
360
359
 
361
360
  ### Children
@@ -655,6 +654,8 @@ Since: 0.1.0
655
654
  - `content` (string; optional; dynamic): Alias for text.
656
655
  - `label` (string; optional; dynamic): Alias for text.
657
656
  - `variant` (string; optional; static; default: "default"; values: default, muted): Text visual variant.
657
+ - `color` (string; optional; dynamic): Optional CSS color for controlled previews.
658
+ - `size` (string | number; optional; dynamic): Optional font size. Numbers are treated as px.
658
659
  - `class` (string; optional; static): Additional host-controlled CSS class.
659
660
 
660
661
  ### Children
@@ -1,6 +1,6 @@
1
1
  # SlexKit Full LLM Documentation
2
2
 
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
 
5
5
  This file concatenates SlexKit's canonical English Markdown docs. `slex` fences are preserved exactly.
6
6
 
@@ -27,7 +27,7 @@ Source: README.md
27
27
  <a href="README.zh-CN.md">简体中文</a>
28
28
  </p>
29
29
  <p>
30
- <img alt="version" src="https://img.shields.io/badge/version-0.2.0-18181b">
30
+ <img alt="version" src="https://img.shields.io/badge/version-0.3.1-18181b">
31
31
  <img alt="script" src="https://img.shields.io/badge/Slex-v0.1-18181b">
32
32
  <img alt="TypeScript" src="https://img.shields.io/badge/runtime-TypeScript-3178c6">
33
33
  <img alt="Svelte 5" src="https://img.shields.io/badge/components-Svelte_5-ff3e00">
@@ -43,6 +43,8 @@ It is built for chat messages, documents, agent panels, tool results, and AI-aut
43
43
 
44
44
  ## Installation
45
45
 
46
+ > Just want to use SlexKit in Obsidian? Open **Settings -> Community plugins**, search for **SlexKit**, then install and enable it. The npm package below is for developers integrating SlexKit into web apps, Markdown renderers, Streamdown, or custom hosts.
47
+
46
48
  ```sh
47
49
  npm install slexkit
48
50
  ```
@@ -127,7 +129,6 @@ Markdown platforms without SlexKit support show the fallback text. Hosts with Sl
127
129
  | `@slexkit/components-svelte` | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` | Svelte component registration |
128
130
  | `@slexkit/theme-shadcn` | `npm install @slexkit/theme-shadcn` | CSS theme tokens |
129
131
  | `@slexkit/streamdown` | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` | React / Streamdown Markdown renderer |
130
- | `@slexkit/obsidian` | `npm install slexkit @slexkit/obsidian` | Obsidian plugin adapter |
131
132
  | `@slexkit/mcp` | `npx -y @slexkit/mcp` | Read-only MCP server for docs, examples, and source validation |
132
133
 
133
134
  See [Package Boundaries](site/content/reference/packages/en-US.md) for details.
@@ -139,7 +140,7 @@ See [Package Boundaries](site/content/reference/packages/en-US.md) for details.
139
140
  | Browser DOM | `mount()`, `ingest()`, `boot()`, `disposeNamespace()` |
140
141
  | Markdown renderers | `createSlexKitMarkdownRuntimeHost()` |
141
142
  | React / Streamdown | `@slexkit/streamdown` |
142
- | Obsidian | `@slexkit/obsidian` |
143
+ | Obsidian | Install **SlexKit** from Community Plugins; release repo: <https://github.com/slexkit/obsidian-slexkit> |
143
144
  | AI agents | `@slexkit/mcp`, `llms.txt`, SlexKit skill docs |
144
145
  | Custom components | `register()`, `registerSvelteComponent()`, `registerSubset()` |
145
146
 
@@ -320,6 +321,8 @@ slexkitRenderMode: component
320
321
 
321
322
  # Getting Started
322
323
 
324
+ > Just want to install the Obsidian plugin? Open **Settings -> Community plugins**, search for **SlexKit**, then install and enable it. The rest of this page is for developers integrating SlexKit into web apps, Markdown hosts, Streamdown, or custom runtimes.
325
+
323
326
  Install `slexkit`, mount a trusted fragment, and you're off. Hand off Markdown / React / Obsidian details to dedicated guides — this page keeps the core integration path focused.
324
327
 
325
328
  ## Installation Entry
@@ -343,7 +346,7 @@ For clearer package boundaries, choose scoped packages by host:
343
346
  | Official Svelte component registration | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` |
344
347
  | Standalone shadcn-token theme CSS | `npm install @slexkit/theme-shadcn` |
345
348
  | React + Streamdown Markdown host | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` |
346
- | Obsidian vault rendering | `npm install slexkit @slexkit/obsidian` |
349
+ | Obsidian vault rendering | Install **SlexKit** from Obsidian Community Plugins |
347
350
 
348
351
  `@slexkit/runtime` and `@slexkit/components-svelte` are thin wrappers around the root package, not independent implementations.
349
352
 
@@ -458,17 +461,17 @@ slexkitRenderMode: component
458
461
 
459
462
  # Integration
460
463
 
461
- SlexKit ships two official plugins: Streamdown and Obsidian. Both process only explicit `slex` fences — they don't scan ordinary JavaScript, JSON, or unlabeled code blocks. For the full API and host contract, see the [Host Integration reference](/docs/reference/integration).
464
+ SlexKit ships the Streamdown package in this repository and maintains the official Obsidian plugin in a separate release repository. Both integrations process only explicit `slex` fences — they don't scan ordinary JavaScript, JSON, or unlabeled code blocks. For the full API and host contract, see the [Host Integration reference](/docs/reference/integration).
462
465
 
463
466
  ## Plugin Selection
464
467
 
465
468
  | Host | Package | Use case | Runtime boundary |
466
469
  |---|---|---|---|
467
470
  | React / Streamdown | `@slexkit/streamdown` | Chat messages, AI output, React Markdown pages | trusted or secure |
468
- | Obsidian | `@slexkit/obsidian` | Slex fences in local vault reading mode | trusted readonly |
471
+ | Obsidian | `slexkit/obsidian-slexkit` | Slex fences in local vault reading mode | trusted readonly |
469
472
  | Custom Markdown host | `slexkit` | Product-specific Markdown renderer or document viewer | trusted or secure |
470
473
 
471
- Use the packaged plugin when the host is Streamdown or Obsidian. Use `createSlexKitMarkdownRuntimeHost` directly for custom Markdown renderers.
474
+ Use the packaged plugin when the host is Streamdown. Use the separate [SlexKit plugin repository](https://github.com/slexkit/obsidian-slexkit) for Obsidian installs and releases. Use `createSlexKitMarkdownRuntimeHost` directly for custom Markdown renderers.
472
475
 
473
476
  Package installation details and release boundaries are tracked in [Package Boundaries](/docs/reference/packages).
474
477
 
@@ -559,15 +562,26 @@ The secure runtime deployment checklist lives in [Secure Runtime Setup](security
559
562
 
560
563
  ## Obsidian
561
564
 
565
+ > If your goal is only to install the Obsidian plugin, you do not need the developer integration material above. Search for **SlexKit** in Obsidian **Community plugins**, then install and enable it.
566
+
562
567
  The Obsidian plugin targets local vault content. It registers a `slex` code block processor in reading mode, renders the fence as a readonly interactive fragment, and does not write output back to notes.
563
568
 
564
- Build the plugin:
569
+ Install the plugin from Obsidian Community Plugins:
565
570
 
566
- ```sh
567
- bun run --filter @slexkit/obsidian build
571
+ 1. Open **Settings -> Community plugins**.
572
+ 2. Disable **Restricted mode** if needed.
573
+ 3. Search for **SlexKit**.
574
+ 4. Install and enable the plugin.
575
+
576
+ The current community release is desktop-only until mobile vault testing is complete. The plugin is compatible with Obsidian 1.5.0+.
577
+
578
+ BRAT and manual release assets remain useful for testing unreleased builds:
579
+
580
+ ```text
581
+ BRAT repository: https://github.com/slexkit/obsidian-slexkit
568
582
  ```
569
583
 
570
- Copy release assets into the vault:
584
+ Manual installs copy the GitHub release assets into the vault:
571
585
 
572
586
  ```text
573
587
  .obsidian/plugins/slexkit/
@@ -603,7 +617,7 @@ Blocks in the same note share one Markdown artifact runtime, so a state-only fen
603
617
 
604
618
  ## Obsidian Boundary
605
619
 
606
- `@slexkit/obsidian` v0 is a trusted readonly adapter. Content comes from the user's local vault; the plugin is not a sandbox for third-party Markdown or agent output.
620
+ The official plugin is a trusted readonly adapter. Content comes from the user's local vault; the plugin is not a sandbox for third-party Markdown or agent output.
607
621
 
608
622
  For untrusted content, use secure mode in a web host with an explicit sandbox frame and host policy.
609
623
 
@@ -1058,7 +1072,7 @@ For exact policy fields and allowed adapter hooks, use the [Security Runtime Con
1058
1072
 
1059
1073
  `@slexkit/streamdown` can run trusted or secure. Use secure mode for chat messages and agent output unless the message source is already trusted by the host.
1060
1074
 
1061
- `@slexkit/obsidian` v0 is a trusted readonly adapter for local vault content. It should not be used as the isolation boundary for third-party Markdown or direct agent output.
1075
+ The official Obsidian plugin is a trusted readonly adapter for local vault content. It should not be used as the isolation boundary for third-party Markdown or direct agent output.
1062
1076
 
1063
1077
  Custom Markdown hosts should still process only fences whose language is exactly `slex` and should preserve readable Markdown fallback for non-SlexKit environments.
1064
1078
 
@@ -1347,7 +1361,7 @@ Source: content/examples/first-interaction/zh-CN.md
1347
1361
  step: 1,
1348
1362
  onchange: "g.count = Number($event)"
1349
1363
  },
1350
- "stat:count": { label: "当前数值", "$value": "g.count" },
1364
+ "stat:countStat": { label: "当前数值", "$value": "g.count" },
1351
1365
  "badge:level": {
1352
1366
  "$label": "g.count < 30 ? '低' : g.count < 70 ? '中' : '高'",
1353
1367
  "$tone": "g.count < 30 ? 'success' : g.count < 70 ? 'warning' : 'danger'"
@@ -1537,7 +1551,6 @@ Source: content/examples/salary-calculator/zh-CN.md
1537
1551
  },
1538
1552
  layout: {
1539
1553
  "section:salary": {
1540
- eyebrow: "计算器",
1541
1554
  title: "五险一金计算器",
1542
1555
  subtitle: "输入税前工资和城市,实时计算五险一金明细。",
1543
1556
  "grid:params": {
@@ -1642,7 +1655,6 @@ Source: content/examples/project-cost-estimator/zh-CN.md
1642
1655
  },
1643
1656
  layout: {
1644
1657
  "section:estimator": {
1645
- eyebrow: "计算器",
1646
1658
  title: "软件项目成本估算器",
1647
1659
  subtitle: "输入团队配置和周期,成本自动算出来。",
1648
1660
  "card:estimator": {
@@ -1762,7 +1774,6 @@ Source: content/examples/voltage-divider/zh-CN.md
1762
1774
  },
1763
1775
  layout: {
1764
1776
  "section:divider": {
1765
- eyebrow: "计算器",
1766
1777
  title: "分压器计算器",
1767
1778
  subtitle: "两个电阻串联,从中间引出电压。",
1768
1779
  "card:divider": {
@@ -1845,7 +1856,6 @@ $$|H(f)| = \frac{1}{\sqrt{1 + (f/f_c)^2}}$$
1845
1856
  },
1846
1857
  layout: {
1847
1858
  "section:params": {
1848
- eyebrow: "计算器",
1849
1859
  title: "RC 低通滤波器",
1850
1860
  subtitle: "一个电阻加一个电容,把高频噪声滤掉。",
1851
1861
  "card:params": {
@@ -1961,8 +1971,7 @@ $$Error = \frac{|BR_{actual} - BR_{target}|}{BR_{target}} \times 100\%$$
1961
1971
  tone: function () { var e = this.error(); return e < 0.5 ? "success" : e < 2 ? "info" : e < 5 ? "warning" : "danger"; }
1962
1972
  },
1963
1973
  layout: {
1964
- "section:baud": {
1965
- eyebrow: "计算器",
1974
+ "section:baudCalculator": {
1966
1975
  title: "波特率误差计算器",
1967
1976
  subtitle: "输入晶振频率和目标波特率,计算误差。",
1968
1977
  "card:baud": {
@@ -2155,7 +2164,7 @@ Source: content/examples/project-dashboard/zh-CN.md
2155
2164
  "card:sprint": {
2156
2165
  title: "Sprint 进度",
2157
2166
  "progress:sp": { label: "完成度", "$value": "g.sprintProgress" },
2158
- "stat:scope": { "$label": "范围状态", "$value": "g.scopeStatus()" },
2167
+ "stat:scope": { label: "范围状态", "$value": "g.scopeStatus()" },
2159
2168
  "badge:flag": { "$label": "g.scope === 'on-track' ? '正常' : g.scope === 'at-risk' ? '⚠ 预警' : '🚨 偏离'", "$tone": "g.scope === 'on-track' ? 'success' : g.scope === 'at-risk' ? 'warning' : 'danger'" }
2160
2169
  },
2161
2170
  "card:quality": {
@@ -2630,7 +2639,10 @@ Source: content/examples/cross-doc-state-lab/zh-CN.md
2630
2639
  layout: {
2631
2640
  "card:a": {
2632
2641
  title: "观察面板 A — 纯文本样式",
2633
- "stat:size": { "$label": "'字体大小:' + g.size + 'px'", "$value": "g.color" },
2642
+ "column:stylePreview": {
2643
+ "text:styleMeta": { "$text": "'字体大小:' + g.size + 'px'" },
2644
+ "text:styledValue": { "$text": "g.color", "$color": "g.color", "$size": "g.size" }
2645
+ },
2634
2646
  "callout:preview": {
2635
2647
  "$tone": "g.theme === 'dark' ? 'danger' : g.theme === 'info' ? 'info' : 'success'",
2636
2648
  "$text": "g.theme === 'dark' ? '暗色模式:适合夜间阅读的配色方案。' : g.theme === 'info' ? '信息模式:用于强调技术细节。' : '明亮模式:默认的文档阅读配色。'"
@@ -4090,8 +4102,8 @@ Single-line text input with controlled value, placeholder, label, description, n
4090
4102
  - Related components: `select` for option selection, `slider` for numeric ranges.
4091
4103
  - Typically placed inside a `column` to compose forms.
4092
4104
  - Use `$value` and `onchange` for state binding.
4093
- - Numeric inputs show decrement and increment buttons by default. Use `step`, `min`, and `max` to define quick-adjust behavior, or set `controls: false` to hide them.
4094
- - `onchange` fires when the user edits the value or clicks a step control.
4105
+ - Numeric and engineering inputs render only the native input. Use `slider` for range adjustment; SlexKit no longer adds custom decrement or increment buttons.
4106
+ - `onchange` fires when the user edits the value.
4095
4107
  - `type: "number"` still emits a string value. Convert with `Number($event)` or use `type: "engineering"` to read parsed results.
4096
4108
  - Use `invalid` plus `error` for validation feedback. Error text is linked through `aria-describedby`.
4097
4109
 
@@ -4158,7 +4170,7 @@ Supports scientific notation and SI prefixes: `p`, `n`, `u`, `µ`, `m`, `k`, `K`
4158
4170
 
4159
4171
  ## API Reference {#api}
4160
4172
 
4161
- <!-- slex:spec-api:start component="input" sourceHash="08bdd046" -->
4173
+ <!-- slex:spec-api:start component="input" sourceHash="a1afe57e" -->
4162
4174
  | Field | Type | Required | Dynamic | Default | Description |
4163
4175
  |---|---|---|---|---|---|
4164
4176
  | `value` | string | No | Yes | | Current input value. |
@@ -4181,7 +4193,6 @@ Supports scientific notation and SI prefixes: `p`, `n`, `u`, `µ`, `m`, `k`, `K`
4181
4193
  | `min` | string \| number | No | Yes | | Minimum value used by numeric input controls. |
4182
4194
  | `max` | string \| number | No | Yes | | Maximum value used by numeric input controls. |
4183
4195
  | `step` | string \| number | No | Yes | | Step size used by numeric input controls. |
4184
- | `controls` | boolean | No | Yes | `true` | Show decrement and increment buttons for numeric inputs. |
4185
4196
  | `onchange` | write-expression | No | No | | Write expression invoked when the value changes. |
4186
4197
  <!-- slex:spec-api:end -->
4187
4198
 
@@ -5256,13 +5267,15 @@ Output text content for status messages, descriptions, and result display.
5256
5267
 
5257
5268
  ## API Reference {#api}
5258
5269
 
5259
- <!-- slex:spec-api:start component="text" sourceHash="32589fbc" -->
5270
+ <!-- slex:spec-api:start component="text" sourceHash="745fea9a" -->
5260
5271
  | Field | Type | Required | Dynamic | Default | Description |
5261
5272
  |---|---|---|---|---|---|
5262
5273
  | `text` | string | No | Yes | | Displayed text. |
5263
5274
  | `content` | string | No | Yes | | Alias for text. |
5264
5275
  | `label` | string | No | Yes | | Alias for text. |
5265
5276
  | `variant` | string: default, muted | No | No | `"default"` | Text visual variant. |
5277
+ | `color` | string | No | Yes | | Optional CSS color for controlled previews. |
5278
+ | `size` | string \| number | No | Yes | | Optional font size. Numbers are treated as px. |
5266
5279
  | `class` | string | No | No | | Additional host-controlled CSS class. |
5267
5280
  <!-- slex:spec-api:end -->
5268
5281
 
@@ -6322,16 +6335,16 @@ The renderer handles `slex` fences. It supports both trusted and secure runtime
6322
6335
 
6323
6336
  ## Obsidian integration
6324
6337
 
6325
- The `@slexkit/obsidian` package registers the `slex` fenced code block processor in Obsidian:
6338
+ The official Obsidian plugin lives in <https://github.com/slexkit/obsidian-slexkit> and registers the `slex` fenced code block processor:
6326
6339
 
6327
6340
  ```ts
6328
- // In the Obsidian plugin:
6341
+ // In the plugin:
6329
6342
  registerMarkdownCodeBlockProcessor("slex", (source, el, ctx) => { ... });
6330
6343
  ```
6331
6344
 
6332
6345
  The adapter renders blocks in **reading mode only** and does not write back to the vault. Blocks within the same note share a trusted artifact runtime.
6333
6346
 
6334
- **Important**: The Obsidian adapter uses trusted mode because it renders content from the user's login vault. It is not designed as a security boundary for untrusted or agent-generated Markdown.
6347
+ **Important**: The Obsidian adapter uses trusted mode because it renders content from the user's local vault. It is not designed as a security boundary for untrusted or agent-generated Markdown.
6335
6348
 
6336
6349
  ## Writing a custom host adapter
6337
6350
 
@@ -6715,7 +6728,6 @@ slexkit (root - real code)
6715
6728
  @slexkit/components-svelte (thin wrapper) ─── re-exports slexkit/components-svelte
6716
6729
  @slexkit/theme-shadcn ─── CSS only
6717
6730
  @slexkit/streamdown ─── React/Streamdown renderer
6718
- @slexkit/obsidian ─── Obsidian plugin
6719
6731
  @slexkit/mcp ─── read-only MCP server for AI agents
6720
6732
  ```
6721
6733
 
@@ -6807,15 +6819,15 @@ export function Message({ markdown }: { markdown: string }) {
6807
6819
 
6808
6820
  Processes `slex` fences. Supports both trusted and secure runtime modes.
6809
6821
 
6810
- ## @slexkit/obsidian
6822
+ ## Obsidian plugin
6811
6823
 
6812
- Obsidian plugin adapter. Registers SlexKit fenced code block processors and renders local vault content in reading mode.
6824
+ The official Obsidian plugin lives in a separate release repository: <https://github.com/slexkit/obsidian-slexkit>.
6813
6825
 
6814
- ```sh
6815
- npm install slexkit @slexkit/obsidian
6816
- ```
6826
+ Install **SlexKit** through Obsidian Community Plugins for normal vault use. Use BRAT or manual GitHub release assets only when testing unreleased builds from `slexkit/obsidian-slexkit`.
6827
+
6828
+ The community plugin is currently desktop-only and compatible with Obsidian 1.5.0+. Mobile support should be enabled only after real mobile vault testing.
6817
6829
 
6818
- The adapter uses trusted runtime mode -it renders content from the user's local vault and is not designed as a sandbox for third-party or agent-generated Markdown. Obsidian secure sandbox support is not part of the v0 adapter.
6830
+ The adapter uses trusted runtime mode - it renders content from the user's local vault and is not designed as a sandbox for third-party or agent-generated Markdown. Secure sandbox support is not part of the v0 adapter.
6819
6831
 
6820
6832
  ## @slexkit/mcp
6821
6833
 
@@ -6836,7 +6848,7 @@ The server does not modify project files. Use it when an agent needs current Sle
6836
6848
  | With Svelte components | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` |
6837
6849
  | Add shadcn theme | `npm install @slexkit/theme-shadcn` |
6838
6850
  | React/Streamdown host | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` |
6839
- | Obsidian plugin | `npm install slexkit @slexkit/obsidian` |
6851
+ | Obsidian plugin | Install **SlexKit** from Obsidian Community Plugins |
6840
6852
  | AI agent MCP server | `npx -y @slexkit/mcp` |
6841
6853
 
6842
6854
  ## v0 packaging strategy
@@ -6853,7 +6865,7 @@ bun run test
6853
6865
  bun run smoke:release
6854
6866
  ```
6855
6867
 
6856
- The release smoke packs and installs every scoped package, verifies public entry points, verifies CSS subpath exports, loads the Obsidian CJS bundle with an Obsidian module mock, and starts the MCP stdio binary to check `initialize`, `tools/list`, and `slexkitValidate`.
6868
+ The release smoke packs and installs every scoped package in this repository, verifies public entry points, verifies CSS subpath exports, and starts the MCP stdio binary to check `initialize`, `tools/list`, and `slexkitValidate`.
6857
6869
 
6858
6870
  ---
6859
6871
 
@@ -7489,7 +7501,7 @@ A generation should include a plain Markdown fallback so the output degrades gra
7489
7501
 
7490
7502
  ~~~~md
7491
7503
  ```slex
7492
- { namespace: "status", ... }
7504
+ { namespace: "status", layout: { "badge:state": { label: "3/4 complete", tone: "info" } } }
7493
7505
  ```
7494
7506
 
7495
7507
  **Status:** 3/4 complete
@@ -7562,6 +7574,24 @@ slexkitRenderMode: component
7562
7574
 
7563
7575
  All notable changes to SlexKit.
7564
7576
 
7577
+ ## v0.3.1 - Host stability and control rendering hardening
7578
+
7579
+ ### Added
7580
+ - Runtime style safety tests that block broad `:has()` selectors, `clip-path`, and slider track regressions in shipped CSS.
7581
+ - Regression coverage for disabled Switch, Checkbox, and Radio state attributes.
7582
+
7583
+ ### Changed
7584
+ - CI now installs dependencies with `bun install --frozen-lockfile` and runs lint before tests.
7585
+ - Disabled Switch, Checkbox, and Radio styling now uses explicit `data-disabled` attributes instead of broad relational selectors.
7586
+ - Select and sr-only helper styles avoid `clip-path` for better host and Obsidian CSS compatibility.
7587
+
7588
+ ### Fixed
7589
+ - Slider thumb rendering artifacts caused by painting the range track on the native input box.
7590
+ - Input focus visibility after removing custom engineering steppers.
7591
+ - Home RC example input labels now use native Input component labels instead of separate text labels.
7592
+ - Stat cards no longer clip updated text during cross-document state examples.
7593
+ - Markdown calculator examples no longer render duplicate section labels.
7594
+
7565
7595
  ## v0.3.0 - Examples overhaul with component audit and i18n
7566
7596
 
7567
7597
  ### Added
@@ -7976,7 +8006,6 @@ Since: 0.1.0
7976
8006
  - `min` (string | number; optional; dynamic): Minimum value used by numeric input controls.
7977
8007
  - `max` (string | number; optional; dynamic): Maximum value used by numeric input controls.
7978
8008
  - `step` (string | number; optional; dynamic): Step size used by numeric input controls.
7979
- - `controls` (boolean; optional; dynamic; default: true): Show decrement and increment buttons for numeric inputs.
7980
8009
  - `onchange` (write-expression; optional; static): Write expression invoked when the value changes.
7981
8010
 
7982
8011
  ### Children
@@ -8276,6 +8305,8 @@ Since: 0.1.0
8276
8305
  - `content` (string; optional; dynamic): Alias for text.
8277
8306
  - `label` (string; optional; dynamic): Alias for text.
8278
8307
  - `variant` (string; optional; static; default: "default"; values: default, muted): Text visual variant.
8308
+ - `color` (string; optional; dynamic): Optional CSS color for controlled previews.
8309
+ - `size` (string | number; optional; dynamic): Optional font size. Numbers are treated as px.
8279
8310
  - `class` (string; optional; static): Additional host-controlled CSS class.
8280
8311
 
8281
8312
  ### Children
@@ -949,16 +949,16 @@ The renderer handles `slex` fences. It supports both trusted and secure runtime
949
949
 
950
950
  ## Obsidian integration
951
951
 
952
- The `@slexkit/obsidian` package registers the `slex` fenced code block processor in Obsidian:
952
+ The official Obsidian plugin lives in <https://github.com/slexkit/obsidian-slexkit> and registers the `slex` fenced code block processor:
953
953
 
954
954
  ```ts
955
- // In the Obsidian plugin:
955
+ // In the plugin:
956
956
  registerMarkdownCodeBlockProcessor("slex", (source, el, ctx) => { ... });
957
957
  ```
958
958
 
959
959
  The adapter renders blocks in **reading mode only** and does not write back to the vault. Blocks within the same note share a trusted artifact runtime.
960
960
 
961
- **Important**: The Obsidian adapter uses trusted mode because it renders content from the user's login vault. It is not designed as a security boundary for untrusted or agent-generated Markdown.
961
+ **Important**: The Obsidian adapter uses trusted mode because it renders content from the user's local vault. It is not designed as a security boundary for untrusted or agent-generated Markdown.
962
962
 
963
963
  ## Writing a custom host adapter
964
964
 
@@ -1338,7 +1338,6 @@ slexkit (root - real code)
1338
1338
  @slexkit/components-svelte (thin wrapper) ─── re-exports slexkit/components-svelte
1339
1339
  @slexkit/theme-shadcn ─── CSS only
1340
1340
  @slexkit/streamdown ─── React/Streamdown renderer
1341
- @slexkit/obsidian ─── Obsidian plugin
1342
1341
  @slexkit/mcp ─── read-only MCP server for AI agents
1343
1342
  ```
1344
1343
 
@@ -1430,15 +1429,15 @@ export function Message({ markdown }: { markdown: string }) {
1430
1429
 
1431
1430
  Processes `slex` fences. Supports both trusted and secure runtime modes.
1432
1431
 
1433
- ## @slexkit/obsidian
1432
+ ## Obsidian plugin
1434
1433
 
1435
- Obsidian plugin adapter. Registers SlexKit fenced code block processors and renders local vault content in reading mode.
1434
+ The official Obsidian plugin lives in a separate release repository: <https://github.com/slexkit/obsidian-slexkit>.
1436
1435
 
1437
- ```sh
1438
- npm install slexkit @slexkit/obsidian
1439
- ```
1436
+ Install **SlexKit** through Obsidian Community Plugins for normal vault use. Use BRAT or manual GitHub release assets only when testing unreleased builds from `slexkit/obsidian-slexkit`.
1437
+
1438
+ The community plugin is currently desktop-only and compatible with Obsidian 1.5.0+. Mobile support should be enabled only after real mobile vault testing.
1440
1439
 
1441
- The adapter uses trusted runtime mode -it renders content from the user's local vault and is not designed as a sandbox for third-party or agent-generated Markdown. Obsidian secure sandbox support is not part of the v0 adapter.
1440
+ The adapter uses trusted runtime mode - it renders content from the user's local vault and is not designed as a sandbox for third-party or agent-generated Markdown. Secure sandbox support is not part of the v0 adapter.
1442
1441
 
1443
1442
  ## @slexkit/mcp
1444
1443
 
@@ -1459,7 +1458,7 @@ The server does not modify project files. Use it when an agent needs current Sle
1459
1458
  | With Svelte components | `npm install slexkit @slexkit/runtime @slexkit/components-svelte` |
1460
1459
  | Add shadcn theme | `npm install @slexkit/theme-shadcn` |
1461
1460
  | React/Streamdown host | `npm install slexkit @slexkit/theme-shadcn @slexkit/streamdown streamdown react react-dom` |
1462
- | Obsidian plugin | `npm install slexkit @slexkit/obsidian` |
1461
+ | Obsidian plugin | Install **SlexKit** from Obsidian Community Plugins |
1463
1462
  | AI agent MCP server | `npx -y @slexkit/mcp` |
1464
1463
 
1465
1464
  ## v0 packaging strategy
@@ -1476,6 +1475,6 @@ bun run test
1476
1475
  bun run smoke:release
1477
1476
  ```
1478
1477
 
1479
- The release smoke packs and installs every scoped package, verifies public entry points, verifies CSS subpath exports, loads the Obsidian CJS bundle with an Obsidian module mock, and starts the MCP stdio binary to check `initialize`, `tools/list`, and `slexkitValidate`.
1478
+ The release smoke packs and installs every scoped package in this repository, verifies public entry points, verifies CSS subpath exports, and starts the MCP stdio binary to check `initialize`, `tools/list`, and `slexkitValidate`.
1480
1479
 
1481
1480
  ---
package/dist/ai/llms.txt CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  SlexKit raw docs are Markdown (`.md`) with explicit `slex` fences. The interactive layer is the fenced `slex` source inside each Markdown page.
14
14
 
15
- Version: 0.3.0
15
+ Version: 0.3.1
16
16
 
17
17
  ## Table of Contents
18
18