@dixy-ui/themes 0.0.0-stage → 0.1.0-beta.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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -2
  3. package/dist/ansi/ornament.d.ts +3 -0
  4. package/dist/ansi/ornament.js +8 -0
  5. package/dist/ansi-panes.css +929 -0
  6. package/dist/art-deco.css +850 -0
  7. package/dist/atelier/ornament.d.ts +4 -0
  8. package/dist/atelier/ornament.js +9 -0
  9. package/dist/atomic/ornament.d.ts +3 -0
  10. package/dist/atomic/ornament.js +8 -0
  11. package/dist/atomic-lounge.css +946 -0
  12. package/dist/authoring.d.ts +142 -0
  13. package/dist/authoring.js +83 -0
  14. package/dist/azulejo/ornament.d.ts +3 -0
  15. package/dist/azulejo/ornament.js +8 -0
  16. package/dist/azulejo-tile.css +962 -0
  17. package/dist/blueprint/ornament.d.ts +3 -0
  18. package/dist/blueprint/ornament.js +8 -0
  19. package/dist/blueprint.css +897 -0
  20. package/dist/brutalist/ornament.d.ts +3 -0
  21. package/dist/brutalist/ornament.js +8 -0
  22. package/dist/brutalist-concrete.css +936 -0
  23. package/dist/bytes.json +162 -0
  24. package/dist/candy-clay.css +778 -0
  25. package/dist/catalog.d.ts +1346 -0
  26. package/dist/catalog.js +1379 -0
  27. package/dist/character.d.ts +103 -0
  28. package/dist/character.js +477 -0
  29. package/dist/chrome.d.ts +114 -0
  30. package/dist/chrome.js +247 -0
  31. package/dist/clay/ornament.d.ts +3 -0
  32. package/dist/clay/ornament.js +8 -0
  33. package/dist/compile-css.d.ts +3 -0
  34. package/dist/compile-css.js +133 -0
  35. package/dist/deco/ornament.d.ts +3 -0
  36. package/dist/deco/ornament.js +8 -0
  37. package/dist/diwali/ornament.d.ts +3 -0
  38. package/dist/diwali/ornament.js +8 -0
  39. package/dist/diwali-lights.css +894 -0
  40. package/dist/documents.d.ts +104 -0
  41. package/dist/documents.js +1411 -0
  42. package/dist/forest/ornament.d.ts +3 -0
  43. package/dist/forest/ornament.js +12 -0
  44. package/dist/foundations.d.ts +105 -0
  45. package/dist/foundations.js +140 -0
  46. package/dist/frame-corners.d.ts +5 -0
  47. package/dist/frame-corners.js +5 -0
  48. package/dist/frame-styles.d.ts +36 -0
  49. package/dist/frame-styles.js +146 -0
  50. package/dist/freeze.d.ts +2 -0
  51. package/dist/freeze.js +9 -0
  52. package/dist/freighter/ornament.d.ts +3 -0
  53. package/dist/freighter/ornament.js +8 -0
  54. package/dist/freighter.css +942 -0
  55. package/dist/glass/ornament.d.ts +3 -0
  56. package/dist/glass/ornament.js +8 -0
  57. package/dist/glass-ui.css +923 -0
  58. package/dist/hardware/ornament.d.ts +4 -0
  59. package/dist/hardware/ornament.js +10 -0
  60. package/dist/holi/ornament.d.ts +3 -0
  61. package/dist/holi/ornament.js +8 -0
  62. package/dist/holi-colours.css +887 -0
  63. package/dist/hud/ornament.d.ts +3 -0
  64. package/dist/hud/ornament.js +8 -0
  65. package/dist/light/ornament.d.ts +3 -0
  66. package/dist/light/ornament.js +10 -0
  67. package/dist/living-forest.css +917 -0
  68. package/dist/lunar/ornament.d.ts +3 -0
  69. package/dist/lunar/ornament.js +8 -0
  70. package/dist/lunar-new-year.css +811 -0
  71. package/dist/manifests.d.ts +2485 -0
  72. package/dist/manifests.js +264 -0
  73. package/dist/material-light.css +880 -0
  74. package/dist/neon/ornament.d.ts +3 -0
  75. package/dist/neon/ornament.js +8 -0
  76. package/dist/neon-night-market.css +944 -0
  77. package/dist/ocean/ornament.d.ts +3 -0
  78. package/dist/ocean/ornament.js +8 -0
  79. package/dist/ocean-depths.css +825 -0
  80. package/dist/orbital-hud.css +973 -0
  81. package/dist/organic-css.d.ts +3 -0
  82. package/dist/organic-css.js +23 -0
  83. package/dist/organic-geometry.d.ts +20 -0
  84. package/dist/organic-geometry.js +74 -0
  85. package/dist/organic-ornament.d.ts +9 -0
  86. package/dist/organic-ornament.js +28 -0
  87. package/dist/organic-paint-launch.d.ts +43 -0
  88. package/dist/organic-paint-launch.js +1156 -0
  89. package/dist/organic-paint-world.d.ts +24 -0
  90. package/dist/organic-paint-world.js +676 -0
  91. package/dist/organic-paint.d.ts +50 -0
  92. package/dist/organic-paint.js +695 -0
  93. package/dist/organic-runtime.d.ts +4 -0
  94. package/dist/organic-runtime.js +231 -0
  95. package/dist/organic-settings.d.ts +680 -0
  96. package/dist/organic-settings.js +433 -0
  97. package/dist/ornament-parts.d.ts +20 -0
  98. package/dist/ornament-parts.js +15 -0
  99. package/dist/papel-picado.css +904 -0
  100. package/dist/phosphor/ornament.d.ts +3 -0
  101. package/dist/phosphor/ornament.js +8 -0
  102. package/dist/phosphor-terminal.css +1011 -0
  103. package/dist/picado/ornament.d.ts +3 -0
  104. package/dist/picado/ornament.js +8 -0
  105. package/dist/prism/ornament.d.ts +4 -0
  106. package/dist/prism/ornament.js +9 -0
  107. package/dist/prism-glass.css +970 -0
  108. package/dist/recipes.d.ts +938 -0
  109. package/dist/recipes.js +939 -0
  110. package/dist/resolve.d.ts +40 -0
  111. package/dist/resolve.js +24 -0
  112. package/dist/retro/ornament.d.ts +5 -0
  113. package/dist/retro/ornament.js +10 -0
  114. package/dist/retro-os.css +867 -0
  115. package/dist/riso/ornament.d.ts +3 -0
  116. package/dist/riso/ornament.js +8 -0
  117. package/dist/riso-zine.css +786 -0
  118. package/dist/sail/ornament.d.ts +3 -0
  119. package/dist/sail/ornament.js +8 -0
  120. package/dist/scrapbook.css +685 -0
  121. package/dist/signal/ornament.d.ts +4 -0
  122. package/dist/signal/ornament.js +11 -0
  123. package/dist/skins/ansi-panes.d.ts +68 -0
  124. package/dist/skins/ansi-panes.js +68 -0
  125. package/dist/skins/art-deco.d.ts +68 -0
  126. package/dist/skins/art-deco.js +68 -0
  127. package/dist/skins/atomic-lounge.d.ts +68 -0
  128. package/dist/skins/atomic-lounge.js +68 -0
  129. package/dist/skins/azulejo-tile.d.ts +68 -0
  130. package/dist/skins/azulejo-tile.js +68 -0
  131. package/dist/skins/blueprint.d.ts +68 -0
  132. package/dist/skins/blueprint.js +68 -0
  133. package/dist/skins/brutalist-concrete.d.ts +68 -0
  134. package/dist/skins/brutalist-concrete.js +68 -0
  135. package/dist/skins/candy-clay.d.ts +57 -0
  136. package/dist/skins/candy-clay.js +57 -0
  137. package/dist/skins/diwali-lights.d.ts +68 -0
  138. package/dist/skins/diwali-lights.js +68 -0
  139. package/dist/skins/freighter.d.ts +68 -0
  140. package/dist/skins/freighter.js +68 -0
  141. package/dist/skins/glass-ui.d.ts +68 -0
  142. package/dist/skins/glass-ui.js +68 -0
  143. package/dist/skins/holi-colours.d.ts +68 -0
  144. package/dist/skins/holi-colours.js +68 -0
  145. package/dist/skins/living-forest.d.ts +68 -0
  146. package/dist/skins/living-forest.js +68 -0
  147. package/dist/skins/lunar-new-year.d.ts +68 -0
  148. package/dist/skins/lunar-new-year.js +68 -0
  149. package/dist/skins/material-light.d.ts +57 -0
  150. package/dist/skins/material-light.js +57 -0
  151. package/dist/skins/neon-night-market.d.ts +68 -0
  152. package/dist/skins/neon-night-market.js +68 -0
  153. package/dist/skins/ocean-depths.d.ts +57 -0
  154. package/dist/skins/ocean-depths.js +57 -0
  155. package/dist/skins/orbital-hud.d.ts +68 -0
  156. package/dist/skins/orbital-hud.js +68 -0
  157. package/dist/skins/papel-picado.d.ts +68 -0
  158. package/dist/skins/papel-picado.js +68 -0
  159. package/dist/skins/phosphor-terminal.d.ts +68 -0
  160. package/dist/skins/phosphor-terminal.js +68 -0
  161. package/dist/skins/prism-glass.d.ts +57 -0
  162. package/dist/skins/prism-glass.js +57 -0
  163. package/dist/skins/retro-os.d.ts +57 -0
  164. package/dist/skins/retro-os.js +57 -0
  165. package/dist/skins/riso-zine.d.ts +68 -0
  166. package/dist/skins/riso-zine.js +68 -0
  167. package/dist/skins/scrapbook.d.ts +57 -0
  168. package/dist/skins/scrapbook.js +57 -0
  169. package/dist/skins/solar-sail.d.ts +68 -0
  170. package/dist/skins/solar-sail.js +68 -0
  171. package/dist/skins/studio-hardware.d.ts +57 -0
  172. package/dist/skins/studio-hardware.js +57 -0
  173. package/dist/skins/sumi-ink.d.ts +68 -0
  174. package/dist/skins/sumi-ink.js +68 -0
  175. package/dist/skins/swiss-poster.d.ts +68 -0
  176. package/dist/skins/swiss-poster.js +68 -0
  177. package/dist/skins/tactile-atelier.d.ts +57 -0
  178. package/dist/skins/tactile-atelier.js +57 -0
  179. package/dist/skins/tokyo-transit.d.ts +68 -0
  180. package/dist/skins/tokyo-transit.js +68 -0
  181. package/dist/skins/winamp-signal.d.ts +57 -0
  182. package/dist/skins/winamp-signal.js +57 -0
  183. package/dist/skins/y2k-titanium.d.ts +57 -0
  184. package/dist/skins/y2k-titanium.js +57 -0
  185. package/dist/skins/yule-knit.d.ts +68 -0
  186. package/dist/skins/yule-knit.js +68 -0
  187. package/dist/solar-sail.css +901 -0
  188. package/dist/starters-launch.d.ts +361 -0
  189. package/dist/starters-launch.js +808 -0
  190. package/dist/studio-hardware.css +867 -0
  191. package/dist/sumi/ornament.d.ts +3 -0
  192. package/dist/sumi/ornament.js +8 -0
  193. package/dist/sumi-ink.css +733 -0
  194. package/dist/swiss/ornament.d.ts +3 -0
  195. package/dist/swiss/ornament.js +8 -0
  196. package/dist/swiss-poster.css +727 -0
  197. package/dist/tactile-atelier.css +922 -0
  198. package/dist/theme-document.schema.json +790 -0
  199. package/dist/theme-schema.d.ts +453 -0
  200. package/dist/theme-schema.js +416 -0
  201. package/dist/titanium/ornament.d.ts +3 -0
  202. package/dist/titanium/ornament.js +11 -0
  203. package/dist/tokyo-transit.css +756 -0
  204. package/dist/transit/ornament.d.ts +3 -0
  205. package/dist/transit/ornament.js +8 -0
  206. package/dist/winamp-signal.css +1048 -0
  207. package/dist/y2k-titanium.css +979 -0
  208. package/dist/yule/ornament.d.ts +3 -0
  209. package/dist/yule/ornament.js +8 -0
  210. package/dist/yule-knit.css +850 -0
  211. package/package.json +351 -3
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Akshay Saini
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,140 @@
1
- # Temporary Holding Version
1
+ # @dixy-ui/themes
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 32 starter themes for [Dixy UI](https://github.com/akssmax/DixyUI), from paper and glass to terminals and festivals, plus an authoring API for your own. Each theme is a material, a frame, a character and a chrome over the same accessible components.
4
+
5
+ [![npm](https://img.shields.io/npm/v/%40dixy-ui%2Fthemes/beta?label=npm&color=7c3aed)](https://www.npmjs.com/package/@dixy-ui/themes) [![MIT](https://img.shields.io/badge/license-MIT-7c3aed)](https://github.com/akssmax/DixyUI/blob/main/LICENSE)
6
+
7
+ > **Public beta.** APIs may change between `0.x` releases. See the [changelog](./CHANGELOG.md) and the [known issues](https://github.com/akssmax/DixyUI#known-issues).
8
+
9
+ [Documentation](https://dixy-ui-docs.akshaysaini-design.workers.dev) · [Components](https://dixy-ui-docs.akshaysaini-design.workers.dev/docs/components/button) · [Themes](https://dixy-ui-docs.akshaysaini-design.workers.dev/#themes) · [GitHub](https://github.com/akssmax/DixyUI)
10
+
11
+ ## Install
12
+
13
+ ```sh
14
+ pnpm add @dixy-ui/react@beta @dixy-ui/themes@beta
15
+ ```
16
+
17
+ Requires `@dixy-ui/react`.
18
+
19
+ ## Quick start
20
+
21
+ Every starter theme has its own entry point, so you only ship the one you use. Spread its settings onto `Theme` and import its stylesheet:
22
+
23
+ ```tsx
24
+ import "@dixy-ui/react/styles.css";
25
+ import "@dixy-ui/themes/retro-os.css";
26
+ import { Theme, Button } from "@dixy-ui/react";
27
+ import { retroOSTheme } from "@dixy-ui/themes/retro-os";
28
+
29
+ <Theme {...retroOSTheme}>
30
+ <Button>Save changes</Button>
31
+ </Theme>;
32
+ ```
33
+
34
+ Browse all 32 starters on the [landing page](https://dixy-ui-docs.akshaysaini-design.workers.dev/#themes) or build your own in the [playground](https://dixy-ui-docs.akshaysaini-design.workers.dev/playground).
35
+
36
+ ## Skins and ornament renderers
37
+
38
+ Import one definition and its stylesheet alongside `@dixy-ui/react/styles.css`. Skins change existing Dixy components. Each skin has an optional, independently imported React renderer; no graphics engine is required.
39
+
40
+ ```tsx
41
+ import { Theme, Button } from "@dixy-ui/react";
42
+ import { studioHardware } from "@dixy-ui/themes/studio-hardware";
43
+ import { HardwareOrnament } from "@dixy-ui/themes/studio-hardware/react";
44
+ import "@dixy-ui/react/styles.css";
45
+ import "@dixy-ui/themes/studio-hardware.css";
46
+
47
+ <Theme
48
+ skin={studioHardware}
49
+ ornamentRenderer={HardwareOrnament}
50
+ ornament="balanced"
51
+ relief={1}
52
+ >
53
+ <Button>Save changes</Button>
54
+ </Theme>;
55
+ ```
56
+
57
+ Every starter has its own entry point and stylesheet (for example `@dixy-ui/themes/retro-os` and `@dixy-ui/themes/retro-os.css`). Explicit material overrides use the optional @dixy-ui/react/materials.css pack. Undefined skin inherits, null clears; ThemeScope preserves the skin in popups.
58
+
59
+ Use authoring.defineSkin for compatible original definition/CSS pairs. Use a namespaced ID and scope CSS to actual data-dixy-skin parts; keep artwork separate from control semantics. The catalog contains metadata only. No raw CSS, JavaScript or shader is executed from imported playground presets.
60
+
61
+ Generated definitions and CSS come from portable src/documents.ts, trusted src/recipes.ts and the shared authoring compiler. src/manifests.ts contains presentation metadata. Run pnpm skins:generate after changing a source recipe, then pnpm check and pnpm package:check. Runtime artwork is drawn by SVG geometry or the optional native Canvas 2D frame renderer. Earlier image experiments are archived outside the package. See assets/PROVENANCE.md.
62
+
63
+ `@dixy-ui/themes/authoring` exports `parseThemeDocument`, `compileThemeDocument`, the closed JSON schema and field diagnostics. `@dixy-ui/themes/documents` supplies eleven starting documents. The compiler emits static CSS, a compatible v1 definition, complete Theme props and renderer import metadata (null for No frame). Consumers render the saved output without loading the compiler. Schema version 3 allows every registered material/frame combination (132 total, including No frame), with bounded procedural ornament settings. Original schema-version-1 paired documents and version-2 documents migrate. Arbitrary executable input and unknown recipes are rejected. Shared bounded knobs include surface mixes, sheen, cushion relief, text tint, grain scale, light direction and frame geometry. No component CSS branches on a Candy theme ID.
64
+
65
+ Each existing skin entry also exports complete starter settings, for example `studioHardwareTheme`. Spread them onto Theme alongside the separately imported renderer. These settings include portable fonts, control stroke and elevation. Override appearance explicitly when appropriate; using the original compact definition alone still inherits appearance. See docs/THEME_ENGINE.md in the repository for the authoring contract, parameter precedence and current scope.
66
+
67
+ To author a theme, export a validated definition and a separate CSS entry:
68
+
69
+ ```tsx
70
+ import { defineSkin } from "@dixy-ui/themes/authoring";
71
+ export const notebook = defineSkin({
72
+ id: "your-brand/notebook",
73
+ name: "Notebook",
74
+ version: 1,
75
+ defaults: {
76
+ accentColor: "bronze",
77
+ neutralColor: "sand",
78
+ radius: "md",
79
+ density: "comfortable",
80
+ material: "paper",
81
+ shape: "rounded",
82
+ },
83
+ });
84
+ ```
85
+
86
+ ```css
87
+ @layer dixy.components {
88
+ .dixy-card[data-dixy-skin="your-brand/notebook"] {
89
+ border-style: dashed;
90
+ }
91
+ }
92
+ ```
93
+
94
+ Import that stylesheet and pass `skin={notebook}` to Theme. Keep focus outlines, input semantics, selected/invalid/disabled cues and native interaction targets intact. Test light/dark and reduced effects. Use `data-dixy-material-override` to avoid replacing an explicit component finish. The playground imports validated documents and custom presets, provides independent recipe controls and saves up to twelve local themes. It exports static React/CSS as well as portable JSON. Installing arbitrary user code or hosting a theme marketplace remains separate.
95
+
96
+ All eleven renderers are still by default. Animation is explicitly enabled with animateOrnaments and obeys motion/effect reductions. Each renderer supplies frame details through Card/Dialog and compact optional switch-thumb surface ornaments; inputs, tabs, tracks and choices receive their own scoped CSS recipes. Prism permits one explicitly authored `.dixy-skin-backdrop` direct child with `effects="backdrop"`; unsupported/reduced transparency falls back to opaque content. Do not put blur on every card. No graphics engine or shader dependency is required. Forest, Candy Clay, Ocean Depths and Art Deco use a shared, opt-in Canvas 2D scheduler; the remaining renderers use SVG/CSS.
97
+
98
+ Forest uses a separate renderer entry so importing another skin never pulls it in:
99
+
100
+ ```tsx
101
+ import { livingForest } from "@dixy-ui/themes/living-forest";
102
+ import { ForestOrnament } from "@dixy-ui/themes/living-forest/react";
103
+ import "@dixy-ui/themes/living-forest.css";
104
+
105
+ <Theme skin={livingForest} ornamentRenderer={ForestOrnament} animateOrnaments>
106
+ <Card.Root>
107
+ <Button>Explore</Button>
108
+ </Card.Root>
109
+ </Theme>;
110
+ ```
111
+
112
+ Omit animateOrnaments for still geometry. The playground's Animate details button previews motion for 20 seconds and has a pause control. Quiet ornament and reduced effects remove decorative artwork; reduced motion keeps it still. SVG IDs and Canvas instance variation come from React useId; geometry uses deterministic seeds. Canvas paints after hydration, leaving the CSS surface and component semantics available during SSR. External bitmap/SVG files are not used by any renderer.
113
+
114
+ | Skin | Optional React export | Drawn in code |
115
+ | --------------- | --------------------- | ---------------------------------------------------------------------- |
116
+ | Living Forest | `ForestOrnament` | Continuous vines, corner groves, six leaf mixes and five canopy shapes |
117
+ | Retro OS | `RetroOrnament` | Pixel bevel inlays, hard frame edges |
118
+ | Winamp Signal | `SignalOrnament` | Machined rails, screws, segmented meters |
119
+ | Studio Hardware | `HardwareOrnament` | Steel screws, registration marks, dial engraving |
120
+ | Prism Glass | `PrismOrnament` | Diffused spectral light, rim highlights, glass facets |
121
+ | Tactile Atelier | `AtelierOrnament` | Walnut grain, paper noise, linen weave, stitching |
122
+ | Ocean Depths | `OceanOrnament` | Tidal ribbons, seafoam beads, glass droplets and quiet currents |
123
+ | Candy Clay | `ClayOrnament` | Piped petals, twisted rope, candy pebbles and ribbon folds |
124
+ | Art Deco | `DecoOrnament` | Fine filigree, Art Deco, hammered edges and quiet gilding |
125
+ | Y2K Titanium | `TitaniumOrnament` | Chamfers, screws, perforations and light pipes |
126
+ | Material Light | `LightOrnament` | Porcelain halo and fine rim highlights |
127
+
128
+ Each export comes from `@dixy-ui/themes/<slug>/react`. CSS/definition-only consumption remains supported without the React artwork. See `docs/PROCEDURAL_SKINS.md` in the repository for architecture and verification scope.
129
+
130
+ Themes style component surfaces and edges. Button labels and icons belong to the consumer; no renderer is mounted inside a Button. A loading spinner remains a functional Button feature. Retro frames do not simulate window title bars, window actions or resize handles. Compose working controls explicitly when an application needs them.
131
+
132
+ ## Organic frames
133
+
134
+ The public renderer imports stay the same. `recipes.frame.ornament` in a v3 authoring document controls density, corner clusters, canopy depth/relief, variation, detail size, stem/rim weight, motion strength and a deterministic seed. Style choices are closed enums. Forest adds five canopy shapes and four stem characters. Switching a frame in the playground loads that frame's default settings; paint remains independent.
135
+
136
+ The compiler emits portable numeric `--dixy-organic-*` variables in CSS and Theme styles. Exported consumers need the chosen renderer and saved stylesheet/settings, never the authoring compiler or DialKit. `organicFrameRecipes`, `canopyShapes`, `stemCharacters`, `defaultOrganicOrnament` and `organicOrnamentVariables` are public authoring helpers. See [the engine guide](../../docs/THEME_ENGINE.md).
137
+
138
+ Native Canvas 2D draws one measured, continuous border path with all four computed CSS corner radii. Leaves fit a 32px overflow gutter and the authored content insets without a rectangular cut mask. Use at least 32px of outer layout space for full overhang; the playground uses 40px specimen gaps. Compact layouts can reserve a smaller content-safe band with the existing `--dixy-skin-frame-safe-*` overrides; leaf geometry shrinks to fit that band.
139
+
140
+ Frames are still by default. Animated frames share one scheduler, paint at most 30 times per second, and stop after 20 seconds even when `animateOrnaments` stays true. Toggle it off/on for another preview. Offscreen and hidden-tab frames stop scheduling; observers and jobs are released on unmount. Canvas backing stores are limited to two million pixels each. Density edits use a finite grow/retract transition; reduced motion applies the final count immediately. Reduced effects/quiet omit the optional renderer; contrast/forced-color modes hide its layer. No bitmap textures, external SVG files or image downloads are used. These limits are implementation policy, not a claim of measured device performance.
@@ -0,0 +1,3 @@
1
+ import type { OrnamentProps } from "../ornament-parts.js";
2
+ export declare function AnsiOrnament(props: OrnamentProps): import("react").JSX.Element;
3
+ export default AnsiOrnament;
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { paintPanes } from "../organic-paint-launch.js";
4
+ import { OrganicOrnament } from "../organic-ornament.js";
5
+ export function AnsiOrnament(props) {
6
+ return (_jsx(OrganicOrnament, { ...props, kind: "panes", skin: "ansi", painter: paintPanes }));
7
+ }
8
+ export default AnsiOrnament;