@weasel-js/ui 1.7.3 → 1.8.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 (155) hide show
  1. package/dist/chunks/{Callout-BUn0dP_S.js → Callout-DpTO3fkb.js} +10 -10
  2. package/dist/chunks/Callout-DpTO3fkb.js.map +1 -0
  3. package/dist/chunks/{Checkbox-DFn-x0JO.js → Checkbox-d4IfhiXh.js} +2 -2
  4. package/dist/chunks/{Checkbox-DFn-x0JO.js.map → Checkbox-d4IfhiXh.js.map} +1 -1
  5. package/dist/chunks/{CloseButton-BmNmRVtb.js → CloseButton-wb7Or5Eg.js} +2 -2
  6. package/dist/chunks/{CloseButton-BmNmRVtb.js.map → CloseButton-wb7Or5Eg.js.map} +1 -1
  7. package/dist/chunks/{ColorModeControl-DaVJ-SyX.js → ColorModeControl-DET6Itwq.js} +3 -3
  8. package/dist/chunks/{ColorModeControl-DaVJ-SyX.js.map → ColorModeControl-DET6Itwq.js.map} +1 -1
  9. package/dist/chunks/{DataGrid-CmHJe57v.js → DataGrid-B6IS9vUk.js} +2 -2
  10. package/dist/chunks/{DataGrid-CmHJe57v.js.map → DataGrid-B6IS9vUk.js.map} +1 -1
  11. package/dist/chunks/{DetentSlider-DNTAk8xP.js → DetentSlider-D40V8Oma.js} +2 -2
  12. package/dist/chunks/{DetentSlider-DNTAk8xP.js.map → DetentSlider-D40V8Oma.js.map} +1 -1
  13. package/dist/chunks/{Dialog-DKfsk5VN.js → Dialog-h-5MeYpu.js} +9 -9
  14. package/dist/chunks/{Dialog-DKfsk5VN.js.map → Dialog-h-5MeYpu.js.map} +1 -1
  15. package/dist/chunks/{Disclosure-Ch2KxYuB.js → Disclosure-CpWt87nO.js} +7 -7
  16. package/dist/chunks/{Disclosure-Ch2KxYuB.js.map → Disclosure-CpWt87nO.js.map} +1 -1
  17. package/dist/chunks/FitLabel-BzZGkWfL.js +76 -0
  18. package/dist/chunks/FitLabel-BzZGkWfL.js.map +1 -0
  19. package/dist/chunks/{GradientEditor-DD2OjQtn.js → GradientEditor-vz771M-N.js} +4 -4
  20. package/dist/chunks/{GradientEditor-DD2OjQtn.js.map → GradientEditor-vz771M-N.js.map} +1 -1
  21. package/dist/chunks/{Icon--B1ME-6c.js → Icon-DPRUIo3G.js} +4 -1
  22. package/dist/chunks/Icon-DPRUIo3G.js.map +1 -0
  23. package/dist/chunks/{Jog-BrkzdGV2.js → Jog-TE6QI9i1.js} +3 -3
  24. package/dist/chunks/{Jog-BrkzdGV2.js.map → Jog-TE6QI9i1.js.map} +1 -1
  25. package/dist/chunks/{LayerList-BqeWFuGc.js → LayerList-BXTAjK-4.js} +6 -6
  26. package/dist/chunks/{LayerList-BqeWFuGc.js.map → LayerList-BXTAjK-4.js.map} +1 -1
  27. package/dist/chunks/{ListEditor-OQDzG4A5.js → ListEditor-DGtwj99m.js} +2 -2
  28. package/dist/chunks/{ListEditor-OQDzG4A5.js.map → ListEditor-DGtwj99m.js.map} +1 -1
  29. package/dist/chunks/{MeshEditor-DWpvg8H6.js → MeshEditor-8CRsu-Td.js} +2 -2
  30. package/dist/chunks/{MeshEditor-DWpvg8H6.js.map → MeshEditor-8CRsu-Td.js.map} +1 -1
  31. package/dist/chunks/{NumberField-DS0WSiin.js → NumberField-BXFrOi5M.js} +8 -5
  32. package/dist/chunks/{NumberField-DS0WSiin.js.map → NumberField-BXFrOi5M.js.map} +1 -1
  33. package/dist/chunks/{PaintField-BdmQM53v.js → PaintField-DX4uYlF9.js} +2 -2
  34. package/dist/chunks/{PaintField-BdmQM53v.js.map → PaintField-DX4uYlF9.js.map} +1 -1
  35. package/dist/chunks/{PaintInput-DaQMeBsI.js → PaintInput-CWyOJXUM.js} +5 -5
  36. package/dist/chunks/{PaintInput-DaQMeBsI.js.map → PaintInput-CWyOJXUM.js.map} +1 -1
  37. package/dist/chunks/{PatternPicker-B3HcMZWg.js → PatternPicker-0j51aDJ3.js} +9 -9
  38. package/dist/chunks/PatternPicker-0j51aDJ3.js.map +1 -0
  39. package/dist/chunks/{Prefs-BnVEyfWO.js → Prefs-gbjYqvSD.js} +41 -41
  40. package/dist/chunks/Prefs-gbjYqvSD.js.map +1 -0
  41. package/dist/chunks/{Properties-BoG2MMHR.js → Properties-BbNuMiic.js} +4 -4
  42. package/dist/chunks/{Properties-BoG2MMHR.js.map → Properties-BbNuMiic.js.map} +1 -1
  43. package/dist/chunks/PropertyField-CWUtNK1w.js +751 -0
  44. package/dist/chunks/PropertyField-CWUtNK1w.js.map +1 -0
  45. package/dist/chunks/{SelectionPanel-COZ6z9_P.js → SelectionPanel-BpUqP75b.js} +2 -2
  46. package/dist/chunks/{SelectionPanel-COZ6z9_P.js.map → SelectionPanel-BpUqP75b.js.map} +1 -1
  47. package/dist/chunks/{SidebarPanel-AXQ0jRDx.js → SidebarPanel--dJ-k9-V.js} +3 -3
  48. package/dist/chunks/{SidebarPanel-AXQ0jRDx.js.map → SidebarPanel--dJ-k9-V.js.map} +1 -1
  49. package/dist/chunks/Slider-CHBQ8uUC.js +439 -0
  50. package/dist/chunks/Slider-CHBQ8uUC.js.map +1 -0
  51. package/dist/chunks/{SwatchGrid-9ZPiDmxd.js → SwatchGrid-DxK9e_IV.js} +3 -3
  52. package/dist/chunks/SwatchGrid-DxK9e_IV.js.map +1 -0
  53. package/dist/chunks/{SwatchStrip-Bi9iPLoh.js → SwatchStrip-BY6A511W.js} +2 -2
  54. package/dist/chunks/{SwatchStrip-Bi9iPLoh.js.map → SwatchStrip-BY6A511W.js.map} +1 -1
  55. package/dist/chunks/{ThemeSwitcher-DiBmMh_B.js → ThemeSwitcher-tnATkIo1.js} +2 -2
  56. package/dist/chunks/{ThemeSwitcher-DiBmMh_B.js.map → ThemeSwitcher-tnATkIo1.js.map} +1 -1
  57. package/dist/chunks/{Timeline-sMCH2fah.js → Timeline-FlLUm8nd.js} +4 -4
  58. package/dist/chunks/{Timeline-sMCH2fah.js.map → Timeline-FlLUm8nd.js.map} +1 -1
  59. package/dist/chunks/{Toast-C3ozq11V.js → Toast-CuHkT0x0.js} +2 -2
  60. package/dist/chunks/{Toast-C3ozq11V.js.map → Toast-CuHkT0x0.js.map} +1 -1
  61. package/dist/chunks/ToggleBar-BZ4Gk1IU.js +84 -0
  62. package/dist/chunks/ToggleBar-BZ4Gk1IU.js.map +1 -0
  63. package/dist/chunks/{TokenPanel-WtKGY2Db.js → TokenPanel-DongdiZM.js} +23 -23
  64. package/dist/chunks/{TokenPanel-WtKGY2Db.js.map → TokenPanel-DongdiZM.js.map} +1 -1
  65. package/dist/chunks/ToolOptionsBar-wTPJFfOn.js +94 -0
  66. package/dist/chunks/ToolOptionsBar-wTPJFfOn.js.map +1 -0
  67. package/dist/chunks/{Tree-Cc8lIzgM.js → Tree-hzIbj2q1.js} +2 -2
  68. package/dist/chunks/{Tree-Cc8lIzgM.js.map → Tree-hzIbj2q1.js.map} +1 -1
  69. package/dist/chunks/checkbox.module-Dcx8ILgR.js +5 -0
  70. package/dist/chunks/checkbox.module-Dcx8ILgR.js.map +1 -0
  71. package/dist/chunks/{icons-Dr2-r30x.js → icons-CofIOTiI.js} +2 -2
  72. package/dist/chunks/{icons-Dr2-r30x.js.map → icons-CofIOTiI.js.map} +1 -1
  73. package/dist/chunks/{model-B6zuQg6b.js → model-qQj8Ny9w.js} +134 -133
  74. package/dist/chunks/model-qQj8Ny9w.js.map +1 -0
  75. package/dist/chunks/{prefField-BE_Ytr2H.js → prefField-CCm_nzlM.js} +81 -75
  76. package/dist/chunks/prefField-CCm_nzlM.js.map +1 -0
  77. package/dist/components/Callout/index.js +1 -1
  78. package/dist/components/Checkbox/index.js +1 -1
  79. package/dist/components/CloseButton/index.js +1 -1
  80. package/dist/components/ColorModeControl/index.js +1 -1
  81. package/dist/components/DataGrid/index.js +1 -1
  82. package/dist/components/DetentSlider/index.js +1 -1
  83. package/dist/components/Dialog/index.js +1 -1
  84. package/dist/components/Disclosure/index.js +1 -1
  85. package/dist/components/FitLabel/FitLabel.d.ts +41 -0
  86. package/dist/components/FitLabel/FitLabel.d.ts.map +1 -0
  87. package/dist/components/FitLabel/index.d.ts +3 -0
  88. package/dist/components/FitLabel/index.d.ts.map +1 -0
  89. package/dist/components/FitLabel/index.js +2 -0
  90. package/dist/components/GradientEditor/index.js +1 -1
  91. package/dist/components/InlineRange/InlineRange.d.ts +1 -1
  92. package/dist/components/Jog/index.js +1 -1
  93. package/dist/components/LayerList/index.js +1 -1
  94. package/dist/components/ListEditor/index.js +1 -1
  95. package/dist/components/MeshEditor/index.js +1 -1
  96. package/dist/components/NumberField/UnitField.d.ts.map +1 -1
  97. package/dist/components/NumberField/index.js +1 -1
  98. package/dist/components/PaintField/index.js +1 -1
  99. package/dist/components/PaintInput/index.js +1 -1
  100. package/dist/components/PatternPicker/index.js +1 -1
  101. package/dist/components/Prefs/index.js +2 -2
  102. package/dist/components/Prefs/prefField.d.ts.map +1 -1
  103. package/dist/components/Properties/NumberControls.d.ts +16 -0
  104. package/dist/components/Properties/NumberControls.d.ts.map +1 -0
  105. package/dist/components/Properties/PropertyField.d.ts +18 -8
  106. package/dist/components/Properties/PropertyField.d.ts.map +1 -1
  107. package/dist/components/Properties/index.js +2 -2
  108. package/dist/components/SelectionPanel/index.js +2 -2
  109. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
  110. package/dist/components/SidebarPanel/index.js +1 -1
  111. package/dist/components/Slider/Slider.d.ts +6 -0
  112. package/dist/components/Slider/Slider.d.ts.map +1 -1
  113. package/dist/components/Slider/index.js +1 -1
  114. package/dist/components/SwatchGrid/index.js +1 -1
  115. package/dist/components/SwatchStrip/index.js +1 -1
  116. package/dist/components/ThemeSwitcher/index.js +1 -1
  117. package/dist/components/Timeline/index.js +1 -1
  118. package/dist/components/Toast/index.js +1 -1
  119. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  120. package/dist/components/ToggleBar/index.js +1 -1
  121. package/dist/components/TokenPanel/index.js +1 -1
  122. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts +1 -1
  123. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts.map +1 -1
  124. package/dist/components/ToolOptionsBar/index.js +1 -1
  125. package/dist/components/Tree/index.js +1 -1
  126. package/dist/components/stanceCss.d.ts +6 -0
  127. package/dist/components/stanceCss.d.ts.map +1 -1
  128. package/dist/components/stanceSurfaces.d.ts.map +1 -1
  129. package/dist/endless.d.ts +7 -0
  130. package/dist/endless.d.ts.map +1 -0
  131. package/dist/icons/paths.d.ts +2 -0
  132. package/dist/icons/paths.d.ts.map +1 -1
  133. package/dist/index.d.ts +1 -0
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +72 -70
  136. package/dist/index.js.map +1 -1
  137. package/dist/style.css +1 -1
  138. package/package.json +9 -9
  139. package/dist/chunks/Callout-BUn0dP_S.js.map +0 -1
  140. package/dist/chunks/Icon--B1ME-6c.js.map +0 -1
  141. package/dist/chunks/PatternPicker-B3HcMZWg.js.map +0 -1
  142. package/dist/chunks/Prefs-BnVEyfWO.js.map +0 -1
  143. package/dist/chunks/PropertyField-PMrqBA0n.js +0 -743
  144. package/dist/chunks/PropertyField-PMrqBA0n.js.map +0 -1
  145. package/dist/chunks/Slider-DSrlMEq8.js +0 -389
  146. package/dist/chunks/Slider-DSrlMEq8.js.map +0 -1
  147. package/dist/chunks/SwatchGrid-9ZPiDmxd.js.map +0 -1
  148. package/dist/chunks/ToggleBar-Z2jZiguF.js +0 -80
  149. package/dist/chunks/ToggleBar-Z2jZiguF.js.map +0 -1
  150. package/dist/chunks/ToolOptionsBar-BJKwnemU.js +0 -88
  151. package/dist/chunks/ToolOptionsBar-BJKwnemU.js.map +0 -1
  152. package/dist/chunks/checkbox.module-DLQV9tMX.js +0 -5
  153. package/dist/chunks/checkbox.module-DLQV9tMX.js.map +0 -1
  154. package/dist/chunks/model-B6zuQg6b.js.map +0 -1
  155. package/dist/chunks/prefField-BE_Ytr2H.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/ui",
3
- "version": "1.7.3",
3
+ "version": "1.8.0",
4
4
  "description": "UI chrome primitives for weasel apps (properties panel, etc.)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -23,17 +23,17 @@
23
23
  "./package.json": "./package.json"
24
24
  },
25
25
  "dependencies": {
26
- "@weasel-js/font": "1.7.3",
27
- "@weasel-js/modes": "1.7.3",
28
- "@weasel-js/quantity": "1.7.3",
29
- "@weasel-js/svg": "1.7.3",
30
- "@weasel-js/theme": "1.7.3",
26
+ "@weasel-js/font": "1.8.0",
27
+ "@weasel-js/modes": "1.8.0",
28
+ "@weasel-js/quantity": "1.8.0",
29
+ "@weasel-js/svg": "1.8.0",
30
+ "@weasel-js/theme": "1.8.0",
31
31
  "react-aria-components": "^1.5.0"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "react": ">=18",
35
35
  "react-dom": ">=18",
36
- "@weasel-js/core": "1.7.3"
36
+ "@weasel-js/core": "1.8.0"
37
37
  },
38
38
  "author": "orochi235",
39
39
  "homepage": "https://orochi235.github.io/weasel/",
@@ -61,7 +61,7 @@
61
61
  "provenance": true
62
62
  },
63
63
  "devDependencies": {
64
- "@weasel-js/cursor": "1.7.3",
65
- "@weasel-js/geom": "1.7.3"
64
+ "@weasel-js/cursor": "1.8.0",
65
+ "@weasel-js/geom": "1.8.0"
66
66
  }
67
67
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"Callout-BUn0dP_S.js","names":["_Fragment","s","RACPopover","RACDialog","useOverlayPortal","CloseButton","DialogTrigger$1","Callout_module_default","Callout","ariaLabel","ariaLabelledby","rest","props","anchorRef","useRef","stanced","useStance","portalAnchor","portalContainer","showClose","showCloseButton","modal","onDismissRef","useLatest","onDismiss","escapeListener","listeningTo","dialogRef","useCallback","node","titleId","useId","hasAnchorRect","anchorRect","popoverAriaLabelledby","title","popoverAriaLabel","Fragment","createPortal","Popover","triggerRef","shouldCloseOnInteractOutside","className","portalProps","OverlayArrow","Dialog","Heading","close","onOpenChange","footer"],"sources":["../../src/components/Callout/Callout.module.css","../../src/components/Callout/Callout.tsx"],"sourcesContent":[".anchor {\n position: fixed;\n pointer-events: none;\n}\n\n.popover {\n /* Above Dialog overlay (1000) and ToastRegion (1100) — RAC sets no z-index. */\n z-index: 1200;\n background: var(--_s-fill);\n border: var(--_s-border-width) var(--_s-border-style) var(--_s-border-color);\n border-radius: var(--_s-radius);\n box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n max-width: 320px;\n transition: opacity var(--wzl-motion-fast);\n}\n\n.popover[data-entering],\n.popover[data-exiting] {\n opacity: 0;\n}\n\n/* BEGIN GENERATED stance rules: callout — `npm run gen:stances`, do not edit. */\n\n.popover {\n --wzl-tone: initial;\n}\n\n.popover {\n --_s-surface: var(--wzl-surface);\n --_s-border-color: var(--wzl-accent-strong);\n --_s-border-style: solid;\n --_s-border-width: 1px;\n --_s-radius: var(--wzl-radius-md);\n --_s-tone-mix: var(--wzl-panel-tone-mix);\n --_s-tone: var(--wzl-tone, var(--_s-surface));\n --_s-accent: var(--wzl-tone);\n --_s-title-font: var(--wzl-font-ui);\n --_s-title-weight: var(--wzl-font-weight-bold);\n --_s-title-size: var(--wzl-font-size);\n --_s-title-case: none;\n --_s-title-tracking: normal;\n --_s-title-color: var(--wzl-fg);\n}\n\n.popover[data-stance='scope'] {\n --_s-surface: var(--wzl-stance-scope-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-scope-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-scope-border-style, solid);\n --_s-border-width: var(--wzl-stance-scope-border-width, 1px);\n --_s-radius: var(--wzl-stance-scope-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-scope-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-scope-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-scope-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-scope-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-scope-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-scope-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-scope-title-case, none);\n --_s-title-tracking: var(--wzl-stance-scope-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-scope-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='aside'] {\n --_s-surface: var(--wzl-stance-aside-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-aside-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-aside-border-style, solid);\n --_s-border-width: var(--wzl-stance-aside-border-width, 1px);\n --_s-radius: var(--wzl-stance-aside-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-aside-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-aside-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-aside-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-aside-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-aside-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-aside-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-aside-title-case, none);\n --_s-title-tracking: var(--wzl-stance-aside-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-aside-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='advanced'] {\n --_s-surface: var(--wzl-stance-advanced-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-advanced-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-advanced-border-style, solid);\n --_s-border-width: var(--wzl-stance-advanced-border-width, 1px);\n --_s-radius: var(--wzl-stance-advanced-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-advanced-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-advanced-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-advanced-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-advanced-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-advanced-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-advanced-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-advanced-title-case, none);\n --_s-title-tracking: var(--wzl-stance-advanced-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-advanced-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='debug'] {\n --_s-surface: var(--wzl-stance-debug-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-debug-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-debug-border-style, solid);\n --_s-border-width: var(--wzl-stance-debug-border-width, 1px);\n --_s-radius: var(--wzl-stance-debug-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-debug-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-debug-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-debug-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-debug-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-debug-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-debug-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-debug-title-case, none);\n --_s-title-tracking: var(--wzl-stance-debug-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-debug-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='danger'] {\n --_s-surface: var(--wzl-stance-danger-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-danger-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-danger-border-style, solid);\n --_s-border-width: var(--wzl-stance-danger-border-width, 1px);\n --_s-radius: var(--wzl-stance-danger-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-danger-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-danger-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-danger-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-danger-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-danger-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-danger-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-danger-title-case, none);\n --_s-title-tracking: var(--wzl-stance-danger-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-danger-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='notice'] {\n --_s-surface: var(--wzl-stance-notice-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-notice-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-notice-border-style, solid);\n --_s-border-width: var(--wzl-stance-notice-border-width, 1px);\n --_s-radius: var(--wzl-stance-notice-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-notice-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-notice-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-notice-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-notice-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-notice-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-notice-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-notice-title-case, none);\n --_s-title-tracking: var(--wzl-stance-notice-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-notice-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='important'] {\n --_s-surface: var(--wzl-stance-important-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-important-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-important-border-style, solid);\n --_s-border-width: var(--wzl-stance-important-border-width, 1px);\n --_s-radius: var(--wzl-stance-important-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-important-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-important-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-important-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-important-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-important-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-important-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-important-title-case, none);\n --_s-title-tracking: var(--wzl-stance-important-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-important-title-color, var(--wzl-fg));\n}\n\n.popover[data-stance='preview'] {\n --_s-surface: var(--wzl-stance-preview-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-preview-border-color, var(--wzl-accent-strong));\n --_s-border-style: var(--wzl-stance-preview-border-style, solid);\n --_s-border-width: var(--wzl-stance-preview-border-width, 1px);\n --_s-radius: var(--wzl-stance-preview-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-preview-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-preview-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-preview-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-preview-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-preview-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-preview-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-preview-title-case, none);\n --_s-title-tracking: var(--wzl-stance-preview-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-preview-title-color, var(--wzl-fg));\n}\n\n.popover {\n --_s-fill: var(--_s-surface);\n}\n\n.popover[data-tone],\n.popover[data-stance] {\n --_s-fill: color-mix(in oklab, var(--_s-tone) var(--_s-tone-mix), var(--_s-surface));\n}\n\n.popover[data-tone] {\n --wzl-accent: var(--_s-accent);\n --wzl-accent-base: var(--_s-accent);\n --wzl-accent-strong: color-mix(in oklab, var(--_s-accent) 70%, var(--wzl-fg));\n --wzl-accent-soft: color-mix(in oklab, var(--_s-accent) 45%, var(--wzl-surface));\n --wzl-accent-hover: var(--wzl-accent-strong);\n --wzl-accent-fg: var(--wzl-accent-strong);\n --wzl-focus-ring: var(--wzl-accent-strong);\n}\n\n/* END GENERATED stance rules: callout */\n\n.arrow svg {\n display: block;\n fill: var(--_s-fill);\n stroke: var(--_s-border-color);\n stroke-width: 1;\n}\n\n.arrow[data-placement='bottom'] svg {\n transform: rotate(180deg);\n}\n\n.arrow[data-placement='left'] svg {\n transform: rotate(-90deg);\n}\n\n.arrow[data-placement='right'] svg {\n transform: rotate(90deg);\n}\n\n.dialog {\n outline: none;\n max-height: inherit;\n display: flex;\n flex-direction: column;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-4);\n padding: var(--wzl-space-5) var(--wzl-space-6) 0;\n}\n\n.title {\n margin: 0;\n flex: 1;\n font-family: var(--_s-title-font);\n font-size: var(--_s-title-size);\n font-weight: var(--_s-title-weight);\n text-transform: var(--_s-title-case);\n letter-spacing: var(--_s-title-tracking);\n color: var(--_s-title-color);\n}\n\n.body {\n padding: var(--wzl-space-4) var(--wzl-space-6) var(--wzl-space-5);\n font-size: var(--wzl-font-size);\n line-height: 1.4;\n overflow-y: auto;\n}\n\n.footer {\n display: flex;\n justify-content: flex-end;\n gap: var(--wzl-space-4);\n padding: 0 var(--wzl-space-6) var(--wzl-space-5);\n}\n","import { useCallback, useEffect, useId, useRef, type ReactNode, type RefObject } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useLatest } from '@weasel-js/core';\nimport {\n DialogTrigger,\n Popover as RACPopover,\n OverlayArrow,\n Dialog as RACDialog,\n Heading,\n type PopoverProps as RACPopoverProps,\n} from 'react-aria-components';\nimport { useOverlayPortal, type OverlayPortalProps, type WithoutPortalTarget } from '../../overlays/portalHost';\nimport { CloseButton } from '../CloseButton';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Callout.module.css';\n\n/**\n * Composition wrapper for press-to-open callouts:\n * `<CalloutTrigger><Pressable>…</Pressable><Callout>…</Callout></CalloutTrigger>`.\n * Re-exported RAC DialogTrigger — non-RAC trigger elements must be wrapped\n * in `<Pressable>` from react-aria-components.\n * In composed mode, put `defaultOpen` on `CalloutTrigger`, not `Callout` —\n * RAC detaches to local open state on the trigger, not the popover.\n */\nexport { DialogTrigger as CalloutTrigger };\n\n/** Props for {@link Callout}, on top of React Aria's `Popover` props. */\nexport type CalloutProps = Omit<\n WithoutPortalTarget<RACPopoverProps>,\n 'children' | 'className' | 'isNonModal' | 'triggerRef'\n> &\n OverlayPortalProps &\n StanceProps & {\n children?: ReactNode;\n className?: string;\n /** Optional heading rendered above the body. */\n title?: ReactNode;\n /** Footer slot — typically action buttons. */\n footer?: ReactNode;\n /**\n * `true` — blocks interaction with the rest of the app until dismissed;\n * inner dialog is `role=\"alertdialog\"`. `false` (default) — non-blocking:\n * the app stays interactive; Esc / outside click / close button dismiss.\n */\n modal?: boolean;\n /**\n * Show the close button. Defaults to `!modal`. In programmatic\n * `triggerRef`/`anchorRect` modes the close button needs controlled open\n * (`isOpen` + `onOpenChange`); with only `defaultOpen` it has no open-state\n * setter to call and cannot close.\n */\n showCloseButton?: boolean;\n /**\n * The user asked for this callout to go away — the close button or Escape.\n *\n * Distinct from `onOpenChange`, which a non-modal popover *also* fires when\n * interaction or focus merely leaves it. On a canvas that's every click on\n * the artwork, so a consumer that pins `isOpen` and treats `onOpenChange`\n * as dismissal retires messages nobody read. Use this instead: it fires\n * only on a deliberate act, and never on incidental focus loss.\n */\n onDismiss?: () => void;\n /** Anchor to an arbitrary element (programmatic use, with `isOpen`). */\n triggerRef?: RefObject<Element | null>;\n /**\n * Anchor to a client-coordinate rect — e.g. a scene node's on-screen box.\n * The callout re-anchors whenever this rect changes, so a consumer that\n * recomputes it on pan, zoom, or scene edits keeps the arrow on its target.\n * Takes precedence over `triggerRef`.\n */\n anchorRect?: { x: number; y: number; width: number; height: number };\n };\n\n/**\n * Anchored callout with an arrow pointing at its source — a trigger\n * element, an arbitrary `triggerRef`, or a client-space `anchorRect`.\n * Wraps React Aria Popover + Dialog; positioning, collision flipping,\n * dismissal, and focus behavior come from the underlying primitives.\n */\nexport function Callout(props: CalloutProps) {\n const {\n children,\n className,\n title,\n footer,\n stance = 'notice',\n tone,\n modal = false,\n showCloseButton,\n onDismiss,\n triggerRef,\n anchorRect,\n placement = 'top',\n offset = 12,\n maxHeight = 400,\n onOpenChange,\n shouldCloseOnInteractOutside,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n portalContainer,\n ...rest\n } = props;\n const anchorRef = useRef<HTMLSpanElement>(null);\n const stanced = useStance({ stance, tone });\n const { anchor: portalAnchor, portalProps } = useOverlayPortal(portalContainer);\n const showClose = showCloseButton ?? !modal;\n // Escape is a dismissal like the close button is. It can't ride on a React `onKeyDown`:\n // RAC's Dialog runs its props through filterDOMProps, which drops handlers\n // it doesn't know, so the listener goes on the section itself. RAC's own\n // Escape handling is untouched — this only adds the signal.\n const onDismissRef = useLatest(onDismiss);\n const escapeListener = useRef((e: KeyboardEvent) => {\n if (e.key === 'Escape') onDismissRef.current?.();\n });\n const listeningTo = useRef<HTMLElement | null>(null);\n const dialogRef = useCallback((node: HTMLElement | null) => {\n listeningTo.current?.removeEventListener('keydown', escapeListener.current);\n listeningTo.current = node;\n node?.addEventListener('keydown', escapeListener.current);\n }, []);\n const titleId = useId();\n // RAC positions on open and recomputes on scroll, resize, and a\n // ResizeObserver on the anchor — none of which fire when `anchorRect` is\n // merely *translated*, as it is when a consumer tracks a scene node across a\n // pan. (Zoom happens to work, since scaling also changes the anchor's size.)\n // Nudging RAC's own resize listener is the supported way to make it\n // recompute; there's no public updatePosition on Popover.\n const hasAnchorRect = anchorRect !== undefined;\n useEffect(() => {\n if (!hasAnchorRect || typeof window === 'undefined') return;\n window.dispatchEvent(new Event('resize'));\n }, [hasAnchorRect, anchorRect?.x, anchorRect?.y, anchorRect?.width, anchorRect?.height]);\n // RAC's popover role-heuristic misses alertdialog; label the outer role\n // it stamps. Upstream: react-spectrum Popover.mjs querySelector('[role=dialog]').\n const popoverAriaLabelledby =\n modal && title !== undefined ? titleId : ariaLabelledby;\n const popoverAriaLabel = modal ? ariaLabel : undefined;\n return (\n <>\n {portalAnchor}\n {/* Harmless while closed — RAC reads the ref only when the popover is open. */}\n {anchorRect !== undefined &&\n createPortal(\n <span\n ref={anchorRef}\n data-callout-anchor=\"\"\n className={s.anchor}\n aria-hidden=\"true\"\n // Dynamic geometry — inline style is the mechanism here, not styling.\n style={{\n left: anchorRect.x,\n top: anchorRect.y,\n width: anchorRect.width,\n height: anchorRect.height,\n }}\n />,\n document.body,\n )}\n <RACPopover\n {...rest}\n triggerRef={anchorRect !== undefined ? anchorRef : triggerRef}\n isNonModal={!modal}\n placement={placement}\n offset={offset}\n maxHeight={maxHeight}\n onOpenChange={onOpenChange}\n shouldCloseOnInteractOutside={\n shouldCloseOnInteractOutside ?? (modal ? () => false : undefined)\n }\n aria-label={popoverAriaLabel}\n aria-labelledby={popoverAriaLabelledby}\n className={[s.popover, className].filter(Boolean).join(' ')}\n {...stanced}\n data-weasel-overlay=\"\"\n {...portalProps}\n >\n <OverlayArrow className={s.arrow}>\n <svg width={12} height={12} viewBox=\"0 0 12 12\" aria-hidden=\"true\">\n <path d=\"M0 0 L6 6 L12 0\" />\n </svg>\n </OverlayArrow>\n <RACDialog\n role={modal ? 'alertdialog' : 'dialog'}\n className={s.dialog}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={dialogRef}\n >\n {({ close }) => (\n <>\n {(title !== undefined || showClose) && (\n <header className={s.header}>\n {title !== undefined && (\n <Heading id={titleId} slot=\"title\" className={s.title}>\n {title}\n </Heading>\n )}\n {showClose && (\n <CloseButton\n ariaLabel=\"Close callout\"\n onClick={() => {\n // `close()` resolves OverlayTriggerStateContext, only\n // provided by DialogTrigger (composed mode). In\n // triggerRef/anchorRect modes there is no such\n // context, so `close()` is a no-op there — the\n // controlled-open fallback below does the work.\n close();\n onOpenChange?.(false);\n onDismiss?.();\n }}\n />\n )}\n </header>\n )}\n <div className={s.body}>{children}</div>\n {footer !== undefined && <footer className={s.footer}>{footer}</footer>}\n </>\n )}\n </RACDialog>\n </RACPopover>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Icon--B1ME-6c.js","names":["ICON_PATHS","ACTION_GLYPHS","ICON_FILLS","ICON_GROUPS","isFillable","name","SVG_BASE","markup","markupFor","m","html","Icon","shade","filled","size","fillOpacity","label"],"sources":["../../src/icons/paths.ts","../../src/icons/Icon.tsx"],"sourcesContent":["// GENERATED by scripts/gen-icons.mjs — do not edit by hand.\n// Every glyph is a 20x20 viewBox drawn in currentColor at stroke-width 1.5.\n\nimport { ACTION_GLYPHS } from '@weasel-js/core';\n\n/** The SVG body of every glyph, by name — what `<Icon name>` draws. */\nexport const ICON_PATHS = {\n\n // View and lifecycle\n clone: `<path d=\"M7 7.4V4.6A1.6 1.6 0 0 1 8.6 3h6.8A1.6 1.6 0 0 1 17 4.6v6.8a1.6 1.6 0 0 1-1.6 1.6H12.6\" stroke-linecap=\"butt\"/><rect x=\"3\" y=\"7\" width=\"10\" height=\"10\" rx=\"1.6\"/><path d=\"M5.7 10.8h4.6M5.7 13.4h3\" stroke-width=\"1\"/>`,\n reset: `<path d=\"M7.28 4.88A5.8 5.8 0 1 0 12.72 4.88\"/><path d=\"M13.81 7.57 12.72 4.88 15.56 4.28\"/>`,\n close: `<path d=\"M4.5 4.5 15.5 15.5M15.5 4.5 4.5 15.5\" stroke-width=\"1.75\"/>`,\n export: `<path d=\"M4 12.6v2.9A1.5 1.5 0 0 0 5.5 17h9a1.5 1.5 0 0 0 1.5-1.5v-2.9\"/><path d=\"M10 3.2v8.5\"/><path d=\"M11.7 9.35 10 11.7 8.3 9.35\"/><path d=\"M6.8 14.7h6.4\" stroke-width=\"1\"/>`,\n zoomIn: `<circle cx=\"9\" cy=\"9\" r=\"5.4\"/><path d=\"M12.82 12.82 16.9 16.9\"/><path d=\"M9 6.7v4.6M6.7 9h4.6\"/>`,\n zoomOut: `<circle cx=\"9\" cy=\"9\" r=\"5.4\"/><path d=\"M12.82 12.82 16.9 16.9\"/><path d=\"M6.7 9h4.6\"/>`,\n fit: `<path d=\"M3.2 7.2V4.4A1.2 1.2 0 0 1 4.4 3.2h2.8M12.8 3.2h2.8A1.2 1.2 0 0 1 16.8 4.4v2.8M16.8 12.8v2.8a1.2 1.2 0 0 1-1.2 1.2h-2.8M7.2 16.8H4.4a1.2 1.2 0 0 1-1.2-1.2v-2.8\"/><rect x=\"7.4\" y=\"8.2\" width=\"5.2\" height=\"3.6\" rx=\"0.8\" stroke-width=\"1\"/>`,\n pan: `<path d=\"M10 8.1V3.2M10 11.9V16.8M8.1 10H3.2M11.9 10H16.8\"/><path d=\"M8.26 5.27 10 3.2 11.74 5.27M11.74 14.73 10 16.8 8.26 14.73M5.27 11.74 3.2 10 5.27 8.26M14.73 8.26 16.8 10 14.73 11.74\"/><circle cx=\"10\" cy=\"10\" r=\"1.9\"/>`,\n\n // Actions\n filter: `<path d=\"M3.4 4.6h13.2L11.8 11v5.4L8.2 14.8V11z\"/>`,\n add: `<path d=\"M10 4.9v10.2M4.9 10h10.2\"/>`,\n remove: `<path d=\"M4.9 10h10.2\"/>`,\n delete: ACTION_GLYPHS.delete,\n sort: `<path d=\"M3.6 5.6h7.2M3.6 10h8.8M3.6 14.4h5\"/><path d=\"M15.3 5.4v9.4\"/><path d=\"M16.97 12.81 15.3 14.8 13.63 12.81\"/>`,\n undo: ACTION_GLYPHS.undo,\n redo: ACTION_GLYPHS.redo,\n snapshot: `<path d=\"M3.8 8.3A1.4 1.4 0 0 1 5.2 6.9h1.9L8 5.1h4l.9 1.8h1.9A1.4 1.4 0 0 1 16.2 8.3v6A1.4 1.4 0 0 1 14.8 15.7H5.2A1.4 1.4 0 0 1 3.8 14.3z\"/><circle cx=\"10\" cy=\"11\" r=\"2.75\"/>`,\n\n // Character styling\n bold: `<path d=\"M6 3.5h4.6a3.1 3.1 0 0 1 0 6.2H6zM6 9.7h5.4a3.4 3.4 0 0 1 0 6.8H6z\" stroke-width=\"2.1\"/>`,\n italic: `<path d=\"M9 3.5h6M5 16.5h6M12.5 3.5 7.5 16.5\"/>`,\n underline: `<path d=\"M6 3.4v5.6a4 4 0 0 0 8 0V3.4\"/><path d=\"M4.6 17h10.8\"/>`,\n strikethrough: `<path d=\"M14.4 5.8c-.9-1.6-2.4-2.4-4.4-2.4-2.5 0-4.2 1.3-4.2 3.1 0 .9.4 1.6 1.2 2.2\"/><path d=\"M5.6 14.2c.9 1.6 2.4 2.4 4.4 2.4 2.5 0 4.2-1.3 4.2-3.1 0-.9-.4-1.6-1.2-2.2\"/><path d=\"M3.4 10h13.2\"/>`,\n overline: `<path d=\"M4.6 3h10.8\"/><ellipse cx=\"10\" cy=\"11.4\" rx=\"4.4\" ry=\"4.8\"/>`,\n superscript: `<path d=\"M3.6 8.6 10.4 16.4M10.4 8.6 3.6 16.4\"/><path d=\"M11.9 5.3a2.2 2.2 0 1 1 4.3.8c0 1.4-4.3 2.2-4.3 3.5h4.5\"/>`,\n subscript: `<path d=\"M3.6 3.6 10.4 11.4M10.4 3.6 3.6 11.4\"/><path d=\"M11.9 11.5a2.2 2.2 0 1 1 4.3.8c0 1.4-4.3 2.2-4.3 3.5h4.5\"/>`,\n code: `<path d=\"M7 6.2 3.2 10 7 13.8M13 6.2 16.8 10 13 13.8\"/><path d=\"M11.2 4.8 8.8 15.2\"/>`,\n\n // Paragraph alignment\n textAlignLeft: `<path d=\"M3 4.375H17M3 8.125H12M3 11.875H17M3 15.625H12\"/>`,\n textAlignCenter: `<path d=\"M3 4.375H17M5.5 8.125H14.5M3 11.875H17M5.5 15.625H14.5\"/>`,\n textAlignRight: `<path d=\"M3 4.375H17M8 8.125H17M3 11.875H17M8 15.625H17\"/>`,\n textAlignJustify: `<path d=\"M3 4.375H17M3 8.125H17M3 11.875H17M3 15.625H12\"/>`,\n textAlignTop: `<rect x=\"1.875\" y=\"1.875\" width=\"16.25\" height=\"16.25\" rx=\"2\" stroke-width=\"1\"/><path d=\"M5.5 5.625H14.5M7 9.375H13\"/>`,\n textAlignMiddle: `<rect x=\"1.875\" y=\"1.875\" width=\"16.25\" height=\"16.25\" rx=\"2\" stroke-width=\"1\"/><path d=\"M5.5 8.125H14.5M7 11.875H13\"/>`,\n textAlignBottom: `<rect x=\"1.875\" y=\"1.875\" width=\"16.25\" height=\"16.25\" rx=\"2\" stroke-width=\"1\"/><path d=\"M5.5 10.625H14.5M7 14.375H13\"/>`,\n\n // Playback\n play: `<path d=\"M7.6 5.2 15.6 10 7.6 14.8Z\"/>`,\n pause: `<path d=\"M7.8 5.2v9.6M12.2 5.2v9.6\"/>`,\n stop: `<rect x=\"5.6\" y=\"5.6\" width=\"8.8\" height=\"8.8\" rx=\"1.4\"/>`,\n stepBack: `<path d=\"M13.6 5.4 7 10 13.6 14.6Z\"/><path d=\"M4.8 5.4v9.2\"/>`,\n stepForward: `<path d=\"M6.4 5.4 13 10 6.4 14.6Z\"/><path d=\"M15.2 5.4v9.2\"/>`,\n\n // State\n lock: `<rect x=\"4.6\" y=\"9\" width=\"10.8\" height=\"8\" rx=\"1.6\"/><path d=\"M7.2 9V6.6a2.8 2.8 0 0 1 5.6 0V9\"/>`,\n unlock: `<rect x=\"4.6\" y=\"9\" width=\"10.8\" height=\"8\" rx=\"1.6\"/><path d=\"M7.2 9V6.6a2.8 2.8 0 0 1 5.6 0\"/>`,\n visible: `<path d=\"M2.6 10C4.6 6.6 7.1 5 10 5s5.4 1.6 7.4 5c-2 3.4-4.5 5-7.4 5s-5.4-1.6-7.4-5z\"/><circle cx=\"10\" cy=\"10\" r=\"2.2\"/>`,\n hidden: `<path d=\"M2.6 10C4.6 6.6 7.1 5 10 5s5.4 1.6 7.4 5c-2 3.4-4.5 5-7.4 5s-5.4-1.6-7.4-5z\"/><circle cx=\"10\" cy=\"10\" r=\"2.2\"/><path d=\"M4.2 15.8 15.8 4.2\"/>`,\n pin: `<path d=\"M8.2 3.4v5.2l-2 2.6h7.6l-2-2.6V3.4z\"/><path d=\"M7 3.4h6\"/><path d=\"M10 11.2v5.4\"/>`,\n info: `<circle cx=\"10\" cy=\"10\" r=\"7\"/><path d=\"M10 9.4v4.4\"/><path d=\"M10 6.5h0\"/>`,\n warning: `<path d=\"M10 3.4 17.4 16.2H2.6z\"/><path d=\"M10 8.4v3.4\"/><path d=\"M10 14h0\"/>`,\n error: `<circle cx=\"10\" cy=\"10\" r=\"7\"/><path d=\"M7.6 7.6 12.4 12.4M12.4 7.6 7.6 12.4\"/>`,\n busy: `<path d=\"M10 3.2A6.8 6.8 0 1 1 3.2 10\"/>`,\n check: `<path d=\"M4.35 10.56 8.03 14.24 15.66 5.77\"/>`,\n modeLight: `<circle cx=\"10\" cy=\"10\" r=\"3.5\"/><path d=\"M15.3 10L17.7 10M13.75 6.25L15.44 4.56M10 4.7L10 2.3M6.25 6.25L4.56 4.56M4.7 10L2.3 10M6.25 13.75L4.56 15.44M10 15.3L10 17.7M13.75 13.75L15.44 15.44\"/>`,\n modeDark: `<path d=\"M8.19 3.55A6.7 6.7 0 1 0 16.45 11.81A5.9 5.9 0 0 1 8.19 3.55Z\"/>`,\n modeAuto: `<path d=\"M10 2.6Q10 10 17.4 10Q10 10 10 17.4Q10 10 2.6 10Q10 10 10 2.6Z\"/>`,\n\n // Badge status\n statusSuccess: `<circle cx=\"10\" cy=\"10\" r=\"7\"/><path d=\"M6.84 10.33 8.89 12.38 13.17 7.62\"/>`,\n statusAccent: `<circle cx=\"10\" cy=\"10\" r=\"7\" fill=\"currentColor\"/>`,\n statusNeutral: `<path d=\"M10 3A7 7 0 0 1 10 17Z\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"10\" cy=\"10\" r=\"7\"/>`,\n statusMuted: `<path d=\"M11.44 3.15A7 7 0 0 0 8.56 3.15M4.79 5.33A7 7 0 0 0 3.35 7.82M3.35 12.18A7 7 0 0 0 4.79 14.67M8.56 16.85A7 7 0 0 0 11.44 16.85M15.21 14.67A7 7 0 0 0 16.65 12.18M16.65 7.82A7 7 0 0 0 15.21 5.33\"/>`,\n\n // Instrument\n crosshair: `<circle cx=\"10\" cy=\"10\" r=\"5.6\"/><path d=\"M10 2.8v4.4M10 12.8v4.4M2.8 10h4.4M12.8 10h4.4\"/>`,\n fullscreen: `<path d=\"M11.6 3.6h4.8v4.8M8.4 16.4H3.6v-4.8\"/><path d=\"M16.4 3.6 11.2 8.8M3.6 16.4 8.8 11.2\"/>`,\n compare: `<rect x=\"3.4\" y=\"4.6\" width=\"13.2\" height=\"10.8\" rx=\"1.6\"/><path d=\"M10 4.6v10.8\" stroke-width=\"1\"/><path d=\"M5.2 7.6h3.4M5.2 10h2.6M5.2 12.4h3.4\" stroke-width=\"1\"/><path d=\"M11.4 7.6h3.4M11.4 10h3.4M11.4 12.4h1.8\" stroke-width=\"1\"/>`,\n search: `<circle cx=\"9\" cy=\"9\" r=\"5.4\"/><path d=\"M12.82 12.82 16.9 16.9\"/>`,\n loupe: `<circle cx=\"9\" cy=\"9\" r=\"5.6\"/><path d=\"M12.96 12.96 17 17\"/><rect x=\"6\" y=\"6\" width=\"6\" height=\"6\" stroke-width=\"1\"/><path d=\"M9 6v6M6 9h6\" stroke-width=\"1\"/>`,\n layers: `<path d=\"M10 2.8 17.2 6.6 10 10.4 2.8 6.6z\"/><path d=\"M2.8 10 10 13.8 17.2 10\" stroke-width=\"1\"/><path d=\"M2.8 13.4 10 17.2 17.2 13.4\" stroke-width=\"1\"/>`,\n page: `<path d=\"M4.6 2.8H11.6L15.4 6.6V17.2H4.6z\"/><path d=\"M11.6 2.8V6.6H15.4\"/>`,\n link: `<path d=\"M8.6 11.4a3.4 3.4 0 0 1 0-4.8l2.2-2.2a3.4 3.4 0 0 1 4.8 4.8l-1.1 1.1\"/><path d=\"M11.4 8.6a3.4 3.4 0 0 1 0 4.8l-2.2 2.2a3.4 3.4 0 0 1-4.8-4.8l1.1-1.1\"/>`,\n collapse: `<path d=\"M14.16 4.05 10 7.8 5.84 4.05M5.84 15.95 10 12.2 14.16 15.95\"/>`,\n expand: `<path d=\"M5.84 8.15 10 4.4 14.16 8.15M14.16 11.85 10 15.6 5.84 11.85\"/>`,\n chevron: `<path d=\"M14.9 7.98 10 12.4 5.1 7.98\"/>`,\n tune: `<path d=\"M3.4 6h13.2M3.4 10h13.2M3.4 14h13.2\" stroke-width=\"1.25\"/><circle cx=\"7\" cy=\"6\" r=\"1.8\"/><circle cx=\"12.6\" cy=\"10\" r=\"1.8\"/><circle cx=\"9\" cy=\"14\" r=\"1.8\"/>`,\n grid: `<rect x=\"3.4\" y=\"3.4\" width=\"13.2\" height=\"13.2\" rx=\"1.4\"/><path d=\"M7.8 3.4v13.2M12.2 3.4v13.2M3.4 7.8h13.2M3.4 12.2h13.2\" stroke-width=\"1\"/>`,\n snap: `<path d=\"M5.4 15.6V9.4a4.6 4.6 0 0 1 9.2 0v6.2h-3.2V9.4a1.4 1.4 0 0 0-2.8 0v6.2z\"/><path d=\"M5.4 12.8h3.2M11.4 12.8h3.2\" stroke-width=\"1\"/>`,\n measure: `<rect x=\"2.6\" y=\"7.4\" width=\"14.8\" height=\"5.2\" rx=\"1.2\"/><path d=\"M6 7.4v2.2M9.4 7.4v3M12.8 7.4v2.2\" stroke-width=\"1\"/>`,\n randomize: `<rect x=\"3.6\" y=\"3.6\" width=\"12.8\" height=\"12.8\" rx=\"2\"/><circle cx=\"7.2\" cy=\"7.2\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"10\" cy=\"10\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"12.8\" cy=\"12.8\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/>`,\n refresh: `<path d=\"M4.27 12.09A6.1 6.1 0 0 1 14.67 6.08\"/><path d=\"M14.67 3.38 14.67 6.08 12.01 5.61\"/><path d=\"M15.73 7.91A6.1 6.1 0 0 1 5.33 13.92\"/><path d=\"M5.33 16.62 5.33 13.92 7.99 14.39\"/>`,\n\n // Stroke cap, join, align and dash\n strokeWidth: `<path d=\"M3.4 5.6h13.2\" stroke-width=\"1\"/><path d=\"M3.4 10h13.2\" stroke-width=\"2\"/><path d=\"M3.4 15.2h13.2\" stroke-width=\"3.4\"/>`,\n strokeCap: `<path d=\"M2.5 10H12\" stroke-linecap=\"butt\"/><path d=\"M12 6V14\" stroke-width=\"1\"/>`,\n strokeJoin: `<path d=\"M4.4 15.5 10 5.5 15.6 15.5\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\"/>`,\n strokeAlign: `<circle cx=\"10\" cy=\"10\" r=\"6.2\"/>`,\n capButt: `<path d=\"M5.5 5.25H14.5V14.75H5.5Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"miter\"/>`,\n capRound: `<path d=\"M3.13 5.25H12.13V14.75H3.13Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"miter\"/><path d=\"M12.13 4.5A5.5 5.5 0 0 1 12.13 15.5Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n capSquare: `<path d=\"M3.13 5.25H12.13V14.75H3.13Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"miter\"/><path d=\"M12.13 4.5H17.63V15.5H12.13Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n joinMiter: `<path d=\"M10 3.5 15.6 15.5H4.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n joinRound: `<path d=\"M4.4 15.5V12a5.6 5.6 0 0 1 11.2 0v3.5Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n joinBevel: `<path d=\"M6.8 8.2h6.4l2.4 7.3H4.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n alignInner: `<path d=\"M10 3.8A6.2 6.2 0 1 0 10 16.2A6.2 6.2 0 1 0 10 3.8Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n alignCenter: `<path d=\"M10 2.1A7.9 7.9 0 1 0 10 17.9A7.9 7.9 0 1 0 10 2.1ZM10 5.5A4.5 4.5 0 1 0 10 14.5A4.5 4.5 0 1 0 10 5.5Z\" fill=\"currentColor\" stroke=\"none\" fill-rule=\"evenodd\"/>`,\n alignOuter: `<path d=\"M0 0H20V20H0ZM10 3.8A6.2 6.2 0 1 0 10 16.2A6.2 6.2 0 1 0 10 3.8Z\" fill=\"currentColor\" stroke=\"none\" fill-rule=\"evenodd\"/>`,\n dashSolid: `<path d=\"M2 10h16\" stroke-width=\"3\" stroke-linecap=\"butt\"/>`,\n dashDashed: `<path d=\"M2 10h16\" stroke-width=\"3\" stroke-linecap=\"butt\" stroke-dasharray=\"6 4\"/>`,\n dashDotted: `<path d=\"M2 10h16\" stroke-width=\"3\" stroke-linecap=\"butt\" stroke-dasharray=\"2.5 2\"/>`,\n dashCustom: `<path d=\"M2 10h16\" stroke-width=\"3\" stroke-linecap=\"butt\" stroke-dasharray=\"5 2 2 2\"/>`,\n paintSolid: `<path d=\"M3.4 3.4H16.6V16.6H3.4Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"1\"/>`,\n paintLinear: `<path d=\"M3.4 3.4H6.7V16.6H3.4Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"1\"/><path d=\"M6.7 3.4H10V16.6H6.7Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.68\"/><path d=\"M10 3.4H13.3V16.6H10Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.42\"/><path d=\"M13.3 3.4H16.6V16.6H13.3Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.2\"/>`,\n paintRadial: `<path d=\"M3.4 3.4H16.6V16.6H3.4ZM4.95 4.95H15.05V15.05H4.95Z\" fill=\"currentColor\" fill-rule=\"evenodd\" stroke=\"none\" fill-opacity=\"0.7\"/><path d=\"M4.95 4.95H15.05V15.05H4.95ZM6.5 6.5H13.5V13.5H6.5Z\" fill=\"currentColor\" fill-rule=\"evenodd\" stroke=\"none\" fill-opacity=\"0.53\"/><path d=\"M6.5 6.5H13.5V13.5H6.5ZM8.05 8.05H11.95V11.95H8.05Z\" fill=\"currentColor\" fill-rule=\"evenodd\" stroke=\"none\" fill-opacity=\"0.37\"/><path d=\"M8.05 8.05H11.95V11.95H8.05Z\" fill=\"currentColor\" fill-rule=\"evenodd\" stroke=\"none\" fill-opacity=\"0.2\"/>`,\n paintConic: `<path d=\"M10 10L16.6 3.4L16.6 16.6Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"1\"/><path d=\"M10 10L16.6 16.6L3.4 16.6Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.68\"/><path d=\"M10 10L3.4 16.6L3.4 3.4Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.42\"/><path d=\"M10 10L3.4 3.4L16.6 3.4Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.2\"/>`,\n paintMesh: `<path d=\"M3.4 3.4L10 3.4C10 6.26 11.6 5.74 11.6 8.6C7.09 8.6 7.91 10 3.4 10L3.4 3.4Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"1\"/><path d=\"M10 3.4L16.6 3.4L16.6 10C13.85 10 14.35 8.6 11.6 8.6C11.6 5.74 10 6.26 10 3.4Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.68\"/><path d=\"M11.6 8.6C14.35 8.6 13.85 10 16.6 10L16.6 16.6L10 16.6C10 12.2 11.6 13 11.6 8.6Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.42\"/><path d=\"M11.6 8.6C11.6 13 10 12.2 10 16.6L3.4 16.6L3.4 10C7.91 10 7.09 8.6 11.6 8.6Z\" fill=\"currentColor\" stroke=\"none\" fill-opacity=\"0.2\"/>`,\n paintPattern: `<path d=\"M3.4 3.4L4.7 3.4L3.4 4.7Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M8.7 3.4L11.3 3.4L3.4 11.3L3.4 8.7Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M15.3 3.4L16.6 3.4L16.6 4.7L4.7 16.6L3.4 16.6L3.4 15.3Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M16.6 8.7L16.6 11.3L11.3 16.6L8.7 16.6Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M16.6 15.3L16.6 16.6L15.3 16.6Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M15.3 3.4L16.6 3.4L16.6 4.7Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M8.7 3.4L11.3 3.4L16.6 8.7L16.6 11.3Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M3.4 3.4L4.7 3.4L16.6 15.3L16.6 16.6L15.3 16.6L3.4 4.7Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M11.3 16.6L8.7 16.6L3.4 11.3L3.4 8.7Z\" fill=\"currentColor\" stroke=\"none\"/><path d=\"M4.7 16.6L3.4 16.6L3.4 15.3Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n paintNone: `<path d=\"M3.4 3.4H16.6V16.6H3.4Z\"/><path d=\"M3.4 16.6L16.6 3.4\" stroke=\"var(--wzl-danger, #d94a3f)\" stroke-width=\"1.8\" stroke-linecap=\"butt\"/>`,\n\n // Workspace layout\n layoutRows: `<rect x=\"3.4\" y=\"3.4\" width=\"13.2\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"3.4\" y=\"8.3\" width=\"13.2\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"3.4\" y=\"13.2\" width=\"13.2\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/>`,\n layoutColumns: `<rect x=\"3.4\" y=\"3.4\" width=\"3.4\" height=\"13.2\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"8.3\" y=\"3.4\" width=\"3.4\" height=\"13.2\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"13.2\" y=\"3.4\" width=\"3.4\" height=\"13.2\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/>`,\n layoutGrid: `<rect x=\"3.4\" y=\"3.4\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"8.3\" y=\"3.4\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"13.2\" y=\"3.4\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"3.4\" y=\"8.3\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"8.3\" y=\"8.3\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"13.2\" y=\"8.3\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"3.4\" y=\"13.2\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"8.3\" y=\"13.2\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/><rect x=\"13.2\" y=\"13.2\" width=\"3.4\" height=\"3.4\" rx=\"1\" fill=\"currentColor\" stroke=\"none\"/>`,\n\n // Arc profiles\n arcStraight: `<path d=\"M2.6 15H17.4\"/>`,\n arcParabola: `<path d=\"M2.6 15Q10 -5 17.4 15\"/>`,\n arcCircle: `<path d=\"M2.6 15A7.4 7.4 0 0 1 17.4 15\"/>`,\n arcSine: `<path d=\"M2.6 10C3.83 7.38 5.07 5 6.3 5C7.53 5 8.77 7.38 10 10C11.23 12.62 12.47 15 13.7 15C14.93 15 16.17 12.62 17.4 10\"/>`,\n arcBump: `<path d=\"M2.6 15C3.83 15 5.07 11.87 6.3 9.38C7.53 6.88 8.77 5 10 5C11.23 5 12.47 6.88 13.7 9.38C14.93 11.87 16.17 15 17.4 15\"/>`,\n arcPlateau: `<path d=\"M2.6 15V8.6A3.6 3.6 0 0 1 6.2 5H13.8A3.6 3.6 0 0 1 17.4 8.6V15\"/>`,\n arcBell: `<path d=\"M2.6 15C3.42 14.87 4.24 14.6 5.07 13.65C5.89 12.7 6.71 10.87 7.53 8.87C8.36 6.86 9.18 5 10 5C10.82 5 11.64 6.86 12.47 8.87C13.29 10.87 14.11 12.7 14.93 13.65C15.76 14.6 16.58 14.87 17.4 15\"/>`,\n arcEllipse: `<path d=\"M2.6 15A7.4 10 0 0 1 17.4 15\"/>`,\n arcLob: `<path d=\"M2.6 15C3.78 -0.6 10.74 4.2 17.4 15\"/>`,\n arcDive: `<path d=\"M2.6 15C9.26 4.2 16.22 -0.6 17.4 15\"/>`,\n arcTriangle: `<path d=\"M2.6 10L6.3 5L13.7 15L17.4 10\"/>`,\n arcSquare: `<path d=\"M2.6 10L2.6 5L10 5L10 15L17.4 15L17.4 10\"/>`,\n arcSawtooth: `<path d=\"M2.6 10L10 5L10 15L17.4 10\"/>`,\n arcStair: `<path d=\"M2.6 10L4.97 10L4.97 5L8.82 5L8.82 10L11.18 10L11.18 15L15.03 15L15.03 10L17.4 10\"/>`,\n arcZigzag: `<path d=\"M2.6 10L4.45 5L8.15 15L10 10L11.85 5L15.55 15L17.4 10\"/>`,\n arcRipple: `<path d=\"M2.6 10C3.22 7.38 3.83 5 4.45 5C5.07 5 5.68 7.38 6.3 10C6.92 12.62 7.53 15 8.15 15C8.77 15 9.38 12.62 10 10C10.62 7.38 11.23 5 11.85 5C12.47 5 13.08 7.38 13.7 10C14.32 12.62 14.93 15 15.55 15C16.17 15 16.78 12.62 17.4 10\"/>`,\n arcHop: `<path d=\"M2.6 15Q6.3 -5 10 15M10 15Q13.7 4 17.4 15\"/>`,\n arcCusp: `<path d=\"M2.6 15Q7.34 12.8 10 5Q12.66 12.8 17.4 15\"/>`,\n\n // Curves\n curveLine: `<path d=\"M2.6 10.72H17.4\"/>`,\n curveParabola: `<path d=\"M2.6 15.72Q10 -4.28 17.4 15.72\"/>`,\n curveCircle: `<path d=\"M2.6 15.72A7.4 7.4 0 0 1 17.4 15.72\"/>`,\n curveEllipse: `<path d=\"M2.6 15.72A7.4 10 0 0 1 17.4 15.72\"/>`,\n curveHyperbola: `<path d=\"M2.6 15.72C2.91 15.08 3.8 13.12 4.48 11.86C5.16 10.61 5.76 9.21 6.68 8.19C7.6 7.16 8.89 5.72 10 5.72C11.11 5.72 12.4 7.16 13.32 8.19C14.24 9.21 14.84 10.61 15.52 11.86C16.2 13.12 17.09 15.08 17.4 15.72\"/>`,\n curveHyperbolaPair: `<path d=\"M2.6 15.72C2.91 15.08 3.8 13.12 4.48 11.86C5.16 10.61 5.76 9.21 6.68 8.19C7.6 7.16 8.89 5.72 10 5.72C11.11 5.72 12.4 7.16 13.32 8.19C14.24 9.21 14.84 10.61 15.52 11.86C16.2 13.12 17.09 15.08 17.4 15.72M2.6 5.72C2.91 6.36 3.8 8.32 4.48 9.58C5.16 10.83 5.76 12.23 6.68 13.25C7.6 14.28 8.89 15.72 10 15.72C11.11 15.72 12.4 14.28 13.32 13.25C14.24 12.23 14.84 10.83 15.52 9.58C16.2 8.32 17.09 6.36 17.4 5.72\"/>`,\n curveCubic: `<path d=\"M2.6 15.72C2.88 15.27 3.59 13.78 4.3 13.01C5 12.24 5.89 11.49 6.84 11.11C7.79 10.73 8.95 10.85 10 10.72C11.05 10.59 12.21 10.71 13.16 10.33C14.11 9.95 15 9.2 15.7 8.43C16.41 7.66 17.12 6.17 17.4 5.72\"/>`,\n curveQuartic: `<path d=\"M2.6 15.28C2.98 15.06 4.27 14.67 4.88 13.94C5.49 13.22 5.8 11.93 6.27 10.92C6.74 9.92 7.08 8.79 7.7 7.93C8.32 7.06 9.23 5.72 10 5.72C10.77 5.72 11.68 7.06 12.3 7.93C12.92 8.79 13.26 9.92 13.73 10.92C14.2 11.93 14.51 13.22 15.12 13.94C15.73 14.67 17.02 15.06 17.4 15.28\"/>`,\n curveSqrt: `<path d=\"M2.6 15.72C2.8 15.25 3.19 13.72 3.77 12.91C4.36 12.1 5.27 11.46 6.1 10.86C6.93 10.25 7.86 9.75 8.77 9.26C9.69 8.77 10.63 8.35 11.58 7.93C12.53 7.51 13.5 7.13 14.47 6.76C15.44 6.4 16.91 5.89 17.4 5.72\"/>`,\n curveReciprocal: `<path d=\"M2.6 15.72C2.69 15.31 2.91 14.08 3.15 13.28C3.39 12.49 3.66 11.68 4.06 10.96C4.46 10.24 4.95 9.53 5.55 8.97C6.15 8.41 6.89 7.97 7.63 7.61C8.37 7.25 9.19 7.01 9.99 6.79C10.79 6.57 11.62 6.43 12.44 6.29C13.26 6.15 14.09 6.05 14.91 5.96C15.74 5.86 16.99 5.76 17.4 5.72\"/>`,\n curveAbs: `<path d=\"M2.6 5.72L10 15.72L17.4 5.72\"/>`,\n curveCusp: `<path d=\"M2.6 15.72Q7.34 13.52 10 5.72Q12.66 13.52 17.4 15.72\"/>`,\n curveExponential: `<path d=\"M2.6 15.72C3.12 15.64 4.69 15.47 5.72 15.26C6.74 15.04 7.78 14.79 8.76 14.42C9.73 14.05 10.7 13.59 11.57 13.01C12.44 12.44 13.26 11.74 13.98 10.99C14.7 10.23 15.32 9.37 15.89 8.49C16.46 7.61 17.15 6.18 17.4 5.72\"/>`,\n curveLogarithm: `<path d=\"M2.6 15.72C2.72 15.34 3.01 14.18 3.35 13.47C3.68 12.76 4.11 12.07 4.61 11.46C5.11 10.86 5.72 10.32 6.35 9.85C6.97 9.37 7.67 8.98 8.37 8.61C9.07 8.25 9.81 7.94 10.55 7.66C11.28 7.37 12.04 7.12 12.79 6.89C13.55 6.66 14.32 6.45 15.09 6.26C15.85 6.06 17.01 5.81 17.4 5.72\"/>`,\n curveDecay: `<path d=\"M2.6 5.72C2.84 6.19 3.5 7.64 4.06 8.53C4.61 9.43 5.22 10.31 5.94 11.08C6.65 11.85 7.47 12.56 8.34 13.13C9.22 13.71 10.2 14.16 11.19 14.52C12.17 14.88 13.22 15.11 14.26 15.31C15.29 15.51 16.88 15.65 17.4 15.72\"/>`,\n curveSigmoid: `<path d=\"M2.6 15.72C3.11 15.62 4.75 15.55 5.68 15.14C6.61 14.74 7.46 14.02 8.18 13.29C8.9 12.55 9.39 11.58 10 10.72C10.61 9.86 11.1 8.89 11.82 8.15C12.54 7.42 13.39 6.7 14.32 6.3C15.25 5.89 16.89 5.82 17.4 5.72\"/>`,\n curveSoftplus: `<path d=\"M2.6 15.72C3.13 15.7 4.74 15.73 5.79 15.62C6.85 15.5 7.95 15.42 8.92 15.03C9.89 14.65 10.79 14 11.59 13.32C12.38 12.63 13.03 11.75 13.7 10.93C14.37 10.1 14.97 9.22 15.59 8.35C16.2 7.48 17.1 6.16 17.4 5.72\"/>`,\n curveRelu: `<path d=\"M2.6 15.72L10 15.72L17.4 5.72\"/>`,\n curveStep: `<path d=\"M2.6 15.72L10 15.72L10 5.72L17.4 5.72\"/>`,\n curvePowerLaw: `<path d=\"M2.6 15.72C2.62 15.25 2.67 13.85 2.74 12.91C2.81 11.98 2.83 11.03 3.01 10.12C3.19 9.21 3.27 8.11 3.8 7.45C4.33 6.78 5.32 6.39 6.18 6.13C7.04 5.87 8.04 5.93 8.98 5.87C9.91 5.81 10.85 5.8 11.78 5.78C12.72 5.76 13.66 5.75 14.59 5.74C15.53 5.73 16.93 5.72 17.4 5.72\"/>`,\n curveCatenary: `<path d=\"M2.6 5.72C2.86 6.4 3.53 8.49 4.16 9.8C4.79 11.11 5.4 12.57 6.37 13.55C7.34 14.54 8.79 15.72 10 15.72C11.21 15.72 12.66 14.54 13.63 13.55C14.6 12.57 15.21 11.11 15.84 9.8C16.47 8.49 17.14 6.4 17.4 5.72\"/>`,\n curveBathtub: `<path d=\"M2.6 5.72C2.71 6.29 2.98 8.02 3.27 9.14C3.57 10.27 3.81 11.47 4.37 12.45C4.92 13.43 5.67 14.5 6.61 15.04C7.55 15.59 8.87 15.72 10 15.72C11.13 15.72 12.45 15.59 13.39 15.04C14.33 14.5 15.08 13.43 15.63 12.45C16.19 11.47 16.43 10.27 16.73 9.14C17.02 8.02 17.29 6.29 17.4 5.72\"/>`,\n curveHockeyStick: `<path d=\"M2.6 15.72C3.15 15.68 4.81 15.61 5.91 15.5C7.01 15.39 8.12 15.31 9.19 15.06C10.26 14.8 11.38 14.51 12.3 13.96C13.23 13.41 14.08 12.61 14.75 11.76C15.42 10.91 15.89 9.86 16.33 8.86C16.78 7.85 17.22 6.24 17.4 5.72\"/>`,\n curveSine: `<path d=\"M2.6 10.72C3.83 8.1 5.07 5.72 6.3 5.72C7.53 5.72 8.77 8.1 10 10.72C11.23 13.34 12.47 15.72 13.7 15.72C14.93 15.72 16.17 13.34 17.4 10.72\"/>`,\n curveCosine: `<path d=\"M2.6 5.72C3.83 5.72 5.07 8.1 6.3 10.72C7.53 13.34 8.77 15.72 10 15.72C11.23 15.72 12.47 13.34 13.7 10.72C14.93 8.1 16.17 5.72 17.4 5.72\"/>`,\n curveRipple: `<path d=\"M2.6 10.72C3.22 8.1 3.83 5.72 4.45 5.72C5.07 5.72 5.68 8.1 6.3 10.72C6.92 13.34 7.53 15.72 8.15 15.72C8.77 15.72 9.38 13.34 10 10.72C10.62 8.1 11.23 5.72 11.85 5.72C12.47 5.72 13.08 8.1 13.7 10.72C14.32 13.34 14.93 15.72 15.55 15.72C16.17 15.72 16.78 13.34 17.4 10.72\"/>`,\n curveTriangleWave: `<path d=\"M2.6 10.72L6.3 5.72L13.7 15.72L17.4 10.72\"/>`,\n curveSquareWave: `<path d=\"M2.6 10.72L2.6 5.72L10 5.72L10 15.72L17.4 15.72L17.4 10.72\"/>`,\n curveSawtooth: `<path d=\"M2.6 10.72L10 5.72L10 15.72L17.4 10.72\"/>`,\n curveStair: `<path d=\"M2.6 10.72L4.97 10.72L4.97 5.72L8.82 5.72L8.82 10.72L11.18 10.72L11.18 15.72L15.03 15.72L15.03 10.72L17.4 10.72\"/>`,\n curvePulseTrain: `<path d=\"M2.6 10.72L4.23 10.72L4.23 5.72L6.3 5.72L6.3 10.72L8.96 10.72L8.96 5.72L11.04 5.72L11.04 10.72L13.7 10.72L13.7 5.72L15.77 5.72L15.77 10.72L17.4 10.72\"/>`,\n curveDamped: `<path d=\"M2.6 5.72C2.95 6.01 3.3 6.7 3.66 7.55C4.01 8.39 4.36 9.37 4.71 10.24C5.07 11.11 5.42 11.86 5.77 12.37C6.12 12.87 6.48 13.13 6.83 13.15C7.18 13.17 7.53 12.96 7.89 12.63C8.24 12.3 8.59 11.86 8.94 11.42C9.3 10.99 9.65 10.57 10 10.25C10.35 9.94 10.7 9.72 11.06 9.63C11.41 9.54 11.76 9.56 12.11 9.67C12.47 9.77 12.82 9.96 13.17 10.16C13.52 10.36 13.88 10.57 14.23 10.75C14.58 10.93 14.93 11.08 15.29 11.16C15.64 11.25 15.99 11.28 16.34 11.26C16.7 11.24 17.05 11.17 17.4 11.09\"/>`,\n curveChirp: `<path d=\"M2.6 10.72C2.85 10.33 3.09 9.84 3.34 9.28C3.59 8.73 3.83 8.1 4.08 7.53C4.33 6.96 4.57 6.45 4.82 6.23C5.07 6.01 5.31 6.1 5.56 6.66C5.81 7.22 6.05 8.29 6.3 9.65C6.55 11 6.79 12.65 7.04 13.83C7.29 15.01 7.53 15.64 7.78 15.14C8.03 14.64 8.27 12.95 8.52 10.95C8.77 8.95 9.01 6.8 9.26 6.26C9.51 5.72 9.75 7.01 10 9.3C10.25 11.59 10.49 14.54 10.74 15.18C10.99 15.82 11.23 13.76 11.48 10.95C11.73 8.14 11.97 5.47 12.22 6.3C12.47 7.13 12.71 11.45 12.96 13.83C13.21 16.2 13.45 15.12 13.7 11.79C13.95 8.47 14.19 4.96 14.44 6.66C14.69 8.37 14.93 14.36 15.18 15.21C15.43 16.05 15.67 10.43 15.92 7.53C16.17 4.63 16.41 8.14 16.66 12.16C16.91 16.17 17.15 15.15 17.4 10.72\"/>`,\n curveBeat: `<path d=\"M2.6 10.72C2.81 10.72 3.01 10.48 3.22 10.2C3.42 9.92 3.63 9.65 3.83 9.69C4.04 9.73 4.24 10.11 4.45 10.72C4.66 11.33 4.86 12.16 5.07 12.71C5.27 13.26 5.48 13.5 5.68 13.15C5.89 12.79 6.09 11.86 6.3 10.72C6.51 9.58 6.71 8.3 6.92 7.56C7.12 6.82 7.33 6.66 7.53 7.27C7.74 7.88 7.94 9.24 8.15 10.72C8.36 12.2 8.56 13.75 8.77 14.57C8.97 15.39 9.18 15.44 9.38 14.67C9.59 13.9 9.79 12.33 10 10.72C10.21 9.11 10.41 7.54 10.62 6.77C10.82 6 11.03 6.05 11.23 6.87C11.44 7.69 11.64 9.24 11.85 10.72C12.06 12.2 12.26 13.56 12.47 14.17C12.67 14.78 12.88 14.62 13.08 13.88C13.29 13.14 13.49 11.86 13.7 10.72C13.91 9.58 14.11 8.65 14.32 8.29C14.52 7.94 14.73 8.18 14.93 8.73C15.14 9.28 15.34 10.11 15.55 10.72C15.76 11.33 15.96 11.71 16.17 11.75C16.37 11.79 16.58 11.52 16.78 11.24C16.99 10.96 17.19 10.72 17.4 10.72\"/>`,\n curveGaussian: `<path d=\"M2.6 15.72C3.13 15.57 4.98 15.47 5.78 14.83C6.57 14.18 6.92 12.87 7.35 11.84C7.79 10.8 7.97 9.62 8.41 8.6C8.85 7.58 9.47 5.72 10 5.72C10.53 5.72 11.15 7.58 11.59 8.6C12.03 9.62 12.21 10.8 12.65 11.84C13.08 12.87 13.43 14.18 14.22 14.83C15.02 15.47 16.87 15.57 17.4 15.72\"/>`,\n curveBimodal: `<path d=\"M2.6 15.72C2.95 15.39 4.21 14.57 4.67 13.73C5.14 12.89 5.17 11.7 5.39 10.68C5.62 9.66 5.69 8.28 6 7.6C6.31 6.92 6.93 6.26 7.24 6.61C7.56 6.96 7.69 8.66 7.9 9.68C8.12 10.7 8.19 11.81 8.54 12.75C8.89 13.7 9.51 15.36 10 15.36C10.49 15.36 11.11 13.7 11.46 12.75C11.81 11.81 11.88 10.7 12.1 9.68C12.31 8.66 12.44 6.96 12.76 6.61C13.07 6.26 13.69 6.92 14 7.6C14.31 8.28 14.38 9.66 14.61 10.68C14.83 11.7 14.86 12.89 15.33 13.73C15.79 14.57 17.05 15.39 17.4 15.72\"/>`,\n curveSkewed: `<path d=\"M2.6 15.72C2.76 15.32 3.35 14.19 3.58 13.35C3.82 12.5 3.87 11.55 4.02 10.65C4.17 9.75 4.22 8.78 4.5 7.96C4.79 7.14 5.26 5.74 5.71 5.75C6.15 5.76 6.71 7.24 7.15 8.03C7.6 8.82 7.92 9.69 8.38 10.47C8.85 11.25 9.32 12.06 9.94 12.71C10.56 13.36 11.3 13.96 12.09 14.37C12.88 14.78 13.8 15.01 14.69 15.2C15.57 15.39 16.95 15.46 17.4 15.52\"/>`,\n curveLorentzian: `<path d=\"M2.6 15.72C3.06 15.64 4.52 15.6 5.35 15.26C6.18 14.92 7.02 14.36 7.57 13.66C8.11 12.96 8.34 11.97 8.62 11.08C8.89 10.2 8.99 9.25 9.22 8.35C9.45 7.46 9.74 5.72 10 5.72C10.26 5.72 10.55 7.46 10.78 8.35C11.01 9.25 11.11 10.2 11.38 11.08C11.66 11.97 11.89 12.96 12.43 13.66C12.98 14.36 13.82 14.92 14.65 15.26C15.48 15.6 16.94 15.64 17.4 15.72\"/>`,\n curveOgive: `<path d=\"M2.6 15.72C3.13 15.66 4.83 15.71 5.79 15.34C6.75 14.97 7.64 14.25 8.35 13.48C9.05 12.71 9.45 11.64 10 10.72C10.55 9.8 10.95 8.73 11.65 7.96C12.36 7.19 13.25 6.47 14.21 6.1C15.17 5.73 16.87 5.78 17.4 5.72\"/>`,\n curveUniform: `<path d=\"M2.6 15.72V9.32A3.6 3.6 0 0 1 6.2 5.72H13.8A3.6 3.6 0 0 1 17.4 9.32V15.72\"/>`,\n curveSinc: `<path d=\"M2.6 15.72C2.83 15.6 3.61 15.35 4.01 15.02C4.4 14.69 4.68 14.18 4.96 13.72C5.25 13.27 5.49 12.78 5.73 12.3C5.97 11.82 6.19 11.33 6.42 10.84C6.65 10.35 6.86 9.86 7.1 9.37C7.33 8.89 7.55 8.39 7.82 7.93C8.08 7.46 8.32 6.93 8.69 6.57C9.05 6.2 9.56 5.72 10 5.72C10.44 5.72 10.95 6.2 11.31 6.57C11.68 6.93 11.92 7.46 12.18 7.93C12.45 8.39 12.67 8.89 12.9 9.37C13.14 9.86 13.35 10.35 13.58 10.84C13.81 11.33 14.03 11.82 14.27 12.3C14.51 12.78 14.75 13.27 15.04 13.72C15.32 14.18 15.6 14.69 15.99 15.02C16.39 15.35 17.17 15.6 17.4 15.72\"/>`,\n curveImpulse: `<path d=\"M2.6 15.72L9.7 15.72L10 5.72L10.3 15.72L17.4 15.72\"/>`,\n curveEaseIn: `<path d=\"M2.6 15.72C3.13 15.7 4.75 15.75 5.8 15.62C6.86 15.49 7.94 15.31 8.93 14.94C9.91 14.57 10.87 14.01 11.72 13.38C12.56 12.75 13.31 11.95 14 11.14C14.7 10.34 15.29 9.43 15.86 8.53C16.42 7.63 17.14 6.19 17.4 5.72\"/>`,\n curveEaseOut: `<path d=\"M2.6 15.72C2.86 15.25 3.58 13.81 4.14 12.91C4.71 12.01 5.3 11.1 6 10.3C6.69 9.49 7.44 8.69 8.28 8.06C9.13 7.43 10.09 6.87 11.07 6.5C12.06 6.13 13.14 5.95 14.2 5.82C15.25 5.69 16.87 5.74 17.4 5.72\"/>`,\n curveEaseInOut: `<path d=\"M2.6 15.72C3 15.69 4.23 15.75 4.99 15.55C5.75 15.36 6.53 15.01 7.16 14.55C7.79 14.09 8.32 13.43 8.79 12.8C9.26 12.16 9.6 11.41 10 10.72C10.4 10.03 10.74 9.28 11.21 8.64C11.68 8.01 12.21 7.35 12.84 6.89C13.47 6.43 14.25 6.08 15.01 5.89C15.77 5.69 17 5.75 17.4 5.72\"/>`,\n curveOvershoot: `<path d=\"M2.6 15.72C2.76 15.33 3.2 14.15 3.54 13.39C3.88 12.62 4.24 11.86 4.64 11.13C5.05 10.4 5.48 9.67 6 9.02C6.51 8.36 7.06 7.7 7.72 7.19C8.37 6.69 9.14 6.25 9.92 6.01C10.7 5.77 11.57 5.73 12.4 5.73C13.23 5.73 14.07 5.92 14.9 6C15.73 6.08 16.98 6.18 17.4 6.22\"/>`,\n curveBounce: `<path d=\"M2.6 15.72Q6 -4.28 9.41 15.72M9.41 15.72Q11.63 6.72 13.85 15.72M13.85 15.72Q15.18 12.12 16.51 15.72M16.51 15.72Q16.96 14.72 17.4 15.72\"/>`,\n curveElastic: `<path d=\"M2.6 15.72C2.91 15.01 3.22 13.44 3.53 11.66C3.83 9.87 4.14 7.89 4.45 6.23C4.76 4.58 5.07 3.25 5.38 2.45C5.68 1.65 5.99 1.37 6.3 1.5C6.61 1.63 6.92 2.17 7.23 2.85C7.53 3.53 7.84 4.35 8.15 5.07C8.46 5.79 8.77 6.41 9.07 6.82C9.38 7.24 9.69 7.44 10 7.46C10.31 7.47 10.62 7.31 10.93 7.06C11.23 6.81 11.54 6.48 11.85 6.18C12.16 5.87 12.47 5.59 12.77 5.39C13.08 5.18 13.39 5.06 13.7 5.02C14.01 4.99 14.32 5.03 14.62 5.11C14.93 5.2 15.24 5.33 15.55 5.45C15.86 5.58 16.17 5.71 16.47 5.8C16.78 5.9 17.09 5.96 17.4 5.99\"/>`,\n curveLemniscate: `<path d=\"M17.4 11.12C17.4 11.98 16.91 12.8 16.23 13.25C15.54 13.7 14.73 13.8 14.01 13.7C13.29 13.6 12.66 13.3 12.11 12.95C11.57 12.6 11.1 12.19 10.65 11.76C10.21 11.34 9.79 10.9 9.35 10.48C8.9 10.05 8.43 9.64 7.89 9.29C7.34 8.94 6.71 8.64 5.99 8.54C5.27 8.44 4.46 8.54 3.77 8.99C3.09 9.44 2.6 10.26 2.6 11.12C2.6 11.98 3.09 12.8 3.77 13.25C4.46 13.7 5.27 13.8 5.99 13.7C6.71 13.6 7.34 13.3 7.89 12.95C8.43 12.6 8.9 12.19 9.35 11.76C9.79 11.34 10.21 10.9 10.65 10.48C11.1 10.05 11.57 9.64 12.11 9.29C12.66 8.94 13.29 8.64 14.01 8.54C14.73 8.44 15.54 8.54 16.23 8.99C16.91 9.44 17.4 10.26 17.4 11.12\"/>`,\n curveCardioid: `<path d=\"M10 6.14C10 6.14 10 6.09 10.03 6C10.06 5.91 10.13 5.78 10.24 5.63C10.36 5.48 10.54 5.31 10.77 5.16C11.01 5.01 11.32 4.88 11.68 4.8C12.04 4.72 12.45 4.69 12.91 4.74C13.36 4.79 13.84 4.92 14.32 5.15C14.8 5.38 15.27 5.71 15.7 6.14C16.12 6.56 16.5 7.08 16.79 7.69C17.08 8.29 17.28 8.96 17.36 9.68C17.44 10.4 17.4 11.15 17.23 11.9C17.06 12.65 16.76 13.39 16.33 14.07C15.9 14.75 15.35 15.37 14.7 15.89C14.05 16.41 13.3 16.82 12.5 17.1C11.7 17.38 10.85 17.53 10 17.53C9.15 17.53 8.3 17.38 7.5 17.1C6.7 16.82 5.95 16.41 5.3 15.89C4.65 15.37 4.1 14.75 3.67 14.07C3.24 13.39 2.94 12.65 2.77 11.9C2.6 11.15 2.56 10.4 2.64 9.68C2.72 8.96 2.92 8.29 3.21 7.69C3.5 7.08 3.88 6.56 4.3 6.14C4.73 5.71 5.2 5.38 5.68 5.15C6.16 4.92 6.64 4.79 7.09 4.74C7.55 4.69 7.96 4.72 8.32 4.8C8.68 4.88 8.99 5.01 9.23 5.16C9.46 5.31 9.64 5.48 9.76 5.63C9.87 5.78 9.94 5.91 9.97 6C10 6.09 10 6.14 10 6.14\"/>`,\n curveAstroid: `<path d=\"M17.4 11.12C17.4 11.12 17.02 11.13 16.37 11.34C15.72 11.55 14.81 11.97 13.92 12.62C13.02 13.27 12.15 14.14 11.5 15.04C10.85 15.93 10.43 16.84 10.22 17.49C10.01 18.14 10 18.52 10 18.52C10 18.52 9.99 18.14 9.78 17.49C9.57 16.84 9.15 15.93 8.5 15.04C7.85 14.14 6.98 13.27 6.08 12.62C5.19 11.97 4.28 11.55 3.63 11.34C2.98 11.13 2.6 11.12 2.6 11.12C2.6 11.12 2.98 11.11 3.63 10.9C4.28 10.69 5.19 10.27 6.08 9.62C6.98 8.97 7.85 8.1 8.5 7.2C9.15 6.31 9.57 5.4 9.78 4.75C9.99 4.1 10 3.72 10 3.72C10 3.72 10.01 4.1 10.22 4.75C10.43 5.4 10.85 6.31 11.5 7.2C12.15 8.1 13.02 8.97 13.92 9.62C14.81 10.27 15.72 10.69 16.37 10.9C17.02 11.11 17.4 11.12 17.4 11.12\"/>`,\n curveRose: `<path d=\"M16.57 11.12C16.57 11.49 16.32 11.85 15.86 12.13C15.4 12.42 14.72 12.61 13.9 12.66C13.08 12.71 12.13 12.61 11.13 12.35C10.14 12.09 9.11 11.67 8.16 11.12C7.21 10.57 6.33 9.89 5.61 9.16C4.89 8.43 4.32 7.65 3.96 6.92C3.59 6.18 3.42 5.5 3.43 4.96C3.44 4.42 3.64 4.02 3.96 3.84C4.27 3.65 4.71 3.68 5.19 3.94C5.66 4.2 6.17 4.69 6.62 5.38C7.07 6.06 7.47 6.94 7.74 7.93C8.01 8.92 8.16 10.02 8.16 11.12C8.16 12.22 8.01 13.32 7.74 14.31C7.47 15.3 7.07 16.18 6.62 16.86C6.17 17.55 5.66 18.04 5.19 18.3C4.71 18.56 4.27 18.59 3.96 18.4C3.64 18.22 3.44 17.82 3.43 17.28C3.42 16.74 3.59 16.06 3.96 15.32C4.32 14.59 4.89 13.81 5.61 13.08C6.33 12.35 7.21 11.67 8.16 11.12C9.11 10.57 10.14 10.15 11.13 9.89C12.13 9.63 13.08 9.53 13.9 9.58C14.72 9.63 15.4 9.82 15.86 10.11C16.32 10.39 16.57 10.75 16.57 11.12C16.57 11.49 16.32 11.85 15.86 12.13C15.4 12.42 14.72 12.61 13.9 12.66C13.08 12.71 12.13 12.61 11.13 12.35C10.14 12.09 9.11 11.67 8.16 11.12C7.21 10.57 6.33 9.89 5.61 9.16C4.89 8.43 4.32 7.65 3.96 6.92C3.59 6.18 3.42 5.5 3.43 4.96C3.44 4.42 3.64 4.02 3.96 3.84C4.27 3.65 4.71 3.68 5.19 3.94C5.66 4.2 6.17 4.69 6.62 5.38C7.07 6.06 7.47 6.94 7.74 7.93C8.01 8.92 8.16 10.02 8.16 11.12C8.16 12.22 8.01 13.32 7.74 14.31C7.47 15.3 7.07 16.18 6.62 16.86C6.17 17.55 5.66 18.04 5.19 18.3C4.71 18.56 4.27 18.59 3.96 18.4C3.64 18.22 3.44 17.82 3.43 17.28C3.42 16.74 3.59 16.06 3.96 15.32C4.32 14.59 4.89 13.81 5.61 13.08C6.33 12.35 7.21 11.67 8.16 11.12C9.11 10.57 10.14 10.15 11.13 9.89C12.13 9.63 13.08 9.53 13.9 9.58C14.72 9.63 15.4 9.82 15.86 10.11C16.32 10.39 16.57 10.75 16.57 11.12\"/>`,\n curveSpiral: `<path d=\"M10.77 12.22C10.92 12.38 11.02 12.66 10.97 12.97C10.93 13.28 10.74 13.62 10.42 13.86C10.09 14.1 9.63 14.24 9.13 14.18C8.63 14.13 8.1 13.88 7.69 13.45C7.29 13.01 7 12.38 6.97 11.68C6.94 10.98 7.15 10.22 7.63 9.58C8.11 8.94 8.85 8.43 9.73 8.21C10.6 7.99 11.6 8.08 12.51 8.5C13.42 8.93 14.22 9.7 14.71 10.69C15.19 11.68 15.35 12.89 15.09 14.07C14.83 15.24 14.14 16.38 13.12 17.2C12.1 18.02 10.75 18.51 9.34 18.52C7.93 18.53 6.47 18.04 5.28 17.11C4.09 16.18 3.19 14.8 2.81 13.23C2.43 11.66 2.59 9.91 3.31 8.35C4.03 6.79 5.31 5.44 6.94 4.61C8.56 3.79 10.51 3.51 12.4 3.89C14.28 4.27 16.08 5.31 17.39 6.85\"/>`,\n curveLissajous: `<path d=\"M10 11.12C11.66 12.23 13.32 13.33 14.61 14.33C15.91 15.33 16.84 16.22 17.21 16.91C17.58 17.6 17.39 18.09 16.67 18.33C15.95 18.58 14.71 18.58 13.21 18.33C11.71 18.09 9.97 17.6 8.35 16.91C6.73 16.22 5.25 15.33 4.21 14.33C3.18 13.33 2.6 12.23 2.6 11.12C2.6 10.01 3.18 8.91 4.21 7.91C5.25 6.91 6.73 6.02 8.35 5.33C9.97 4.64 11.71 4.15 13.21 3.91C14.71 3.66 15.95 3.66 16.67 3.91C17.39 4.15 17.58 4.64 17.21 5.33C16.84 6.02 15.91 6.91 14.61 7.91C13.32 8.91 11.66 10.01 10 11.12C8.34 12.23 6.68 13.33 5.39 14.33C4.09 15.33 3.16 16.22 2.79 16.91C2.42 17.6 2.61 18.09 3.33 18.33C4.05 18.58 5.29 18.58 6.79 18.33C8.29 18.09 10.03 17.6 11.65 16.91C13.27 16.22 14.75 15.33 15.79 14.33C16.82 13.33 17.4 12.23 17.4 11.12C17.4 10.01 16.82 8.91 15.79 7.91C14.75 6.91 13.27 6.02 11.65 5.33C10.03 4.64 8.29 4.15 6.79 3.91C5.29 3.66 4.05 3.66 3.33 3.91C2.61 4.15 2.42 4.64 2.79 5.33C3.16 6.02 4.09 6.91 5.39 7.91C6.68 8.91 8.34 10.01 10 11.12\"/>`,\n curveCycloid: `<path d=\"M2.6 15.72C2.6 15.72 2.6 15.49 2.66 15.05C2.71 14.61 2.82 13.98 3.03 13.22C3.23 12.46 3.53 11.59 3.94 10.72C4.36 9.85 4.88 8.98 5.49 8.22C6.11 7.46 6.82 6.83 7.59 6.39C8.36 5.95 9.18 5.72 10 5.72C10.82 5.72 11.64 5.95 12.41 6.39C13.18 6.83 13.89 7.46 14.51 8.22C15.12 8.98 15.64 9.85 16.06 10.72C16.47 11.59 16.77 12.46 16.97 13.22C17.18 13.98 17.29 14.61 17.34 15.05C17.4 15.49 17.4 15.72 17.4 15.72\"/>`,\n curveSuperellipse: `<path d=\"M17.4 11.12C17.4 14.45 17.38 12.98 17.34 13.46C17.31 13.94 17.25 14.34 17.17 14.69C17.1 15.05 17 15.37 16.89 15.66C16.78 15.94 16.64 16.21 16.49 16.44C16.34 16.68 16.16 16.9 15.97 17.09C15.78 17.28 15.56 17.46 15.32 17.61C15.09 17.76 14.82 17.9 14.54 18.01C14.25 18.12 13.93 18.22 13.57 18.29C13.22 18.37 12.82 18.43 12.34 18.46C11.86 18.5 13.33 18.52 10 18.52C6.67 18.52 8.14 18.5 7.66 18.46C7.18 18.43 6.78 18.37 6.43 18.29C6.07 18.22 5.75 18.12 5.46 18.01C5.18 17.9 4.91 17.76 4.68 17.61C4.44 17.46 4.22 17.28 4.03 17.09C3.84 16.9 3.66 16.68 3.51 16.44C3.36 16.21 3.22 15.94 3.11 15.66C3 15.37 2.9 15.05 2.83 14.69C2.75 14.34 2.69 13.94 2.66 13.46C2.62 12.98 2.6 14.45 2.6 11.12C2.6 7.79 2.62 9.26 2.66 8.78C2.69 8.3 2.75 7.9 2.83 7.55C2.9 7.19 3 6.87 3.11 6.58C3.22 6.3 3.36 6.03 3.51 5.8C3.66 5.56 3.84 5.34 4.03 5.15C4.22 4.96 4.44 4.78 4.68 4.63C4.91 4.48 5.18 4.34 5.46 4.23C5.75 4.12 6.07 4.02 6.43 3.95C6.78 3.87 7.18 3.81 7.66 3.78C8.14 3.74 6.67 3.72 10 3.72C13.33 3.72 11.86 3.74 12.34 3.78C12.82 3.81 13.22 3.87 13.57 3.95C13.93 4.02 14.25 4.12 14.54 4.23C14.82 4.34 15.09 4.48 15.32 4.63C15.56 4.78 15.78 4.96 15.97 5.15C16.16 5.34 16.34 5.56 16.49 5.8C16.64 6.03 16.78 6.3 16.89 6.58C17 6.87 17.1 7.19 17.17 7.55C17.25 7.9 17.31 8.3 17.34 8.78C17.38 9.26 17.4 7.79 17.4 11.12\"/>`,\n curveTangent: `<path d=\"M2.6 10.72C2.66 10.67 2.82 10.51 2.93 10.4C3.04 10.29 3.16 10.18 3.27 10.06C3.38 9.94 3.49 9.82 3.6 9.69C3.71 9.56 3.82 9.43 3.93 9.28C4.04 9.13 4.15 8.97 4.26 8.78C4.38 8.59 4.49 8.4 4.6 8.14C4.71 7.89 4.82 7.64 4.93 7.26C5.04 6.88 5.21 6.12 5.26 5.89M7.34 15.55C7.45 15.17 7.78 13.86 8 13.3C8.22 12.73 8.45 12.48 8.67 12.16C8.89 11.84 9.11 11.62 9.33 11.38C9.56 11.14 9.78 10.94 10 10.72C10.22 10.5 10.44 10.3 10.67 10.06C10.89 9.82 11.11 9.6 11.33 9.28C11.55 8.96 11.78 8.71 12 8.14C12.22 7.58 12.55 6.27 12.66 5.89M14.74 15.55C14.79 15.32 14.96 14.56 15.07 14.18C15.18 13.8 15.29 13.55 15.4 13.3C15.51 13.04 15.62 12.85 15.73 12.66C15.85 12.47 15.96 12.31 16.07 12.16C16.18 12.01 16.29 11.88 16.4 11.75C16.51 11.62 16.62 11.5 16.73 11.38C16.85 11.26 16.96 11.15 17.07 11.04C17.18 10.93 17.34 10.77 17.4 10.72\"/>`,\n curveCotangent: `<path d=\"M3.64 5.89C3.75 6.27 4.08 7.58 4.3 8.14C4.52 8.71 4.75 8.96 4.97 9.28C5.19 9.6 5.41 9.82 5.63 10.06C5.86 10.3 6.08 10.5 6.3 10.72C6.52 10.94 6.74 11.14 6.97 11.38C7.19 11.62 7.41 11.84 7.63 12.16C7.85 12.48 8.08 12.73 8.3 13.3C8.52 13.86 8.85 15.17 8.96 15.55M11.04 5.89C11.15 6.27 11.48 7.58 11.7 8.14C11.92 8.71 12.15 8.96 12.37 9.28C12.59 9.6 12.81 9.82 13.03 10.06C13.26 10.3 13.48 10.5 13.7 10.72C13.92 10.94 14.14 11.14 14.37 11.38C14.59 11.62 14.81 11.84 15.03 12.16C15.25 12.48 15.48 12.73 15.7 13.3C15.92 13.86 16.25 15.17 16.36 15.55\"/>`,\n curveSecant: `<path d=\"M2.6 12.64C2.66 12.65 2.82 12.65 2.93 12.66C3.04 12.68 3.16 12.69 3.27 12.72C3.38 12.75 3.49 12.78 3.6 12.83C3.71 12.88 3.82 12.93 3.93 13C4.04 13.07 4.15 13.14 4.26 13.25C4.38 13.35 4.49 13.47 4.6 13.63C4.71 13.79 4.82 13.95 4.93 14.22C5.04 14.49 5.2 15.01 5.26 15.24C5.33 15.46 5.33 15.51 5.34 15.56M7.26 5.88C7.37 6.18 7.71 7.28 7.93 7.7C8.15 8.12 8.37 8.23 8.59 8.39C8.82 8.56 9.04 8.63 9.26 8.7C9.48 8.76 9.7 8.79 9.93 8.8C10.15 8.8 10.37 8.79 10.59 8.73C10.81 8.68 11.04 8.62 11.26 8.49C11.48 8.35 11.7 8.24 11.92 7.91C12.15 7.58 12.45 6.82 12.59 6.48C12.73 6.15 12.71 5.98 12.74 5.88M14.66 15.56C14.72 15.37 14.88 14.7 15 14.4C15.11 14.1 15.22 13.92 15.33 13.74C15.44 13.56 15.55 13.44 15.66 13.32C15.77 13.2 15.88 13.12 15.99 13.05C16.11 12.97 16.22 12.91 16.33 12.86C16.44 12.81 16.55 12.77 16.66 12.74C16.77 12.71 16.88 12.69 16.99 12.67C17.1 12.66 17.26 12.65 17.33 12.64C17.39 12.64 17.39 12.64 17.4 12.64\"/>`,\n curveCosecant: `<path d=\"M3.56 15.56C3.67 15.26 4.01 14.16 4.23 13.74C4.45 13.32 4.67 13.21 4.89 13.05C5.12 12.88 5.34 12.81 5.56 12.74C5.78 12.68 6 12.65 6.23 12.64C6.45 12.64 6.67 12.65 6.89 12.71C7.11 12.76 7.34 12.82 7.56 12.95C7.78 13.09 8 13.2 8.22 13.53C8.45 13.86 8.75 14.62 8.89 14.96C9.03 15.29 9.01 15.46 9.04 15.56M10.96 5.88C11.07 6.18 11.41 7.28 11.63 7.7C11.85 8.12 12.07 8.23 12.29 8.39C12.52 8.56 12.74 8.63 12.96 8.7C13.18 8.76 13.4 8.79 13.63 8.8C13.85 8.8 14.07 8.79 14.29 8.73C14.51 8.68 14.74 8.62 14.96 8.49C15.18 8.35 15.4 8.24 15.62 7.91C15.85 7.58 16.15 6.82 16.29 6.48C16.43 6.15 16.41 5.98 16.44 5.88\"/>`,\n curveArcsine: `<path d=\"M2.6 15.72C2.85 15.38 3.59 14.16 4.08 13.67C4.57 13.18 5.07 13.04 5.56 12.77C6.05 12.49 6.55 12.26 7.04 12.03C7.53 11.8 8.03 11.58 8.52 11.36C9.01 11.14 9.51 10.93 10 10.72C10.49 10.51 10.99 10.3 11.48 10.08C11.97 9.86 12.47 9.64 12.96 9.41C13.45 9.18 13.95 8.95 14.44 8.67C14.93 8.4 15.43 8.26 15.92 7.77C16.41 7.28 17.15 6.06 17.4 5.72\"/>`,\n curveAsymptote: `<path d=\"M2.6 12.61C2.69 12.64 2.97 12.71 3.16 12.77C3.34 12.82 3.53 12.88 3.71 12.95C3.9 13.01 4.08 13.08 4.26 13.16C4.45 13.24 4.64 13.33 4.82 13.43C5.01 13.52 5.19 13.63 5.38 13.75C5.56 13.87 5.75 14 5.93 14.16C6.11 14.32 6.3 14.49 6.49 14.71C6.67 14.92 6.92 15.29 7.04 15.45C7.16 15.62 7.16 15.66 7.19 15.7M12.81 5.74C12.9 5.87 13.18 6.32 13.37 6.56C13.55 6.79 13.74 6.97 13.92 7.15C14.11 7.32 14.29 7.46 14.48 7.59C14.66 7.72 14.85 7.83 15.03 7.93C15.22 8.04 15.4 8.13 15.59 8.21C15.77 8.3 15.96 8.37 16.14 8.44C16.33 8.51 16.51 8.57 16.7 8.63C16.88 8.69 17.13 8.75 17.25 8.79C17.37 8.82 17.38 8.82 17.4 8.83\"/>`,\n\n // Shapes\n shapeTriangle: `<path d=\"M10 3.59L17.4 16.41L2.6 16.41Z\" stroke-linejoin=\"miter\"/>`,\n shapeRightTriangle: `<path d=\"M2.6 17.4L2.6 2.6L17.4 17.4Z\" stroke-linejoin=\"miter\"/>`,\n shapeSquare: `<path d=\"M2.6 2.6L17.4 2.6L17.4 17.4L2.6 17.4Z\" stroke-linejoin=\"miter\"/>`,\n shapeRectangle: `<path d=\"M2.6 5.37L17.4 5.37L17.4 14.63L2.6 14.63Z\" stroke-linejoin=\"miter\"/>`,\n shapeDiamond: `<path d=\"M10 2.6L17.4 10L10 17.4L2.6 10Z\" stroke-linejoin=\"miter\"/>`,\n shapeParallelogram: `<path d=\"M5.35 4.71L17.4 4.71L14.65 15.29L2.6 15.29Z\" stroke-linejoin=\"miter\"/>`,\n shapeTrapezoid: `<path d=\"M5.35 4.71L14.65 4.71L17.4 15.29L2.6 15.29Z\" stroke-linejoin=\"miter\"/>`,\n shapeKite: `<path d=\"M10 2.6L16.43 7.75L10 17.4L3.57 7.75Z\" stroke-linejoin=\"miter\"/>`,\n shapePentagon: `<path d=\"M10 2.96L17.4 8.34L14.57 17.04L5.43 17.04L2.6 8.34Z\" stroke-linejoin=\"miter\"/>`,\n shapeHexagon: `<path d=\"M10 2.6L16.41 6.3L16.41 13.7L10 17.4L3.59 13.7L3.59 6.3Z\" stroke-linejoin=\"miter\"/>`,\n shapeHexagonFlat: `<path d=\"M17.4 10L13.7 16.41L6.3 16.41L2.6 10L6.3 3.59L13.7 3.59Z\" stroke-linejoin=\"miter\"/>`,\n shapeHeptagon: `<path d=\"M10 2.79L15.93 5.64L17.4 12.06L13.29 17.21L6.71 17.21L2.6 12.06L4.07 5.64Z\" stroke-linejoin=\"miter\"/>`,\n shapeOctagon: `<path d=\"M13.07 2.6L17.4 6.93L17.4 13.07L13.07 17.4L6.93 17.4L2.6 13.07L2.6 6.93L6.93 2.6Z\" stroke-linejoin=\"miter\"/>`,\n shapeDecagon: `<path d=\"M10 2.6L14.35 4.01L17.04 7.71L17.04 12.29L14.35 15.99L10 17.4L5.65 15.99L2.96 12.29L2.96 7.71L5.65 4.01Z\" stroke-linejoin=\"miter\"/>`,\n shapeDodecagon: `<path d=\"M10 2.6L13.7 3.59L16.41 6.3L17.4 10L16.41 13.7L13.7 16.41L10 17.4L6.3 16.41L3.59 13.7L2.6 10L3.59 6.3L6.3 3.59Z\" stroke-linejoin=\"miter\"/>`,\n shapeCross: `<path d=\"M7.63 2.6L12.37 2.6L12.37 7.63L17.4 7.63L17.4 12.37L12.37 12.37L12.37 17.4L7.63 17.4L7.63 12.37L2.6 12.37L2.6 7.63L7.63 7.63Z\" stroke-linejoin=\"miter\"/>`,\n shapeLShape: `<path d=\"M2.6 2.6L8.82 2.6L8.82 11.78L17.4 11.78L17.4 17.4L2.6 17.4Z\" stroke-linejoin=\"miter\"/>`,\n shapeChevron: `<path d=\"M2.6 4.38L10 10.59L17.4 4.38L17.4 9.41L10 15.62L2.6 9.41Z\" stroke-linejoin=\"miter\"/>`,\n shapeStar: `<path d=\"M10 2.96L12.2 7.72L17.4 8.34L13.55 11.9L14.57 17.04L10 14.48L5.43 17.04L6.45 11.9L2.6 8.34L7.8 7.72Z\" stroke-linejoin=\"miter\"/>`,\n shapeStar4: `<path d=\"M10 2.6L11.99 8.01L17.4 10L11.99 11.99L10 17.4L8.01 11.99L2.6 10L8.01 8.01Z\" stroke-linejoin=\"miter\"/>`,\n shapeStar6: `<path d=\"M10 2.6L12.07 6.41L16.41 6.3L14.14 10L16.41 13.7L12.07 13.59L10 17.4L7.93 13.59L3.59 13.7L5.86 10L3.59 6.3L7.93 6.41Z\" stroke-linejoin=\"miter\"/>`,\n shapeStar8: `<path d=\"M10 2.6L11.76 5.76L15.23 4.77L14.24 8.24L17.4 10L14.24 11.76L15.23 15.23L11.76 14.24L10 17.4L8.24 14.24L4.77 15.23L5.76 11.76L2.6 10L5.76 8.24L4.77 4.77L8.24 5.76Z\" stroke-linejoin=\"miter\"/>`,\n shapePentagram: `<path d=\"M10 2.96L14.57 17.04L2.6 8.34L17.4 8.34L5.43 17.04Z\" stroke-linejoin=\"miter\"/>`,\n shapeCircle: `<path d=\"M2.6 10A7.4 7.4 0 1 1 17.4 10A7.4 7.4 0 1 1 2.6 10Z\"/>`,\n shapeEllipse: `<path d=\"M2.6 10A7.4 4.74 0 1 1 17.4 10A7.4 4.74 0 1 1 2.6 10Z\"/>`,\n shapeSemicircle: `<path d=\"M2.6 13.7A7.4 7.4 0 0 1 17.4 13.7Z\"/>`,\n shapeQuarter: `<path d=\"M2.6 17.4V2.6A14.8 14.8 0 0 1 17.4 17.4Z\"/>`,\n shapeStadium: `<path d=\"M6.74 5.86H13.26A4.14 4.14 0 0 1 13.26 14.14H6.74A4.14 4.14 0 0 1 6.74 5.86Z\"/>`,\n shapeRoundedSquare: `<path d=\"M6 2.6H14A3.4 3.4 0 0 1 17.4 6V14A3.4 3.4 0 0 1 14 17.4H6A3.4 3.4 0 0 1 2.6 14V6A3.4 3.4 0 0 1 6 2.6Z\"/>`,\n shapeRing: `<path d=\"M2.6 10A7.4 7.4 0 1 1 17.4 10A7.4 7.4 0 1 1 2.6 10ZM6.15 10A3.85 3.85 0 1 0 13.85 10A3.85 3.85 0 1 0 6.15 10Z\"/>`,\n shapeCrescent: `<path d=\"M6.3 2.6A7.4 7.4 0 1 1 6.3 17.4A8.51 8.51 0 0 0 6.3 2.6Z\"/>`,\n shapeLens: `<path d=\"M10 2.6A9.99 9.99 0 0 1 10 17.4A9.99 9.99 0 0 1 10 2.6Z\"/>`,\n shapeSector: `<path d=\"M10 14.63L2.6 9.06A9.27 9.27 0 0 1 17.4 9.06Z\"/>`,\n shapeSegment: `<path d=\"M2.6 12.59A7.88 7.88 0 0 1 17.4 12.59Z\"/>`,\n shapeArch: `<path d=\"M2.6 17.4V10A7.4 7.4 0 0 1 17.4 10V17.4Z\"/>`,\n shapeTeardrop: `<path d=\"M10 2.6L5.9 10.75A4.59 4.59 0 1 0 14.1 10.75Z\"/>`,\n shapeEgg: `<path d=\"M10 2.6C14.59 2.6 16.07 9.26 16.07 12.22C16.07 15.77 13.26 17.4 10 17.4C6.74 17.4 3.93 15.77 3.93 12.22C3.93 9.26 5.41 2.6 10 2.6Z\"/>`,\n shapeHeart: `<path d=\"M10 6.51L10.01 6.42L10.05 6.16L10.18 5.76L10.41 5.26L10.78 4.72L11.27 4.2L11.89 3.76L12.62 3.45L13.42 3.31L14.25 3.36L15.08 3.61L15.84 4.03L16.48 4.62L16.98 5.33L17.29 6.12L17.4 6.97L17.29 7.84L16.98 8.7L16.48 9.54L15.84 10.34L15.08 11.12L14.25 11.86L13.42 12.57L12.62 13.27L11.89 13.93L11.27 14.56L10.78 15.14L10.41 15.66L10.18 16.09L10.05 16.41L10.01 16.62L10 16.69L9.99 16.62L9.95 16.41L9.82 16.09L9.59 15.66L9.22 15.14L8.73 14.56L8.11 13.93L7.38 13.27L6.58 12.57L5.75 11.86L4.92 11.12L4.16 10.34L3.52 9.54L3.02 8.7L2.71 7.84L2.6 6.97L2.71 6.12L3.02 5.33L3.52 4.62L4.16 4.03L4.92 3.61L5.75 3.36L6.58 3.31L7.38 3.45L8.11 3.76L8.73 4.2L9.22 4.72L9.59 5.26L9.82 5.76L9.95 6.16L9.99 6.42L10 6.51Z\"/>`,\n shapeAngle: `<path d=\"M17.4 16.34L2.6 16.34L14.8 3.66M6.12 16.34A3.52 3.52 0 0 0 5.04 13.8\"/>`,\n\n // Platonic solids\n d4: `<path d=\"M2.6 14.47L10 3.31L17.4 14.47L10 16.69Z\" stroke-linejoin=\"miter\" stroke-width=\"1\"/><path d=\"M10 16.69L10 3.31\" stroke-width=\"0.6\"/>`,\n d6: `<path d=\"M3.59 6.3L10 2.6L16.41 6.3L16.41 13.7L10 17.4L3.59 13.7Z\" stroke-linejoin=\"miter\" stroke-width=\"1\"/><path d=\"M10 10L16.41 6.3M10 17.4L10 10M10 10L3.59 6.3\" stroke-width=\"0.6\"/>`,\n d8: `<path d=\"M2.85 9.6L10 2.6L17.15 10.4L10 17.4Z\" stroke-linejoin=\"miter\" stroke-width=\"1\"/><path d=\"M7.68 11.24L2.85 9.6M10 2.6L7.68 11.24M7.68 11.24L10 17.4M17.15 10.4L7.68 11.24\" stroke-width=\"0.6\"/>`,\n d12: `<path d=\"M2.96 7.71L5.65 4.01L10 2.6L14.35 4.01L17.04 7.71L17.04 12.29L14.35 15.99L10 17.4L5.65 15.99L2.96 12.29Z\" stroke-linejoin=\"miter\" stroke-width=\"1\"/><path d=\"M10 5.43L10 2.6M14.35 8.59L10 5.43M17.04 7.71L14.35 8.59M14.35 8.59L12.69 13.7M5.65 8.59L10 5.43M7.31 13.7L5.65 8.59M12.69 13.7L7.31 13.7M5.65 8.59L2.96 7.71M14.35 15.99L12.69 13.7M5.65 15.99L7.31 13.7\" stroke-width=\"0.6\"/>`,\n d20: `<path d=\"M3.59 13.7L3.59 6.3L10 2.6L16.41 6.3L16.41 13.7L10 17.4Z\" stroke-linejoin=\"miter\" stroke-width=\"1\"/><path d=\"M10 5.43L13.96 12.29M6.04 12.29L10 5.43M13.96 12.29L6.04 12.29M3.59 6.3L10 5.43M6.04 12.29L3.59 6.3M10 5.43L10 2.6M16.41 6.3L10 5.43M16.41 6.3L13.96 12.29M6.04 12.29L10 17.4M3.59 13.7L6.04 12.29M13.96 12.29L10 17.4M16.41 13.7L13.96 12.29\" stroke-width=\"0.6\"/>`,\n} as const;\n\n/** Every glyph name in the set. */\nexport type IconName = keyof typeof ICON_PATHS;\n\n/** The region a glyph encloses, for `<Icon filled>`. A shape fills its own\n * outline; a plotted curve fills down to the frame's baseline, reaching the outer\n * edge of the stroke rather than stopping at the path's own endpoint. Only the\n * glyphs where an enclosed region means something have an entry. */\nexport const ICON_FILLS = {\n arcStraight: `<path d=\"M1.85 15L2.6 15H17.4L18.15 15L18.15 15.75L1.85 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcParabola: `<path d=\"M2.31 15.69L2.6 15Q10 -5 17.4 15L17.69 15.69L17.69 15.75L2.31 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcCircle: `<path d=\"M2.52 15.75L2.6 15A7.4 7.4 0 0 1 17.4 15L17.48 15.75L17.48 15.75L2.52 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcSine: `<path d=\"M2.28 10.68L2.6 10C3.83 7.38 5.07 5 6.3 5C7.53 5 8.77 7.38 10 10C11.23 12.62 12.47 15 13.7 15C14.93 15 16.17 12.62 17.4 10L17.72 9.32L17.72 15.75L2.28 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcBump: `<path d=\"M1.87 15.18L2.6 15C3.83 15 5.07 11.87 6.3 9.38C7.53 6.88 8.77 5 10 5C11.23 5 12.47 6.88 13.7 9.38C14.93 11.87 16.17 15 17.4 15L18.13 15.18L18.13 15.75L1.87 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcPlateau: `<path d=\"M2.6 15.75L2.6 15V8.6A3.6 3.6 0 0 1 6.2 5H13.8A3.6 3.6 0 0 1 17.4 8.6V15L17.4 15.75L17.4 15.75L2.6 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcBell: `<path d=\"M1.86 15.13L2.6 15C3.42 14.87 4.24 14.6 5.07 13.65C5.89 12.7 6.71 10.87 7.53 8.87C8.36 6.86 9.18 5 10 5C10.82 5 11.64 6.86 12.47 8.87C13.29 10.87 14.11 12.7 14.93 13.65C15.76 14.6 16.58 14.87 17.4 15L18.14 15.13L18.14 15.75L1.86 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcEllipse: `<path d=\"M2.54 15.75L2.6 15A7.4 10 0 0 1 17.4 15L17.46 15.75L17.46 15.75L2.54 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcLob: `<path d=\"M2.5 15.74L2.6 15C3.78 -0.6 10.74 4.2 17.4 15L17.81 15.63L17.81 15.75L2.5 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcDive: `<path d=\"M2.19 15.63L2.6 15C9.26 4.2 16.22 -0.6 17.4 15L17.5 15.74L17.5 15.75L2.19 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcTriangle: `<path d=\"M2.15 10.6L2.6 10L6.3 5L13.7 15L17.4 10L17.85 9.4L17.85 15.75L2.15 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcSquare: `<path d=\"M2.6 10.75L2.6 10L2.6 5L10 5L10 15L17.4 15L17.4 10L17.4 9.25L17.4 15.75L2.6 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcSawtooth: `<path d=\"M1.98 10.42L2.6 10L10 5L10 15L17.4 10L18.02 9.58L18.02 15.75L1.98 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcStair: `<path d=\"M1.85 10L2.6 10L4.97 10L4.97 5L8.82 5L8.82 10L11.18 10L11.18 15L15.03 15L15.03 10L17.4 10L18.15 10L18.15 15.75L1.85 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcZigzag: `<path d=\"M2.34 10.7L2.6 10L4.45 5L8.15 15L10 10L11.85 5L15.55 15L17.4 10L17.66 9.3L17.66 15.75L2.34 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcRipple: `<path d=\"M2.43 10.73L2.6 10C3.22 7.38 3.83 5 4.45 5C5.07 5 5.68 7.38 6.3 10C6.92 12.62 7.53 15 8.15 15C8.77 15 9.38 12.62 10 10C10.62 7.38 11.23 5 11.85 5C12.47 5 13.08 7.38 13.7 10C14.32 12.62 14.93 15 15.55 15C16.17 15 16.78 12.62 17.4 10L17.57 9.27L17.57 15.75L2.43 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcHop: `<path d=\"M2.45 15.73L2.6 15Q6.3 -5 10 15L10.15 15.73L10.15 15.75L2.45 15.75ZM9.74 15.7L10 15Q13.7 4 17.4 15L17.66 15.7L17.66 15.75L9.74 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n arcCusp: `<path d=\"M1.94 15.35L2.6 15Q7.34 12.8 10 5Q12.66 12.8 17.4 15L18.06 15.35L18.06 15.75L1.94 15.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveLine: `<path d=\"M1.85 10.72L2.6 10.72H17.4L18.15 10.72L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveParabola: `<path d=\"M2.31 16.41L2.6 15.72Q10 -4.28 17.4 15.72L17.69 16.41L17.69 16.47L2.31 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveCircle: `<path d=\"M2.52 16.47L2.6 15.72A7.4 7.4 0 0 1 17.4 15.72L17.48 16.47L17.48 16.47L2.52 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveEllipse: `<path d=\"M2.54 16.47L2.6 15.72A7.4 10 0 0 1 17.4 15.72L17.46 16.47L17.46 16.47L2.54 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveHyperbola: `<path d=\"M2.28 16.4L2.6 15.72C2.91 15.08 3.8 13.12 4.48 11.86C5.16 10.61 5.76 9.21 6.68 8.19C7.6 7.16 8.89 5.72 10 5.72C11.11 5.72 12.4 7.16 13.32 8.19C14.24 9.21 14.84 10.61 15.52 11.86C16.2 13.12 17.09 15.08 17.4 15.72L17.72 16.4L17.72 16.47L2.28 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveCubic: `<path d=\"M2.22 16.37L2.6 15.72C2.88 15.27 3.59 13.78 4.3 13.01C5 12.24 5.89 11.49 6.84 11.11C7.79 10.73 8.95 10.85 10 10.72C11.05 10.59 12.21 10.71 13.16 10.33C14.11 9.95 15 9.2 15.7 8.43C16.41 7.66 17.12 6.17 17.4 5.72L17.78 5.07L17.78 16.47L2.22 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveQuartic: `<path d=\"M1.93 15.62L2.6 15.28C2.98 15.06 4.27 14.67 4.88 13.94C5.49 13.22 5.8 11.93 6.27 10.92C6.74 9.92 7.08 8.79 7.7 7.93C8.32 7.06 9.23 5.72 10 5.72C10.77 5.72 11.68 7.06 12.3 7.93C12.92 8.79 13.26 9.92 13.73 10.92C14.2 11.93 14.51 13.22 15.12 13.94C15.73 14.67 17.02 15.06 17.4 15.28L18.07 15.62L18.07 16.47L1.93 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSqrt: `<path d=\"M2.33 16.42L2.6 15.72C2.8 15.25 3.19 13.72 3.77 12.91C4.36 12.1 5.27 11.46 6.1 10.86C6.93 10.25 7.86 9.75 8.77 9.26C9.69 8.77 10.63 8.35 11.58 7.93C12.53 7.51 13.5 7.13 14.47 6.76C15.44 6.4 16.91 5.89 17.4 5.72L18.11 5.47L18.11 16.47L2.33 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveReciprocal: `<path d=\"M2.45 16.45L2.6 15.72C2.69 15.31 2.91 14.08 3.15 13.28C3.39 12.49 3.66 11.68 4.06 10.96C4.46 10.24 4.95 9.53 5.55 8.97C6.15 8.41 6.89 7.97 7.63 7.61C8.37 7.25 9.19 7.01 9.99 6.79C10.79 6.57 11.62 6.43 12.44 6.29C13.26 6.15 14.09 6.05 14.91 5.96C15.74 5.86 16.99 5.76 17.4 5.72L18.15 5.65L18.15 16.47L2.45 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveAbs: `<path d=\"M2.15 5.12L2.6 5.72L10 15.72L17.4 5.72L17.85 5.12L17.85 16.47L2.15 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveCusp: `<path d=\"M1.94 16.07L2.6 15.72Q7.34 13.52 10 5.72Q12.66 13.52 17.4 15.72L18.06 16.07L18.06 16.47L1.94 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveExponential: `<path d=\"M1.86 15.83L2.6 15.72C3.12 15.64 4.69 15.47 5.72 15.26C6.74 15.04 7.78 14.79 8.76 14.42C9.73 14.05 10.7 13.59 11.57 13.01C12.44 12.44 13.26 11.74 13.98 10.99C14.7 10.23 15.32 9.37 15.89 8.49C16.46 7.61 17.15 6.18 17.4 5.72L17.75 5.06L17.75 16.47L1.86 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveLogarithm: `<path d=\"M2.38 16.44L2.6 15.72C2.72 15.34 3.01 14.18 3.35 13.47C3.68 12.76 4.11 12.07 4.61 11.46C5.11 10.86 5.72 10.32 6.35 9.85C6.97 9.37 7.67 8.98 8.37 8.61C9.07 8.25 9.81 7.94 10.55 7.66C11.28 7.37 12.04 7.12 12.79 6.89C13.55 6.66 14.32 6.45 15.09 6.26C15.85 6.06 17.01 5.81 17.4 5.72L18.13 5.55L18.13 16.47L2.38 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveDecay: `<path d=\"M2.27 5.05L2.6 5.72C2.84 6.19 3.5 7.64 4.06 8.53C4.61 9.43 5.22 10.31 5.94 11.08C6.65 11.85 7.47 12.56 8.34 13.13C9.22 13.71 10.2 14.16 11.19 14.52C12.17 14.88 13.22 15.11 14.26 15.31C15.29 15.51 16.88 15.65 17.4 15.72L18.14 15.81L18.14 16.47L2.27 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSigmoid: `<path d=\"M1.86 15.84L2.6 15.72C3.11 15.62 4.75 15.55 5.68 15.14C6.61 14.74 7.46 14.02 8.18 13.29C8.9 12.55 9.39 11.58 10 10.72C10.61 9.86 11.1 8.89 11.82 8.15C12.54 7.42 13.39 6.7 14.32 6.3C15.25 5.89 16.89 5.82 17.4 5.72L18.14 5.6L18.14 16.47L1.86 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSoftplus: `<path d=\"M1.85 15.74L2.6 15.72C3.13 15.7 4.74 15.73 5.79 15.62C6.85 15.5 7.95 15.42 8.92 15.03C9.89 14.65 10.79 14 11.59 13.32C12.38 12.63 13.03 11.75 13.7 10.93C14.37 10.1 14.97 9.22 15.59 8.35C16.2 7.48 17.1 6.16 17.4 5.72L17.82 5.1L17.82 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveRelu: `<path d=\"M1.85 15.72L2.6 15.72L10 15.72L17.4 5.72L17.85 5.12L17.85 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveStep: `<path d=\"M1.85 15.72L2.6 15.72L10 15.72L10 5.72L17.4 5.72L18.15 5.72L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curvePowerLaw: `<path d=\"M2.57 16.47L2.6 15.72C2.62 15.25 2.67 13.85 2.74 12.91C2.81 11.98 2.83 11.03 3.01 10.12C3.19 9.21 3.27 8.11 3.8 7.45C4.33 6.78 5.32 6.39 6.18 6.13C7.04 5.87 8.04 5.93 8.98 5.87C9.91 5.81 10.85 5.8 11.78 5.78C12.72 5.76 13.66 5.75 14.59 5.74C15.53 5.73 16.93 5.72 17.4 5.72L18.15 5.72L18.15 16.47L2.57 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveCatenary: `<path d=\"M2.34 5.02L2.6 5.72C2.86 6.4 3.53 8.49 4.16 9.8C4.79 11.11 5.4 12.57 6.37 13.55C7.34 14.54 8.79 15.72 10 15.72C11.21 15.72 12.66 14.54 13.63 13.55C14.6 12.57 15.21 11.11 15.84 9.8C16.47 8.49 17.14 6.4 17.4 5.72L17.66 5.02L17.66 16.47L2.34 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveBathtub: `<path d=\"M2.46 4.98L2.6 5.72C2.71 6.29 2.98 8.02 3.27 9.14C3.57 10.27 3.81 11.47 4.37 12.45C4.92 13.43 5.67 14.5 6.61 15.04C7.55 15.59 8.87 15.72 10 15.72C11.13 15.72 12.45 15.59 13.39 15.04C14.33 14.5 15.08 13.43 15.63 12.45C16.19 11.47 16.43 10.27 16.73 9.14C17.02 8.02 17.29 6.29 17.4 5.72L17.54 4.98L17.54 16.47L2.46 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveHockeyStick: `<path d=\"M1.85 15.77L2.6 15.72C3.15 15.68 4.81 15.61 5.91 15.5C7.01 15.39 8.12 15.31 9.19 15.06C10.26 14.8 11.38 14.51 12.3 13.96C13.23 13.41 14.08 12.61 14.75 11.76C15.42 10.91 15.89 9.86 16.33 8.86C16.78 7.85 17.22 6.24 17.4 5.72L17.63 5.01L17.63 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSine: `<path d=\"M2.28 11.4L2.6 10.72C3.83 8.1 5.07 5.72 6.3 5.72C7.53 5.72 8.77 8.1 10 10.72C11.23 13.34 12.47 15.72 13.7 15.72C14.93 15.72 16.17 13.34 17.4 10.72L17.72 10.04L17.72 16.47L2.28 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveCosine: `<path d=\"M1.86 5.58L2.6 5.72C3.83 5.72 5.07 8.1 6.3 10.72C7.53 13.34 8.77 15.72 10 15.72C11.23 15.72 12.47 13.34 13.7 10.72C14.93 8.1 16.17 5.72 17.4 5.72L18.14 5.58L18.14 16.47L1.86 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveRipple: `<path d=\"M2.43 11.45L2.6 10.72C3.22 8.1 3.83 5.72 4.45 5.72C5.07 5.72 5.68 8.1 6.3 10.72C6.92 13.34 7.53 15.72 8.15 15.72C8.77 15.72 9.38 13.34 10 10.72C10.62 8.1 11.23 5.72 11.85 5.72C12.47 5.72 13.08 8.1 13.7 10.72C14.32 13.34 14.93 15.72 15.55 15.72C16.17 15.72 16.78 13.34 17.4 10.72L17.57 9.99L17.57 16.47L2.43 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveTriangleWave: `<path d=\"M2.15 11.32L2.6 10.72L6.3 5.72L13.7 15.72L17.4 10.72L17.85 10.12L17.85 16.47L2.15 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSquareWave: `<path d=\"M2.6 11.47L2.6 10.72L2.6 5.72L10 5.72L10 15.72L17.4 15.72L17.4 10.72L17.4 9.97L17.4 16.47L2.6 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSawtooth: `<path d=\"M1.98 11.14L2.6 10.72L10 5.72L10 15.72L17.4 10.72L18.02 10.3L18.02 16.47L1.98 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveStair: `<path d=\"M1.85 10.72L2.6 10.72L4.97 10.72L4.97 5.72L8.82 5.72L8.82 10.72L11.18 10.72L11.18 15.72L15.03 15.72L15.03 10.72L17.4 10.72L18.15 10.72L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curvePulseTrain: `<path d=\"M1.85 10.72L2.6 10.72L4.23 10.72L4.23 5.72L6.3 5.72L6.3 10.72L8.96 10.72L8.96 5.72L11.04 5.72L11.04 10.72L13.7 10.72L13.7 5.72L15.77 5.72L15.77 10.72L17.4 10.72L18.15 10.72L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveDamped: `<path d=\"M2.05 5.21L2.6 5.72C2.95 6.01 3.3 6.7 3.66 7.55C4.01 8.39 4.36 9.37 4.71 10.24C5.07 11.11 5.42 11.86 5.77 12.37C6.12 12.87 6.48 13.13 6.83 13.15C7.18 13.17 7.53 12.96 7.89 12.63C8.24 12.3 8.59 11.86 8.94 11.42C9.3 10.99 9.65 10.57 10 10.25C10.35 9.94 10.7 9.72 11.06 9.63C11.41 9.54 11.76 9.56 12.11 9.67C12.47 9.77 12.82 9.96 13.17 10.16C13.52 10.36 13.88 10.57 14.23 10.75C14.58 10.93 14.93 11.08 15.29 11.16C15.64 11.25 15.99 11.28 16.34 11.26C16.7 11.24 17.05 11.17 17.4 11.09L18.13 10.93L18.13 16.47L2.05 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveGaussian: `<path d=\"M1.87 15.88L2.6 15.72C3.13 15.57 4.98 15.47 5.78 14.83C6.57 14.18 6.92 12.87 7.35 11.84C7.79 10.8 7.97 9.62 8.41 8.6C8.85 7.58 9.47 5.72 10 5.72C10.53 5.72 11.15 7.58 11.59 8.6C12.03 9.62 12.21 10.8 12.65 11.84C13.08 12.87 13.43 14.18 14.22 14.83C15.02 15.47 16.87 15.57 17.4 15.72L18.13 15.88L18.13 16.47L1.87 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveBimodal: `<path d=\"M2.03 16.21L2.6 15.72C2.95 15.39 4.21 14.57 4.67 13.73C5.14 12.89 5.17 11.7 5.39 10.68C5.62 9.66 5.69 8.28 6 7.6C6.31 6.92 6.93 6.26 7.24 6.61C7.56 6.96 7.69 8.66 7.9 9.68C8.12 10.7 8.19 11.81 8.54 12.75C8.89 13.7 9.51 15.36 10 15.36C10.49 15.36 11.11 13.7 11.46 12.75C11.81 11.81 11.88 10.7 12.1 9.68C12.31 8.66 12.44 6.96 12.76 6.61C13.07 6.26 13.69 6.92 14 7.6C14.31 8.28 14.38 9.66 14.61 10.68C14.83 11.7 14.86 12.89 15.33 13.73C15.79 14.57 17.05 15.39 17.4 15.72L17.97 16.21L17.97 16.47L2.03 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSkewed: `<path d=\"M2.31 16.41L2.6 15.72C2.76 15.32 3.35 14.19 3.58 13.35C3.82 12.5 3.87 11.55 4.02 10.65C4.17 9.75 4.22 8.78 4.5 7.96C4.79 7.14 5.26 5.74 5.71 5.75C6.15 5.76 6.71 7.24 7.15 8.03C7.6 8.82 7.92 9.69 8.38 10.47C8.85 11.25 9.32 12.06 9.94 12.71C10.56 13.36 11.3 13.96 12.09 14.37C12.88 14.78 13.8 15.01 14.69 15.2C15.57 15.39 16.95 15.46 17.4 15.52L18.15 15.6L18.15 16.47L2.31 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveLorentzian: `<path d=\"M1.86 15.82L2.6 15.72C3.06 15.64 4.52 15.6 5.35 15.26C6.18 14.92 7.02 14.36 7.57 13.66C8.11 12.96 8.34 11.97 8.62 11.08C8.89 10.2 8.99 9.25 9.22 8.35C9.45 7.46 9.74 5.72 10 5.72C10.26 5.72 10.55 7.46 10.78 8.35C11.01 9.25 11.11 10.2 11.38 11.08C11.66 11.97 11.89 12.96 12.43 13.66C12.98 14.36 13.82 14.92 14.65 15.26C15.48 15.6 16.94 15.64 17.4 15.72L18.14 15.82L18.14 16.47L1.86 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveOgive: `<path d=\"M1.85 15.78L2.6 15.72C3.13 15.66 4.83 15.71 5.79 15.34C6.75 14.97 7.64 14.25 8.35 13.48C9.05 12.71 9.45 11.64 10 10.72C10.55 9.8 10.95 8.73 11.65 7.96C12.36 7.19 13.25 6.47 14.21 6.1C15.17 5.73 16.87 5.78 17.4 5.72L18.15 5.66L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveUniform: `<path d=\"M2.6 16.47L2.6 15.72V9.32A3.6 3.6 0 0 1 6.2 5.72H13.8A3.6 3.6 0 0 1 17.4 9.32V15.72L17.4 16.47L17.4 16.47L2.6 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSinc: `<path d=\"M1.92 16.04L2.6 15.72C2.83 15.6 3.61 15.35 4.01 15.02C4.4 14.69 4.68 14.18 4.96 13.72C5.25 13.27 5.49 12.78 5.73 12.3C5.97 11.82 6.19 11.33 6.42 10.84C6.65 10.35 6.86 9.86 7.1 9.37C7.33 8.89 7.55 8.39 7.82 7.93C8.08 7.46 8.32 6.93 8.69 6.57C9.05 6.2 9.56 5.72 10 5.72C10.44 5.72 10.95 6.2 11.31 6.57C11.68 6.93 11.92 7.46 12.18 7.93C12.45 8.39 12.67 8.89 12.9 9.37C13.14 9.86 13.35 10.35 13.58 10.84C13.81 11.33 14.03 11.82 14.27 12.3C14.51 12.78 14.75 13.27 15.04 13.72C15.32 14.18 15.6 14.69 15.99 15.02C16.39 15.35 17.17 15.6 17.4 15.72L18.08 16.04L18.08 16.47L1.92 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveImpulse: `<path d=\"M1.85 15.72L2.6 15.72L9.7 15.72L10 5.72L10.3 15.72L17.4 15.72L18.15 15.72L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveEaseIn: `<path d=\"M1.85 15.74L2.6 15.72C3.13 15.7 4.75 15.75 5.8 15.62C6.86 15.49 7.94 15.31 8.93 14.94C9.91 14.57 10.87 14.01 11.72 13.38C12.56 12.75 13.31 11.95 14 11.14C14.7 10.34 15.29 9.43 15.86 8.53C16.42 7.63 17.14 6.19 17.4 5.72L17.76 5.06L17.76 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveEaseOut: `<path d=\"M2.24 16.38L2.6 15.72C2.86 15.25 3.58 13.81 4.14 12.91C4.71 12.01 5.3 11.1 6 10.3C6.69 9.49 7.44 8.69 8.28 8.06C9.13 7.43 10.09 6.87 11.07 6.5C12.06 6.13 13.14 5.95 14.2 5.82C15.25 5.69 16.87 5.74 17.4 5.72L18.15 5.7L18.15 16.47L2.24 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveEaseInOut: `<path d=\"M1.85 15.75L2.6 15.72C3 15.69 4.23 15.75 4.99 15.55C5.75 15.36 6.53 15.01 7.16 14.55C7.79 14.09 8.32 13.43 8.79 12.8C9.26 12.16 9.6 11.41 10 10.72C10.4 10.03 10.74 9.28 11.21 8.64C11.68 8.01 12.21 7.35 12.84 6.89C13.47 6.43 14.25 6.08 15.01 5.89C15.77 5.69 17 5.75 17.4 5.72L18.15 5.69L18.15 16.47L1.85 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveOvershoot: `<path d=\"M2.32 16.42L2.6 15.72C2.76 15.33 3.2 14.15 3.54 13.39C3.88 12.62 4.24 11.86 4.64 11.13C5.05 10.4 5.48 9.67 6 9.02C6.51 8.36 7.06 7.7 7.72 7.19C8.37 6.69 9.14 6.25 9.92 6.01C10.7 5.77 11.57 5.73 12.4 5.73C13.23 5.73 14.07 5.92 14.9 6C15.73 6.08 16.98 6.18 17.4 6.22L18.15 6.29L18.15 16.47L2.32 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveBounce: `<path d=\"M2.46 16.46L2.6 15.72Q6 -4.28 9.41 15.72L9.55 16.46L9.55 16.47L2.46 16.47ZM9.21 16.44L9.41 15.72Q11.63 6.72 13.85 15.72L14.05 16.44L14.05 16.47L9.21 16.47ZM13.57 16.41L13.85 15.72Q15.18 12.12 16.51 15.72L16.79 16.41L16.79 16.47L13.57 16.47ZM16.17 16.39L16.51 15.72Q16.96 14.72 17.4 15.72L17.73 16.39L17.73 16.47L16.17 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveElastic: `<path d=\"M2.33 16.42L2.6 15.72C2.91 15.01 3.22 13.44 3.53 11.66C3.83 9.87 4.14 7.89 4.45 6.23C4.76 4.58 5.07 3.25 5.38 2.45C5.68 1.65 5.99 1.37 6.3 1.5C6.61 1.63 6.92 2.17 7.23 2.85C7.53 3.53 7.84 4.35 8.15 5.07C8.46 5.79 8.77 6.41 9.07 6.82C9.38 7.24 9.69 7.44 10 7.46C10.31 7.47 10.62 7.31 10.93 7.06C11.23 6.81 11.54 6.48 11.85 6.18C12.16 5.87 12.47 5.59 12.77 5.39C13.08 5.18 13.39 5.06 13.7 5.02C14.01 4.99 14.32 5.03 14.62 5.11C14.93 5.2 15.24 5.33 15.55 5.45C15.86 5.58 16.17 5.71 16.47 5.8C16.78 5.9 17.09 5.96 17.4 5.99L18.15 6.07L18.15 16.47L2.33 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveLemniscate: `<path d=\"M17.4 11.12C17.4 11.98 16.91 12.8 16.23 13.25C15.54 13.7 14.73 13.8 14.01 13.7C13.29 13.6 12.66 13.3 12.11 12.95C11.57 12.6 11.1 12.19 10.65 11.76C10.21 11.34 9.79 10.9 9.35 10.48C8.9 10.05 8.43 9.64 7.89 9.29C7.34 8.94 6.71 8.64 5.99 8.54C5.27 8.44 4.46 8.54 3.77 8.99C3.09 9.44 2.6 10.26 2.6 11.12C2.6 11.98 3.09 12.8 3.77 13.25C4.46 13.7 5.27 13.8 5.99 13.7C6.71 13.6 7.34 13.3 7.89 12.95C8.43 12.6 8.9 12.19 9.35 11.76C9.79 11.34 10.21 10.9 10.65 10.48C11.1 10.05 11.57 9.64 12.11 9.29C12.66 8.94 13.29 8.64 14.01 8.54C14.73 8.44 15.54 8.54 16.23 8.99C16.91 9.44 17.4 10.26 17.4 11.12\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveCardioid: `<path d=\"M10 6.14C10 6.14 10 6.09 10.03 6C10.06 5.91 10.13 5.78 10.24 5.63C10.36 5.48 10.54 5.31 10.77 5.16C11.01 5.01 11.32 4.88 11.68 4.8C12.04 4.72 12.45 4.69 12.91 4.74C13.36 4.79 13.84 4.92 14.32 5.15C14.8 5.38 15.27 5.71 15.7 6.14C16.12 6.56 16.5 7.08 16.79 7.69C17.08 8.29 17.28 8.96 17.36 9.68C17.44 10.4 17.4 11.15 17.23 11.9C17.06 12.65 16.76 13.39 16.33 14.07C15.9 14.75 15.35 15.37 14.7 15.89C14.05 16.41 13.3 16.82 12.5 17.1C11.7 17.38 10.85 17.53 10 17.53C9.15 17.53 8.3 17.38 7.5 17.1C6.7 16.82 5.95 16.41 5.3 15.89C4.65 15.37 4.1 14.75 3.67 14.07C3.24 13.39 2.94 12.65 2.77 11.9C2.6 11.15 2.56 10.4 2.64 9.68C2.72 8.96 2.92 8.29 3.21 7.69C3.5 7.08 3.88 6.56 4.3 6.14C4.73 5.71 5.2 5.38 5.68 5.15C6.16 4.92 6.64 4.79 7.09 4.74C7.55 4.69 7.96 4.72 8.32 4.8C8.68 4.88 8.99 5.01 9.23 5.16C9.46 5.31 9.64 5.48 9.76 5.63C9.87 5.78 9.94 5.91 9.97 6C10 6.09 10 6.14 10 6.14\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveAstroid: `<path d=\"M17.4 11.12C17.4 11.12 17.02 11.13 16.37 11.34C15.72 11.55 14.81 11.97 13.92 12.62C13.02 13.27 12.15 14.14 11.5 15.04C10.85 15.93 10.43 16.84 10.22 17.49C10.01 18.14 10 18.52 10 18.52C10 18.52 9.99 18.14 9.78 17.49C9.57 16.84 9.15 15.93 8.5 15.04C7.85 14.14 6.98 13.27 6.08 12.62C5.19 11.97 4.28 11.55 3.63 11.34C2.98 11.13 2.6 11.12 2.6 11.12C2.6 11.12 2.98 11.11 3.63 10.9C4.28 10.69 5.19 10.27 6.08 9.62C6.98 8.97 7.85 8.1 8.5 7.2C9.15 6.31 9.57 5.4 9.78 4.75C9.99 4.1 10 3.72 10 3.72C10 3.72 10.01 4.1 10.22 4.75C10.43 5.4 10.85 6.31 11.5 7.2C12.15 8.1 13.02 8.97 13.92 9.62C14.81 10.27 15.72 10.69 16.37 10.9C17.02 11.11 17.4 11.12 17.4 11.12\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveRose: `<path d=\"M16.57 11.12C16.57 11.49 16.32 11.85 15.86 12.13C15.4 12.42 14.72 12.61 13.9 12.66C13.08 12.71 12.13 12.61 11.13 12.35C10.14 12.09 9.11 11.67 8.16 11.12C7.21 10.57 6.33 9.89 5.61 9.16C4.89 8.43 4.32 7.65 3.96 6.92C3.59 6.18 3.42 5.5 3.43 4.96C3.44 4.42 3.64 4.02 3.96 3.84C4.27 3.65 4.71 3.68 5.19 3.94C5.66 4.2 6.17 4.69 6.62 5.38C7.07 6.06 7.47 6.94 7.74 7.93C8.01 8.92 8.16 10.02 8.16 11.12C8.16 12.22 8.01 13.32 7.74 14.31C7.47 15.3 7.07 16.18 6.62 16.86C6.17 17.55 5.66 18.04 5.19 18.3C4.71 18.56 4.27 18.59 3.96 18.4C3.64 18.22 3.44 17.82 3.43 17.28C3.42 16.74 3.59 16.06 3.96 15.32C4.32 14.59 4.89 13.81 5.61 13.08C6.33 12.35 7.21 11.67 8.16 11.12C9.11 10.57 10.14 10.15 11.13 9.89C12.13 9.63 13.08 9.53 13.9 9.58C14.72 9.63 15.4 9.82 15.86 10.11C16.32 10.39 16.57 10.75 16.57 11.12C16.57 11.49 16.32 11.85 15.86 12.13C15.4 12.42 14.72 12.61 13.9 12.66C13.08 12.71 12.13 12.61 11.13 12.35C10.14 12.09 9.11 11.67 8.16 11.12C7.21 10.57 6.33 9.89 5.61 9.16C4.89 8.43 4.32 7.65 3.96 6.92C3.59 6.18 3.42 5.5 3.43 4.96C3.44 4.42 3.64 4.02 3.96 3.84C4.27 3.65 4.71 3.68 5.19 3.94C5.66 4.2 6.17 4.69 6.62 5.38C7.07 6.06 7.47 6.94 7.74 7.93C8.01 8.92 8.16 10.02 8.16 11.12C8.16 12.22 8.01 13.32 7.74 14.31C7.47 15.3 7.07 16.18 6.62 16.86C6.17 17.55 5.66 18.04 5.19 18.3C4.71 18.56 4.27 18.59 3.96 18.4C3.64 18.22 3.44 17.82 3.43 17.28C3.42 16.74 3.59 16.06 3.96 15.32C4.32 14.59 4.89 13.81 5.61 13.08C6.33 12.35 7.21 11.67 8.16 11.12C9.11 10.57 10.14 10.15 11.13 9.89C12.13 9.63 13.08 9.53 13.9 9.58C14.72 9.63 15.4 9.82 15.86 10.11C16.32 10.39 16.57 10.75 16.57 11.12\" fill=\"currentColor\" stroke=\"none\" fill-rule=\"evenodd\"/>`,\n curveLissajous: `<path d=\"M10 11.12C11.66 12.23 13.32 13.33 14.61 14.33C15.91 15.33 16.84 16.22 17.21 16.91C17.58 17.6 17.39 18.09 16.67 18.33C15.95 18.58 14.71 18.58 13.21 18.33C11.71 18.09 9.97 17.6 8.35 16.91C6.73 16.22 5.25 15.33 4.21 14.33C3.18 13.33 2.6 12.23 2.6 11.12C2.6 10.01 3.18 8.91 4.21 7.91C5.25 6.91 6.73 6.02 8.35 5.33C9.97 4.64 11.71 4.15 13.21 3.91C14.71 3.66 15.95 3.66 16.67 3.91C17.39 4.15 17.58 4.64 17.21 5.33C16.84 6.02 15.91 6.91 14.61 7.91C13.32 8.91 11.66 10.01 10 11.12C8.34 12.23 6.68 13.33 5.39 14.33C4.09 15.33 3.16 16.22 2.79 16.91C2.42 17.6 2.61 18.09 3.33 18.33C4.05 18.58 5.29 18.58 6.79 18.33C8.29 18.09 10.03 17.6 11.65 16.91C13.27 16.22 14.75 15.33 15.79 14.33C16.82 13.33 17.4 12.23 17.4 11.12C17.4 10.01 16.82 8.91 15.79 7.91C14.75 6.91 13.27 6.02 11.65 5.33C10.03 4.64 8.29 4.15 6.79 3.91C5.29 3.66 4.05 3.66 3.33 3.91C2.61 4.15 2.42 4.64 2.79 5.33C3.16 6.02 4.09 6.91 5.39 7.91C6.68 8.91 8.34 10.01 10 11.12\" fill=\"currentColor\" stroke=\"none\" fill-rule=\"evenodd\"/>`,\n curveCycloid: `<path d=\"M2.59 16.47L2.6 15.72C2.6 15.72 2.6 15.49 2.66 15.05C2.71 14.61 2.82 13.98 3.03 13.22C3.23 12.46 3.53 11.59 3.94 10.72C4.36 9.85 4.88 8.98 5.49 8.22C6.11 7.46 6.82 6.83 7.59 6.39C8.36 5.95 9.18 5.72 10 5.72C10.82 5.72 11.64 5.95 12.41 6.39C13.18 6.83 13.89 7.46 14.51 8.22C15.12 8.98 15.64 9.85 16.06 10.72C16.47 11.59 16.77 12.46 16.97 13.22C17.18 13.98 17.29 14.61 17.34 15.05C17.4 15.49 17.4 15.72 17.4 15.72L17.41 16.47L17.41 16.47L2.59 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveSuperellipse: `<path d=\"M17.4 11.12C17.4 14.45 17.38 12.98 17.34 13.46C17.31 13.94 17.25 14.34 17.17 14.69C17.1 15.05 17 15.37 16.89 15.66C16.78 15.94 16.64 16.21 16.49 16.44C16.34 16.68 16.16 16.9 15.97 17.09C15.78 17.28 15.56 17.46 15.32 17.61C15.09 17.76 14.82 17.9 14.54 18.01C14.25 18.12 13.93 18.22 13.57 18.29C13.22 18.37 12.82 18.43 12.34 18.46C11.86 18.5 13.33 18.52 10 18.52C6.67 18.52 8.14 18.5 7.66 18.46C7.18 18.43 6.78 18.37 6.43 18.29C6.07 18.22 5.75 18.12 5.46 18.01C5.18 17.9 4.91 17.76 4.68 17.61C4.44 17.46 4.22 17.28 4.03 17.09C3.84 16.9 3.66 16.68 3.51 16.44C3.36 16.21 3.22 15.94 3.11 15.66C3 15.37 2.9 15.05 2.83 14.69C2.75 14.34 2.69 13.94 2.66 13.46C2.62 12.98 2.6 14.45 2.6 11.12C2.6 7.79 2.62 9.26 2.66 8.78C2.69 8.3 2.75 7.9 2.83 7.55C2.9 7.19 3 6.87 3.11 6.58C3.22 6.3 3.36 6.03 3.51 5.8C3.66 5.56 3.84 5.34 4.03 5.15C4.22 4.96 4.44 4.78 4.68 4.63C4.91 4.48 5.18 4.34 5.46 4.23C5.75 4.12 6.07 4.02 6.43 3.95C6.78 3.87 7.18 3.81 7.66 3.78C8.14 3.74 6.67 3.72 10 3.72C13.33 3.72 11.86 3.74 12.34 3.78C12.82 3.81 13.22 3.87 13.57 3.95C13.93 4.02 14.25 4.12 14.54 4.23C14.82 4.34 15.09 4.48 15.32 4.63C15.56 4.78 15.78 4.96 15.97 5.15C16.16 5.34 16.34 5.56 16.49 5.8C16.64 6.03 16.78 6.3 16.89 6.58C17 6.87 17.1 7.19 17.17 7.55C17.25 7.9 17.31 8.3 17.34 8.78C17.38 9.26 17.4 7.79 17.4 11.12\" fill=\"currentColor\" stroke=\"none\"/>`,\n curveArcsine: `<path d=\"M2.17 16.33L2.6 15.72C2.85 15.38 3.59 14.16 4.08 13.67C4.57 13.18 5.07 13.04 5.56 12.77C6.05 12.49 6.55 12.26 7.04 12.03C7.53 11.8 8.03 11.58 8.52 11.36C9.01 11.14 9.51 10.93 10 10.72C10.49 10.51 10.99 10.3 11.48 10.08C11.97 9.86 12.47 9.64 12.96 9.41C13.45 9.18 13.95 8.95 14.44 8.67C14.93 8.4 15.43 8.26 15.92 7.77C16.41 7.28 17.15 6.06 17.4 5.72L17.83 5.11L17.83 16.47L2.17 16.47Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeTriangle: `<path d=\"M10 3.59L17.4 16.41L2.6 16.41Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeRightTriangle: `<path d=\"M2.6 17.4L2.6 2.6L17.4 17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeSquare: `<path d=\"M2.6 2.6L17.4 2.6L17.4 17.4L2.6 17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeRectangle: `<path d=\"M2.6 5.37L17.4 5.37L17.4 14.63L2.6 14.63Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeDiamond: `<path d=\"M10 2.6L17.4 10L10 17.4L2.6 10Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeParallelogram: `<path d=\"M5.35 4.71L17.4 4.71L14.65 15.29L2.6 15.29Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeTrapezoid: `<path d=\"M5.35 4.71L14.65 4.71L17.4 15.29L2.6 15.29Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeKite: `<path d=\"M10 2.6L16.43 7.75L10 17.4L3.57 7.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapePentagon: `<path d=\"M10 2.96L17.4 8.34L14.57 17.04L5.43 17.04L2.6 8.34Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeHexagon: `<path d=\"M10 2.6L16.41 6.3L16.41 13.7L10 17.4L3.59 13.7L3.59 6.3Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeHexagonFlat: `<path d=\"M17.4 10L13.7 16.41L6.3 16.41L2.6 10L6.3 3.59L13.7 3.59Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeHeptagon: `<path d=\"M10 2.79L15.93 5.64L17.4 12.06L13.29 17.21L6.71 17.21L2.6 12.06L4.07 5.64Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeOctagon: `<path d=\"M13.07 2.6L17.4 6.93L17.4 13.07L13.07 17.4L6.93 17.4L2.6 13.07L2.6 6.93L6.93 2.6Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeDecagon: `<path d=\"M10 2.6L14.35 4.01L17.04 7.71L17.04 12.29L14.35 15.99L10 17.4L5.65 15.99L2.96 12.29L2.96 7.71L5.65 4.01Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeDodecagon: `<path d=\"M10 2.6L13.7 3.59L16.41 6.3L17.4 10L16.41 13.7L13.7 16.41L10 17.4L6.3 16.41L3.59 13.7L2.6 10L3.59 6.3L6.3 3.59Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeCross: `<path d=\"M7.63 2.6L12.37 2.6L12.37 7.63L17.4 7.63L17.4 12.37L12.37 12.37L12.37 17.4L7.63 17.4L7.63 12.37L2.6 12.37L2.6 7.63L7.63 7.63Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeLShape: `<path d=\"M2.6 2.6L8.82 2.6L8.82 11.78L17.4 11.78L17.4 17.4L2.6 17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeChevron: `<path d=\"M2.6 4.38L10 10.59L17.4 4.38L17.4 9.41L10 15.62L2.6 9.41Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeStar: `<path d=\"M10 2.96L12.2 7.72L17.4 8.34L13.55 11.9L14.57 17.04L10 14.48L5.43 17.04L6.45 11.9L2.6 8.34L7.8 7.72Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeStar4: `<path d=\"M10 2.6L11.99 8.01L17.4 10L11.99 11.99L10 17.4L8.01 11.99L2.6 10L8.01 8.01Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeStar6: `<path d=\"M10 2.6L12.07 6.41L16.41 6.3L14.14 10L16.41 13.7L12.07 13.59L10 17.4L7.93 13.59L3.59 13.7L5.86 10L3.59 6.3L7.93 6.41Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeStar8: `<path d=\"M10 2.6L11.76 5.76L15.23 4.77L14.24 8.24L17.4 10L14.24 11.76L15.23 15.23L11.76 14.24L10 17.4L8.24 14.24L4.77 15.23L5.76 11.76L2.6 10L5.76 8.24L4.77 4.77L8.24 5.76Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapePentagram: `<path d=\"M10 2.96L14.57 17.04L2.6 8.34L17.4 8.34L5.43 17.04Z\" fill=\"currentColor\" stroke=\"none\" fill-rule=\"evenodd\"/>`,\n shapeCircle: `<path d=\"M2.6 10A7.4 7.4 0 1 1 17.4 10A7.4 7.4 0 1 1 2.6 10Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeEllipse: `<path d=\"M2.6 10A7.4 4.74 0 1 1 17.4 10A7.4 4.74 0 1 1 2.6 10Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeSemicircle: `<path d=\"M2.6 13.7A7.4 7.4 0 0 1 17.4 13.7Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeQuarter: `<path d=\"M2.6 17.4V2.6A14.8 14.8 0 0 1 17.4 17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeStadium: `<path d=\"M6.74 5.86H13.26A4.14 4.14 0 0 1 13.26 14.14H6.74A4.14 4.14 0 0 1 6.74 5.86Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeRoundedSquare: `<path d=\"M6 2.6H14A3.4 3.4 0 0 1 17.4 6V14A3.4 3.4 0 0 1 14 17.4H6A3.4 3.4 0 0 1 2.6 14V6A3.4 3.4 0 0 1 6 2.6Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeRing: `<path d=\"M2.6 10A7.4 7.4 0 1 1 17.4 10A7.4 7.4 0 1 1 2.6 10ZM6.15 10A3.85 3.85 0 1 0 13.85 10A3.85 3.85 0 1 0 6.15 10Z\" fill=\"currentColor\" stroke=\"none\" fill-rule=\"evenodd\"/>`,\n shapeCrescent: `<path d=\"M6.3 2.6A7.4 7.4 0 1 1 6.3 17.4A8.51 8.51 0 0 0 6.3 2.6Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeLens: `<path d=\"M10 2.6A9.99 9.99 0 0 1 10 17.4A9.99 9.99 0 0 1 10 2.6Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeSector: `<path d=\"M10 14.63L2.6 9.06A9.27 9.27 0 0 1 17.4 9.06Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeSegment: `<path d=\"M2.6 12.59A7.88 7.88 0 0 1 17.4 12.59Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeArch: `<path d=\"M2.6 17.4V10A7.4 7.4 0 0 1 17.4 10V17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeTeardrop: `<path d=\"M10 2.6L5.9 10.75A4.59 4.59 0 1 0 14.1 10.75Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeEgg: `<path d=\"M10 2.6C14.59 2.6 16.07 9.26 16.07 12.22C16.07 15.77 13.26 17.4 10 17.4C6.74 17.4 3.93 15.77 3.93 12.22C3.93 9.26 5.41 2.6 10 2.6Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeHeart: `<path d=\"M10 6.51L10.01 6.42L10.05 6.16L10.18 5.76L10.41 5.26L10.78 4.72L11.27 4.2L11.89 3.76L12.62 3.45L13.42 3.31L14.25 3.36L15.08 3.61L15.84 4.03L16.48 4.62L16.98 5.33L17.29 6.12L17.4 6.97L17.29 7.84L16.98 8.7L16.48 9.54L15.84 10.34L15.08 11.12L14.25 11.86L13.42 12.57L12.62 13.27L11.89 13.93L11.27 14.56L10.78 15.14L10.41 15.66L10.18 16.09L10.05 16.41L10.01 16.62L10 16.69L9.99 16.62L9.95 16.41L9.82 16.09L9.59 15.66L9.22 15.14L8.73 14.56L8.11 13.93L7.38 13.27L6.58 12.57L5.75 11.86L4.92 11.12L4.16 10.34L3.52 9.54L3.02 8.7L2.71 7.84L2.6 6.97L2.71 6.12L3.02 5.33L3.52 4.62L4.16 4.03L4.92 3.61L5.75 3.36L6.58 3.31L7.38 3.45L8.11 3.76L8.73 4.2L9.22 4.72L9.59 5.26L9.82 5.76L9.95 6.16L9.99 6.42L10 6.51Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n shapeAngle: `<path d=\"M2.6 16.34L17.4 16.34L14.8 3.66Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n d4: `<path d=\"M2.6 14.47L10 3.31L17.4 14.47L10 16.69Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n d6: `<path d=\"M3.59 6.3L10 2.6L16.41 6.3L16.41 13.7L10 17.4L3.59 13.7Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n d8: `<path d=\"M2.85 9.6L10 2.6L17.15 10.4L10 17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n d12: `<path d=\"M2.96 7.71L5.65 4.01L10 2.6L14.35 4.01L17.04 7.71L17.04 12.29L14.35 15.99L10 17.4L5.65 15.99L2.96 12.29Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n d20: `<path d=\"M3.59 13.7L3.59 6.3L10 2.6L16.41 6.3L16.41 13.7L10 17.4Z\" fill=\"currentColor\" stroke=\"none\"/>`,\n} as const;\n\n/** The glyphs `<Icon filled>` can shade. */\nexport type FillableIconName = keyof typeof ICON_FILLS;\n\n/** Every glyph in `ICON_PATHS`, once, sorted into the families it was drawn in. */\nexport const ICON_GROUPS: readonly { label: string; names: readonly IconName[] }[] = [\n {\n label: 'View and lifecycle',\n names: [\n 'clone',\n 'reset',\n 'close',\n 'export',\n 'zoomIn',\n 'zoomOut',\n 'fit',\n 'pan',\n ],\n },\n {\n label: 'Actions',\n names: [\n 'filter',\n 'add',\n 'remove',\n 'delete',\n 'sort',\n 'undo',\n 'redo',\n 'snapshot',\n ],\n },\n {\n label: 'Character styling',\n names: [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'overline',\n 'superscript',\n 'subscript',\n 'code',\n ],\n },\n {\n label: 'Paragraph alignment',\n names: [\n 'textAlignLeft',\n 'textAlignCenter',\n 'textAlignRight',\n 'textAlignJustify',\n 'textAlignTop',\n 'textAlignMiddle',\n 'textAlignBottom',\n ],\n },\n {\n label: 'Playback',\n names: [\n 'play',\n 'pause',\n 'stop',\n 'stepBack',\n 'stepForward',\n ],\n },\n {\n label: 'State',\n names: [\n 'lock',\n 'unlock',\n 'visible',\n 'hidden',\n 'pin',\n 'info',\n 'warning',\n 'error',\n 'busy',\n 'check',\n 'modeLight',\n 'modeDark',\n 'modeAuto',\n ],\n },\n {\n label: 'Badge status',\n names: [\n 'statusSuccess',\n 'statusAccent',\n 'statusNeutral',\n 'statusMuted',\n ],\n },\n {\n label: 'Instrument',\n names: [\n 'crosshair',\n 'fullscreen',\n 'compare',\n 'search',\n 'loupe',\n 'layers',\n 'page',\n 'link',\n 'collapse',\n 'expand',\n 'chevron',\n 'tune',\n 'grid',\n 'snap',\n 'measure',\n 'randomize',\n 'refresh',\n ],\n },\n {\n label: 'Stroke cap, join, align and dash',\n names: [\n 'strokeWidth',\n 'strokeCap',\n 'strokeJoin',\n 'strokeAlign',\n 'capButt',\n 'capRound',\n 'capSquare',\n 'joinMiter',\n 'joinRound',\n 'joinBevel',\n 'alignInner',\n 'alignCenter',\n 'alignOuter',\n 'dashSolid',\n 'dashDashed',\n 'dashDotted',\n 'dashCustom',\n 'paintSolid',\n 'paintLinear',\n 'paintRadial',\n 'paintConic',\n 'paintMesh',\n 'paintPattern',\n 'paintNone',\n ],\n },\n {\n label: 'Workspace layout',\n names: [\n 'layoutRows',\n 'layoutColumns',\n 'layoutGrid',\n ],\n },\n {\n label: 'Arc profiles',\n names: [\n 'arcStraight',\n 'arcParabola',\n 'arcCircle',\n 'arcSine',\n 'arcBump',\n 'arcPlateau',\n 'arcBell',\n 'arcEllipse',\n 'arcLob',\n 'arcDive',\n 'arcTriangle',\n 'arcSquare',\n 'arcSawtooth',\n 'arcStair',\n 'arcZigzag',\n 'arcRipple',\n 'arcHop',\n 'arcCusp',\n ],\n },\n {\n label: 'Curves',\n names: [\n 'curveLine',\n 'curveParabola',\n 'curveCircle',\n 'curveEllipse',\n 'curveHyperbola',\n 'curveHyperbolaPair',\n 'curveCubic',\n 'curveQuartic',\n 'curveSqrt',\n 'curveReciprocal',\n 'curveAbs',\n 'curveCusp',\n 'curveExponential',\n 'curveLogarithm',\n 'curveDecay',\n 'curveSigmoid',\n 'curveSoftplus',\n 'curveRelu',\n 'curveStep',\n 'curvePowerLaw',\n 'curveCatenary',\n 'curveBathtub',\n 'curveHockeyStick',\n 'curveSine',\n 'curveCosine',\n 'curveRipple',\n 'curveTriangleWave',\n 'curveSquareWave',\n 'curveSawtooth',\n 'curveStair',\n 'curvePulseTrain',\n 'curveDamped',\n 'curveChirp',\n 'curveBeat',\n 'curveGaussian',\n 'curveBimodal',\n 'curveSkewed',\n 'curveLorentzian',\n 'curveOgive',\n 'curveUniform',\n 'curveSinc',\n 'curveImpulse',\n 'curveEaseIn',\n 'curveEaseOut',\n 'curveEaseInOut',\n 'curveOvershoot',\n 'curveBounce',\n 'curveElastic',\n 'curveLemniscate',\n 'curveCardioid',\n 'curveAstroid',\n 'curveRose',\n 'curveSpiral',\n 'curveLissajous',\n 'curveCycloid',\n 'curveSuperellipse',\n 'curveTangent',\n 'curveCotangent',\n 'curveSecant',\n 'curveCosecant',\n 'curveArcsine',\n 'curveAsymptote',\n ],\n },\n {\n label: 'Shapes',\n names: [\n 'shapeTriangle',\n 'shapeRightTriangle',\n 'shapeSquare',\n 'shapeRectangle',\n 'shapeDiamond',\n 'shapeParallelogram',\n 'shapeTrapezoid',\n 'shapeKite',\n 'shapePentagon',\n 'shapeHexagon',\n 'shapeHexagonFlat',\n 'shapeHeptagon',\n 'shapeOctagon',\n 'shapeDecagon',\n 'shapeDodecagon',\n 'shapeCross',\n 'shapeLShape',\n 'shapeChevron',\n 'shapeStar',\n 'shapeStar4',\n 'shapeStar6',\n 'shapeStar8',\n 'shapePentagram',\n 'shapeCircle',\n 'shapeEllipse',\n 'shapeSemicircle',\n 'shapeQuarter',\n 'shapeStadium',\n 'shapeRoundedSquare',\n 'shapeRing',\n 'shapeCrescent',\n 'shapeLens',\n 'shapeSector',\n 'shapeSegment',\n 'shapeArch',\n 'shapeTeardrop',\n 'shapeEgg',\n 'shapeHeart',\n 'shapeAngle',\n ],\n },\n {\n label: 'Platonic solids',\n names: [\n 'd4',\n 'd6',\n 'd8',\n 'd12',\n 'd20',\n ],\n },\n];\n","import type { SVGProps } from 'react';\nimport { ICON_FILLS, ICON_PATHS, type FillableIconName, type IconName } from './paths';\n\n/** Shared prop shape for the icon set. Color comes from the surrounding\n * `color` CSS property — every glyph strokes in `currentColor`. */\nexport interface IconProps {\n className?: string;\n /** Rendered pixel size, applied to both width and height. Defaults to 20. */\n size?: number;\n /** Accessible name. Omit inside a button that already labels itself; the\n * glyph is then `aria-hidden`. */\n label?: string;\n /** Shade the region the glyph encloses, in the same `currentColor` at\n * `fillOpacity`. Ignored by a glyph with no enclosed region — a spiral, or a\n * function with poles — so a caller can set it across a set without checking. */\n filled?: boolean;\n /** Tint strength for `filled`. */\n fillOpacity?: number;\n}\n\n/** True when `filled` will shade this glyph. */\nexport const isFillable = (name: IconName): name is FillableIconName => name in ICON_FILLS;\n\nconst SVG_BASE: SVGProps<SVGSVGElement> = {\n viewBox: '0 0 20 20',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.5,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n};\n\n// React 19 rewrites innerHTML whenever this object's identity changes, and a\n// rewrite during a press removes the node pointerdown hit, so no click follows.\nconst markup = new Map<string, { __html: string }>();\nconst markupFor = (html: string) => {\n let m = markup.get(html);\n if (!m) markup.set(html, (m = { __html: html }));\n return m;\n};\n\n/** Renders one glyph by name. The named components below are the usual way\n * in; reach for this when the glyph is chosen at runtime. */\nexport function Icon({\n name,\n className,\n size = 20,\n label,\n filled = false,\n fillOpacity = 0.16,\n}: IconProps & { name: IconName }) {\n const shade = filled && isFillable(name) ? ICON_FILLS[name] : '';\n return (\n <svg\n {...SVG_BASE}\n className={className}\n width={size}\n height={size}\n // The shade is drawn first so the stroke sits on top of it, and the tint\n // rides on the root: the stroked paths inherit `fill=\"none\"`, so a fill\n // opacity here reaches only the shade.\n fillOpacity={shade ? fillOpacity : undefined}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n // Glyph bodies are generated from scripts/icons/ and contain no\n // interpolated input.\n dangerouslySetInnerHTML={markupFor(shade + ICON_PATHS[name])}\n />\n );\n}\n"],"mappings":"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nF;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;CACF;CACA;EACE,OAAO;EACP,OAAO,40BA+DP;CACF;CACA;EACE,OAAO;EACP,OAAO,yhBAwCP;CACF;CACA;EACE,OAAO;EACP,OAAO;GACL;GACA;GACA;GACA;GACA;EACF;CACF;AACF,GClpBaC,KAAc,MAA6CC,KAAQH,GAE1EI,IAAoC;CACxC,SAAS;CACT,MAAM;CACN,QAAQ;CACR,aAAa;CACb,eAAe;CACf,gBAAgB;AAClB,GAIMC,oBAAS,IAAI,IAAgC,GAC7CC,KAAa,MAAiB;CAClC,IAAIC,IAAIF,EAAO,IAAIG,CAAI;CAEvB,OADKD,KAAGF,EAAO,IAAIG,GAAO,IAAI,EAAE,QAAQA,EAAK,CAAE,GACxCD;AACT;AAIA,SAAgBE,EAAK,EACnB,SACA,cACA,UAAO,IACP,UACA,YAAS,IACT,iBAAc,OACmB;CACjC,IAAMC,IAAQC,KAAUT,EAAWC,CAAI,IAAIH,EAAWG,KAAQ;CAC9D,OACE,kBAAC,OAAD;EACE,GAAIC;EACO;EACX,OAAOQ;EACP,QAAQA;EAIR,aAAaF,IAAQG,IAAc,KAAA;EACnC,MAAMC,IAAQ,QAAQ,KAAA;EACtB,cAAYA;EACZ,eAAa,MAAQ,KAAA;EAGrB,yBAAyBR,EAAUI,IAAQZ,EAAWK,EAAK;CAC5D,CAAA;AAEL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PatternPicker-B3HcMZWg.js","names":["s","NumberField","PatternPicker_module_default","TILES","TILE_SIZES","DEFAULT_TILE_SIZE","PREVIEW_SIZE","DEGREES","toDegrees","folded","rad","withRotation","parts","decomposePatternTransform","value","b","c","d","composePatternTransform","degrees","_drop","rest","specOf","fill","seedPattern","spec","from","tile","PatternPicker","props","size","pick","seeded","color","resize","onChange","nextSize","className","preview","selected","tilePreviewCssUrl","ToggleBar","v","deg"],"sources":["../../src/components/PatternPicker/PatternPicker.module.css","../../src/components/PatternPicker/PatternPicker.tsx"],"sourcesContent":["/* Tile grid over the size switch. */\n.root {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n min-inline-size: 0;\n}\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(var(--wzl-swatch-size, 28px), 1fr));\n gap: 0;\n}\n\n/* The swatch's whole face is its own tile, so it must not carry a flat\n background — and the tile repeats at its own scale, not the swatch's. */\n.swatch {\n width: 100%;\n aspect-ratio: 1 / 1;\n min-width: 0;\n padding: 0;\n border: 0.5px solid var(--wzl-border);\n border-radius: 0;\n cursor: pointer;\n background-color: var(--wzl-surface-sunken);\n background-image: var(--tile-preview);\n background-repeat: repeat;\n background-size: 16px 16px;\n background-clip: padding-box;\n}\n\n.swatch:hover {\n border-color: var(--wzl-fg-muted);\n}\n\n.swatchActive {\n border-color: var(--wzl-accent);\n box-shadow: 0 0 0 1px var(--wzl-accent);\n}\n","import type { ReactElement } from 'react';\nimport type { CSSProperties } from 'react';\nimport {\n composePatternTransform,\n decomposePatternTransform,\n type FillStyle,\n type TilePatternSpec,\n} from '@weasel-js/core';\nimport { tilePreviewCssUrl } from '@weasel-js/svg';\nimport { NumberField } from '../NumberField';\nimport { ToggleBar } from '../ToggleBar';\nimport s from './PatternPicker.module.css';\n\n/** The `pattern` member of the paint union. */\nexport type PatternFill = Extract<FillStyle, { fill: 'pattern' }>;\n\nconst TILES: readonly TilePatternSpec['tile'][] = ['hatch', 'crosshatch', 'dots', 'chunks'];\n\n/** Tile sizes the picker offers, coarse enough that each reads as a\n * distinct texture rather than a nudge. */\nconst TILE_SIZES: readonly { value: number; label: string }[] = [\n { value: 4, label: 'S' },\n { value: 8, label: 'M' },\n { value: 16, label: 'L' },\n { value: 32, label: 'XL' },\n];\n\nconst DEFAULT_TILE_SIZE = 8;\n\n/** Every swatch previews at one size so the grid compares tiles, not scales. */\nconst PREVIEW_SIZE = 16;\n\nconst DEGREES: Intl.NumberFormatOptions = { style: 'unit', unit: 'degree', unitDisplay: 'narrow', maximumFractionDigits: 1 };\n\n/** Rotation in degrees, folded into (-180, 180]. */\nfunction toDegrees(rad: number): number {\n const deg = (rad * 180) / Math.PI;\n const folded = ((((deg + 180) % 360) + 360) % 360) - 180;\n return folded === -180 ? 180 : folded;\n}\n\n/** `value` with its transform's rotation replaced, the transform dropped when\n * nothing is left of it. */\nfunction withRotation(value: PatternFill, degrees: number): PatternFill {\n const parts = decomposePatternTransform(value.transform);\n const [a, b, c, d] = composePatternTransform({ ...parts, rotation: (degrees * Math.PI) / 180 });\n const { transform: _drop, ...rest } = value;\n const identity = Math.abs(a - 1) < 1e-9 && Math.abs(b) < 1e-9 && Math.abs(c) < 1e-9 && Math.abs(d - 1) < 1e-9;\n return identity ? rest : { ...rest, transform: [a, b, c, d] };\n}\n\n/** The spec a pattern paint carries, if it carries one. A consumer-built\n * `TextureHandle` has no spec, so the picker shows no tile selected and\n * replaces it wholesale on the next click. */\nfunction specOf(fill: PatternFill): TilePatternSpec | null {\n return 'tile' in fill.pattern ? fill.pattern : null;\n}\n\n/**\n * A pattern seeded from a color. `units: 'bounds'` anchors the tile to the\n * node's box, so the texture travels with the shape.\n */\nexport function seedPattern(\n tile: TilePatternSpec['tile'],\n from: string,\n size: number = DEFAULT_TILE_SIZE,\n): PatternFill {\n const spec: TilePatternSpec = { tile, color: from, size };\n // `chunks` is a scatter over a ground rather than a line texture; without a\n // background it reads as loose specks on whatever sits beneath.\n if (tile === 'chunks') spec.bg = '#00000000';\n return { fill: 'pattern', pattern: spec, units: 'bounds' };\n}\n\n/** Props for {@link PatternPicker}. */\nexport interface PatternPickerProps {\n /** The pattern paint being edited. */\n value: PatternFill;\n /** The color new tiles are seeded with — the paint's own, normally. */\n color: string;\n /** Committed value: one call per click. A tile pick, a size change and a\n * committed rotation are each a complete gesture, so there is no `onInput`. */\n onChange: (next: PatternFill) => void;\n className?: string;\n}\n\n/**\n * Grid of tile swatches over a size switch and a rotation field, each swatch\n * previewing the real tile at the current color. Rotation edits only the\n * rotation part of the paint's `transform`; scale and skew survive it.\n *\n * The preview shares its shape mapper with what the renderer paints, so a\n * swatch cannot drift from the texture it selects.\n */\nexport function PatternPicker(props: PatternPickerProps): ReactElement {\n const { value, color, onChange, className } = props;\n const spec = specOf(value);\n const size = spec?.size ?? DEFAULT_TILE_SIZE;\n\n const pick = (tile: TilePatternSpec['tile']): void => {\n const seeded = seedPattern(tile, color, size);\n onChange(value.transform ? { ...seeded, transform: value.transform } : seeded);\n };\n\n const resize = (nextSize: number): void => {\n if (!spec) return;\n onChange({ ...value, pattern: { ...spec, size: nextSize } });\n };\n\n return (\n <div className={[s.root, className].filter(Boolean).join(' ')}>\n <div className={s.grid}>\n {TILES.map((tile) => {\n const preview: TilePatternSpec = { tile, color, size: PREVIEW_SIZE };\n if (tile === 'chunks') preview.bg = '#00000000';\n const selected = spec?.tile === tile;\n return (\n <button\n key={tile}\n type=\"button\"\n className={[s.swatch, selected && s.swatchActive].filter(Boolean).join(' ')}\n style={{ ['--tile-preview' as string]: tilePreviewCssUrl(preview) } as CSSProperties}\n title={tile}\n aria-label={tile}\n aria-pressed={selected}\n onClick={() => pick(tile)}\n />\n );\n })}\n </div>\n <ToggleBar<number>\n items={TILE_SIZES}\n value={size}\n size=\"sm\"\n ariaLabel=\"Tile size\"\n onChange={(v) => v != null && resize(v)}\n />\n <NumberField\n label=\"Rotation\"\n orientation=\"row\"\n width=\"fit\"\n value={toDegrees(decomposePatternTransform(value.transform).rotation)}\n step={15}\n formatOptions={DEGREES}\n onChange={(deg) => Number.isFinite(deg) && onChange(withRotation(value, deg))}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Prefs-BnVEyfWO.js","names":["_Fragment","s","s","s","s","s","Dialog","PropertyRow","PropertyControl","Input","useRovingTabIndex","filterPrefSubtree","prefValueAtPath","isPrefLeaf","visiblePrefSubtree","prefFieldProps","pickActiveSection","active","offsets","top","slack","id","SETTLE_MS","useScrollSpy","options","setActive","useState","heldRef","useRef","timerRef","releaseRef","key","ids","measure","useCallback","root","rootRef","rootTop","el","scrollTo","release","prefersReducedMotion","useEffect","Prefs_module_default","PrefRow","stored","ctx","path","inherited","toggles","onAutoChange","setAuto","next","renderCtx","pref","v","custom","control","renderBuiltin","Fragment","ObjectLeaf","field","settledOnly","held","value","objectRows","out","child","children","inner","base","PrefsPane","props","leaves","group","entry","groups","childPath","className","scrollRef","leaf","PaneSection","Heading","depth","p","PrefsRail","activate","item","items","index","onOpen","onScrollTo","roving","i","section","ariaLabel","header","open","inView","current","showCounts","PrefsForm","query","setQuery","useMemo","visible","schema","showHidden","filterable","layout","RailLayout","NoMatches","GroupBody","prefRailItems","uncontrolled","setUncontrolled","subPages","requested","hasLeaves","paneGroup","spy","setOpen","whole","opensTop","leavesOf","filterField","onClearFilter","rootName","node","cursor","seg","onClear","PrefsDialog","form","rail","title","dialogClassName","headerExtra"],"sources":["../../src/useScrollSpy.ts","../../src/components/Prefs/Prefs.module.css","../../src/components/Prefs/PrefsRow.tsx","../../src/components/Prefs/PrefsPane.tsx","../../src/components/Prefs/PrefsRail.tsx","../../src/components/Prefs/PrefsForm.tsx","../../src/components/Prefs/PrefsDialog.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type RefObject } from 'react';\n\n/** One observed section: its id and its top edge, in the container's\n * coordinates (its `getBoundingClientRect().top` less the container's). */\nexport interface SectionOffset {\n id: string;\n top: number;\n}\n\n/**\n * The section a reader is looking at: the last one whose top edge has passed\n * the container's, within `slack` of it so a heading flush with the top counts\n * as arrived. Null until one has — the settings above the first section belong\n * to the group itself, and marking a section the reader has not reached yet\n * points them at the wrong place.\n *\n * Offsets arrive in document order and are not re-sorted — a caller reading\n * them off the DOM already has them that way, and sorting would hide a\n * measurement that came back wrong.\n */\nexport function pickActiveSection(\n offsets: readonly SectionOffset[],\n slack = 8,\n): string | null {\n let active: string | null = null;\n for (const { id, top } of offsets) {\n if (top - slack > 0) break;\n active = id;\n }\n return active;\n}\n\n/** Options for {@link useScrollSpy}. */\nexport interface UseScrollSpyOptions {\n /** The scrolling element holding the sections. */\n rootRef: RefObject<HTMLElement | null>;\n /** Section element ids, in document order. */\n ids: readonly string[];\n /** Pixels of tolerance at the container's top edge. */\n slack?: number;\n}\n\n/** What {@link useScrollSpy} returns. */\nexport interface ScrollSpy {\n /** Id of the section in view, or null before anything is measured. */\n active: string | null;\n /**\n * Scroll `id` to the container's top and hold that answer until the scroll\n * settles. Without the hold, the scroll the click causes is observed on its\n * way past every intervening section and the rail flickers through them.\n */\n scrollTo: (id: string) => void;\n}\n\n/** How long to keep a programmatic scroll's answer when `scrollend` never\n * arrives — Safari and Firefox have not shipped it. Comfortably longer than a\n * smooth scroll, short enough that a reader who then scrolls by hand is not\n * left looking at a stale highlight. */\nconst SETTLE_MS = 700;\n\n/**\n * Which of a scrolling container's sections is in view, for a navigation rail\n * that follows the reader. Positions are read on the container's own `scroll`\n * event — already throttled to the frame by the browser — rather than through\n * `IntersectionObserver`, so the decision stays a pure function of measured\n * offsets ({@link pickActiveSection}) and is testable apart from the DOM.\n */\nexport function useScrollSpy(options: UseScrollSpyOptions): ScrollSpy {\n const { rootRef, ids, slack } = options;\n const [active, setActive] = useState<string | null>(null);\n // Set while a programmatic scroll runs: what to report, instead of what the\n // moving container would say.\n const heldRef = useRef<string | null>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const releaseRef = useRef<(() => void) | null>(null);\n const key = ids.join('\\u0000');\n\n const measure = useCallback((): void => {\n const root = rootRef.current;\n if (!root) return;\n if (heldRef.current !== null) {\n setActive(heldRef.current);\n return;\n }\n const rootTop = root.getBoundingClientRect().top;\n const offsets: SectionOffset[] = [];\n for (const id of ids) {\n const el = root.querySelector<HTMLElement>(`[data-spy-section=\"${CSS.escape(id)}\"]`);\n if (el) offsets.push({ id, top: el.getBoundingClientRect().top - rootTop });\n }\n setActive(pickActiveSection(offsets, slack));\n // `ids` is compared by content through `key`: a caller deriving the array\n // each render would otherwise resubscribe on every one.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rootRef, key, slack]);\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n measure();\n root.addEventListener('scroll', measure, { passive: true });\n return () => root.removeEventListener('scroll', measure);\n }, [rootRef, measure]);\n\n const scrollTo = useCallback((id: string): void => {\n const root = rootRef.current;\n if (!root) return;\n const el = root.querySelector<HTMLElement>(`[data-spy-section=\"${CSS.escape(id)}\"]`);\n heldRef.current = id;\n setActive(id);\n const release = (): void => {\n heldRef.current = null;\n root.removeEventListener('scrollend', release);\n measure();\n };\n // A scroll interrupted by the next one would otherwise leave its\n // `scrollend` listener behind to fire against a later scroll.\n releaseRef.current?.();\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n releaseRef.current = release;\n timerRef.current = setTimeout(release, SETTLE_MS);\n root.addEventListener('scrollend', release);\n if (!el) return;\n const top = el.getBoundingClientRect().top - root.getBoundingClientRect().top + root.scrollTop;\n root.scrollTo?.({ top, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n }, [rootRef, measure]);\n\n useEffect(() => () => {\n if (timerRef.current !== null) clearTimeout(timerRef.current);\n releaseRef.current?.();\n }, []);\n\n return { active, scrollTo };\n}\n\nfunction prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function'\n && matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n","/* Ported from WeaselDraw's wd-prefs-* rules (apps/draw/src/app.css),\n * generalized onto theme tokens. Column width is overridable via\n * --wzl-prefs-column-width at any ancestor scope. */\n\n.columns {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--wzl-space-6);\n overflow-y: auto;\n padding-right: var(--wzl-space-2);\n}\n\n.column {\n flex: 0 0 var(--wzl-prefs-column-width, 300px);\n width: var(--wzl-prefs-column-width, 300px);\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-4);\n}\n\n.panel {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-4);\n padding: var(--wzl-space-5);\n background: var(--wzl-surface-sunken);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n --wzl-input-surface: var(--wzl-surface);\n}\n\n.subpanel {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n margin-top: var(--wzl-space-3);\n padding: var(--wzl-space-4) var(--wzl-space-4) var(--wzl-space-4) var(--wzl-space-5);\n background: var(--wzl-surface-sunken);\n border-left: 2px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n --wzl-input-surface: var(--wzl-surface);\n}\n\n.groupHeader {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-1);\n padding-bottom: var(--wzl-space-2);\n border-bottom: 1px solid var(--wzl-border);\n}\n\n.subpanel .groupHeader {\n border-bottom: none;\n padding-bottom: var(--wzl-space-1);\n}\n\n.groupTitle {\n margin: 0;\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-bold);\n color: var(--wzl-fg);\n letter-spacing: var(--wzl-params-label-tracking, var(--wzl-tracking-wider));\n text-transform: var(--wzl-params-label-case, uppercase);\n}\n\n.groupDesc {\n margin: 0;\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n line-height: 1.35;\n}\n\n.rows {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n}\n\n/* A leaf's row is a PropertyRow, inline; this only sets the form's type. */\n.row {\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg);\n cursor: default;\n}\n\n/* Control slot — fixed width so the label can take the rest of the row.\n * Kit form controls render as block-level flex columns that fill it. */\n.rowControl {\n flex: 0 0 110px;\n min-width: 0;\n display: flex;\n align-items: center;\n}\n\n.unrenderable {\n font-family: var(--wzl-font-mono);\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n}\n\n/* PrefsDialog header row: title text + optional headerExtra chrome. */\n.titleRow {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-6);\n flex: 1;\n min-width: 0;\n}\n\n.titleRow > span:first-child {\n flex: 1;\n min-width: 0;\n}\n\n/* An object leaf renders its fields as its own rows. */\n.objectLeaf {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n inline-size: 100%;\n}\n\n/* Outranks the PropertyRow it styles, which is a flex row. */\n.objectLeaf .objectRow {\n display: grid;\n grid-template-columns: 96px 1fr;\n gap: var(--wzl-space-4);\n align-items: center;\n}\n\n.objectGroup {\n margin: var(--wzl-space-2) 0 0;\n font-size: var(--wzl-font-size-xs);\n font-weight: var(--wzl-font-weight-bold);\n text-transform: var(--wzl-params-label-case, uppercase);\n letter-spacing: var(--wzl-params-label-tracking, var(--wzl-tracking-wide));\n opacity: 0.55;\n}\n\n/* ---------------------------------------------------------------------------\n * Rail layout. The rail is the only chrome: no panels, because the surface\n * the form sits on already has a border and a card inside it restates one.\n * Width is overridable via --wzl-prefs-rail-width at any ancestor scope.\n * ------------------------------------------------------------------------ */\n\n.columnsLayout {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-4);\n min-height: 0;\n}\n\n.railLayout {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n min-height: 0;\n block-size: 100%;\n /* The pane scrolls, not the layout: a rail that scrolled away with the\n settings would be useless exactly when it is needed. */\n overflow: hidden;\n}\n\n/* What `PrefsDialog` hands `Dialog` for its body in rail layout: the pane\n inside does the scrolling and the rail meets the dialog's own edges. */\n.railBody {\n padding: 0;\n overflow: hidden;\n /* The modal sets only `max-height`, so the layout's `block-size: 100%`\n resolves against nothing and the pane grows to fit every row. As a flex\n item the layout takes the body's flexed height, which the cap does bound. */\n display: flex;\n flex-direction: column;\n /* A settled height: without one the dialog grows and shrinks as the reader\n moves between a two-row group and a twenty-row one, and the rail entry\n they are aiming at moves while they aim at it. */\n min-block-size: min(60vh, 420px);\n /* Same reason across: a filter that narrows the schema to two rows should\n not pull the dialog's edges in around them. */\n min-inline-size: min(760px, 90vw);\n}\n\n.railBody > .railLayout {\n flex: 1 1 auto;\n}\n\n.rail {\n /* Never more than two fifths of the box: at its full width in a narrow\n container the rail takes the space the settings need and leaves a pane\n too thin to hold a row. The clamp belongs on the flex basis — an\n `inline-size` here is simply ignored, which is what made a first attempt\n at this look right and do nothing. */\n flex: 0 1 min(var(--wzl-prefs-rail-width, 216px), 40%);\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-2);\n padding: var(--wzl-space-3) var(--wzl-space-2);\n background: var(--wzl-surface-sunken);\n border-right: 1px solid var(--wzl-border);\n overflow-y: auto;\n /* The rail is itself sunken, so a field taking the default surface would be\n the same color as the rail behind it. */\n --wzl-input-surface: var(--wzl-surface);\n}\n\n.railList {\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.railItem {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-2);\n padding: var(--wzl-space-2) var(--wzl-space-3);\n border: none;\n border-radius: var(--wzl-radius-sm);\n background: none;\n color: var(--wzl-fg);\n font: inherit;\n font-size: var(--wzl-font-size-sm);\n text-align: start;\n cursor: default;\n}\n\n.railItem:hover {\n background: var(--wzl-surface-raised);\n}\n\n.railItem:focus-visible {\n outline: 2px solid var(--wzl-focus-ring);\n outline-offset: -2px;\n}\n\n.railSub {\n padding-left: var(--wzl-space-7);\n}\n\n.railOpen,\n.railOpen:hover {\n background: var(--wzl-accent);\n color: var(--wzl-fg-on-accent);\n}\n\n.railInView {\n box-shadow: inset 2px 0 0 var(--wzl-accent);\n}\n\n.railName {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Last in the row: a count that changes as the reader types would otherwise\n shove the name on every keystroke. */\n.railCount {\n composes: numeric from '@weasel-js/theme/numeric.module.css';\n margin-left: auto;\n font-size: var(--wzl-font-size-xs);\n opacity: 0.6;\n}\n\n.pane {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: var(--wzl-space-5) var(--wzl-space-6);\n}\n\n.paneHead {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-1);\n margin-bottom: var(--wzl-space-5);\n}\n\n.paneTitle {\n margin: 0;\n font-size: var(--wzl-font-size-lg);\n font-weight: var(--wzl-font-weight-medium);\n color: var(--wzl-fg);\n}\n\n.paneDesc {\n margin: 0;\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n line-height: 1.35;\n}\n\n.paneSection {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n margin-top: var(--wzl-space-6);\n}\n\n.paneSubsection {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-2);\n margin-top: var(--wzl-space-4);\n padding-left: var(--wzl-space-4);\n border-left: 2px solid var(--wzl-border);\n}\n\n.sectionTitle {\n position: sticky;\n /* Sticky offsets are measured from the scrollport's edge, not from inside\n the pane's padding, so this is 0 and the heading's own padding is what\n keeps the text off the edge. */\n top: 0;\n z-index: 1;\n margin: 0;\n padding: var(--wzl-space-3) 0 var(--wzl-space-2);\n background: var(--wzl-surface);\n border-bottom: 1px solid var(--wzl-border);\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-bold);\n color: var(--wzl-fg-subtle);\n letter-spacing: var(--wzl-params-label-tracking, var(--wzl-tracking-wider));\n text-transform: var(--wzl-params-label-case, uppercase);\n}\n\n.subsectionTitle {\n margin: 0;\n font-size: var(--wzl-font-size-xs);\n font-weight: var(--wzl-font-weight-bold);\n color: var(--wzl-fg-subtle);\n letter-spacing: var(--wzl-params-label-tracking, var(--wzl-tracking-wide));\n text-transform: var(--wzl-params-label-case, uppercase);\n}\n\n/* In the rail layout a row is a grid, so the control track grows with the\n pane instead of holding at the columns layout's fixed slot. */\n.railLayout .row {\n display: grid;\n /* The control track is capped rather than taking the rest: a number field\n as wide as the pane reads as a text area, and every row's control starts\n at the same x either way. */\n grid-template-columns:\n minmax(140px, var(--wzl-params-label-width, 240px))\n minmax(180px, 260px);\n align-items: center;\n}\n\n.railLayout .rowControl {\n flex: 1 1 auto;\n}\n\n.filter {\n padding: 0 var(--wzl-space-1) var(--wzl-space-2);\n}\n\n.noMatches {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--wzl-space-3);\n padding: var(--wzl-space-6) 0;\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n}\n\n.noMatches p {\n margin: 0;\n}\n\n.clearFilter {\n padding: var(--wzl-space-1) var(--wzl-space-3);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n background: var(--wzl-surface-raised);\n color: var(--wzl-fg);\n font: inherit;\n font-size: var(--wzl-font-size-sm);\n}\n","import { type ReactNode } from 'react';\nimport { PropertyControl } from '../Properties/PropertyField';\nimport { PropertyRow } from '../Properties/PropertyPanel';\nimport { prefFieldProps } from './prefField';\nimport {\n isPrefLeaf,\n prefValueAtPath,\n type PrefGroup,\n type PrefLeaf,\n type PrefObject,\n} from './schema';\nimport s from './Prefs.module.css';\n\n/** What a {@link PrefRenderer} is given for the leaf it is rendering. */\nexport interface PrefRenderContext {\n /** Dotted path of the leaf within the schema root. */\n path: string;\n /** The schema node. App renderers narrow this to their own kind shape. */\n pref: PrefLeaf;\n /** Current value — `values` at `path`, falling back to `pref.default`. */\n value: unknown;\n setValue: (value: unknown) => void;\n /** Whether this leaf is currently auto — not pinned, computed by the owner. */\n auto: boolean;\n /** Toggle this leaf's auto state. */\n setAuto: (next: boolean) => void;\n}\n\n/**\n * Renders the control cell for one preference leaf. Returning `null`\n * collapses the row.\n */\nexport type PrefRenderer = (ctx: PrefRenderContext) => ReactNode;\n\nexport interface WalkCtx {\n values: unknown;\n onChange: (path: string, value: unknown) => void;\n renderers?: Record<string, PrefRenderer>;\n auto?: ReadonlySet<string>;\n onAutoChange?: (path: string, next: boolean) => void;\n inheritHint?: (path: string) => string | undefined;\n canInherit?: (path: string) => boolean;\n}\n\nexport function PrefRow({ ctx, path, pref }: { ctx: WalkCtx; path: string; pref: PrefLeaf }) {\n const stored = prefValueAtPath(ctx.values, path);\n const inherited = ctx.auto?.has(path) ?? false;\n const { onAutoChange } = ctx;\n const toggles = onAutoChange !== undefined && (ctx.canInherit?.(path) ?? true);\n const setAuto = (next: boolean): void => {\n if (toggles) onAutoChange(path, next);\n };\n const renderCtx: PrefRenderContext = {\n path,\n pref,\n value: stored !== undefined ? stored : pref.default,\n setValue: (v) => ctx.onChange(path, v),\n auto: inherited,\n setAuto,\n };\n\n const custom = ctx.renderers?.[pref.kind];\n const control = custom ? custom(renderCtx) : renderBuiltin(renderCtx);\n if (custom && control === null) return null;\n\n // `block` leaves own their chrome (embedded editors with their own\n // header) — no label/tooltip row.\n if (pref.block) return <>{control}</>;\n\n return (\n <PropertyRow\n label={pref.name}\n description={pref.description}\n layout=\"inline\"\n className={s.row}\n // The owner passes an inherited leaf's value already resolved, so the\n // control keeps drawing it; editing it pins, through `onChange`.\n auto={inherited}\n autoControl=\"dimmed\"\n onAutoChange={toggles ? setAuto : undefined}\n hint={inherited ? ctx.inheritHint?.(path) : undefined}\n >\n <span className={s.rowControl}>{control}</span>\n </PropertyRow>\n );\n}\n\nfunction renderBuiltin(\n ctx: PrefRenderContext,\n // The object a nested leaf is a field of — what an enum `encoding` and a\n // font's weight and slant read against. Undefined for a top-level leaf.\n siblings?: Record<string, unknown>,\n): ReactNode {\n const { pref, value, setValue } = ctx;\n if (pref.kind === 'object') return <ObjectLeaf ctx={ctx} />;\n const field = prefFieldProps(pref, { value, siblings, setValue });\n if (field === null) {\n // App-defined kind with no `renderers` entry: labeled placeholder, not a\n // crash — a missing wiring should be visible and recoverable.\n return <span className={s.unrenderable}>({pref.kind}: no renderer)</span>;\n }\n switch (field.kind) {\n // A form stores what was settled on: a number once it is entered, a color\n // once its gesture ends.\n case 'number':\n return (\n <PropertyControl\n {...field}\n name={pref.name}\n onInput={settledOnly}\n steppers={field.accepts === undefined}\n />\n );\n case 'color':\n return <PropertyControl {...field} name={pref.name} onInput={settledOnly} />;\n default:\n return <PropertyControl {...field} name={pref.name} />;\n }\n}\n\nconst settledOnly = (): void => {};\n\n/** One value with its fields hanging off it: each field renders its own\n * control and commits the parent object whole. */\nfunction ObjectLeaf({ ctx }: { ctx: PrefRenderContext }) {\n const pref = ctx.pref as PrefObject;\n const { value, setValue } = ctx;\n const held = typeof value === 'object' && value !== null\n ? (value as Record<string, unknown>)\n : undefined;\n const objectRows = (children: Record<string, PrefLeaf | PrefGroup>): ReactNode[] => {\n const out: ReactNode[] = [];\n for (const [key, child] of Object.entries(children)) {\n if (!isPrefLeaf(child)) {\n const inner = objectRows(child.children);\n if (inner.length === 0) continue;\n out.push(<h4 key={`group:${key}`} className={s.objectGroup}>{child.name}</h4>, ...inner);\n continue;\n }\n out.push(\n <PropertyRow\n key={key}\n label={child.name}\n layout=\"inline\"\n className={s.objectRow}\n >\n <span className={s.rowControl}>\n {renderBuiltin({\n path: `${ctx.path}.${key}`,\n pref: child,\n value: held?.[key],\n setValue: (v) => {\n const base = held ?? pref.fromScalar?.(value) ?? {};\n setValue({ ...base, [key]: v });\n },\n // A field is not pinned on its own — it shares the state of\n // the object leaf it hangs off.\n auto: ctx.auto,\n setAuto: ctx.setAuto,\n }, held)}\n </span>\n </PropertyRow>,\n );\n }\n return out;\n };\n return <div className={s.objectLeaf}>{objectRows(pref.children)}</div>;\n}\n","import { type RefObject } from 'react';\nimport { isPrefLeaf, type PrefGroup, type PrefLeaf } from './schema';\nimport { PrefRow, type WalkCtx } from './PrefsRow';\nimport s from './Prefs.module.css';\n\n/** Props for {@link PrefsPane}. */\nexport interface PrefsPaneProps {\n ctx: WalkCtx;\n /** The open group, or a synthetic one holding the root's loose leaves. */\n group: PrefGroup;\n /** Dotted path of `group`. Empty for the loose-leaf pane. */\n path: string;\n /** The pane's scroll container, for the rail's scroll spy. */\n scrollRef: RefObject<HTMLDivElement | null>;\n className?: string;\n}\n\n/**\n * One rail section's settings: the group's own leaves, then one headed\n * section per nested group.\n *\n * Nothing here draws a panel. The rail is the layout's structure, and a card\n * inside a dialog that already has a border only restates it — the columns\n * layout's sunken panels are what this is the alternative to.\n */\nexport function PrefsPane(props: PrefsPaneProps) {\n const { ctx, group, path, scrollRef, className } = props;\n const leaves = Object.entries(group.children).filter(\n (entry): entry is [string, PrefLeaf] => isPrefLeaf(entry[1]),\n );\n const groups = Object.entries(group.children).filter(\n (entry): entry is [string, PrefGroup] => !isPrefLeaf(entry[1]),\n );\n const childPath = (key: string): string => (path === '' ? key : `${path}.${key}`);\n\n return (\n <div className={[s.pane, className].filter(Boolean).join(' ')} ref={scrollRef}>\n <div className={s.paneHead}>\n <h3 className={s.paneTitle}>{group.name}</h3>\n {group.description !== undefined && (\n <p className={s.paneDesc}>{group.description}</p>\n )}\n </div>\n {leaves.length > 0 && (\n <div className={s.rows}>\n {leaves.map(([key, leaf]) => (\n <PrefRow key={key} ctx={ctx} path={childPath(key)} pref={leaf} />\n ))}\n </div>\n )}\n {groups.map(([key, child]) => (\n <PaneSection\n key={key}\n ctx={ctx}\n group={child}\n path={childPath(key)}\n depth={0}\n />\n ))}\n </div>\n );\n}\n\n/**\n * A nested group inside a pane. Depth 0 sections are the ones the rail links\n * to and carry `data-spy-section`; deeper ones indent and are reached only by\n * scrolling, which is what keeps the rail two levels deep whatever the schema\n * does.\n */\nfunction PaneSection({ ctx, group, path, depth }: {\n ctx: WalkCtx;\n group: PrefGroup;\n path: string;\n depth: number;\n}) {\n const Heading = depth === 0 ? 'h4' : 'h5';\n return (\n <section\n className={depth === 0 ? s.paneSection : s.paneSubsection}\n data-spy-section={depth === 0 ? path : undefined}\n aria-label={group.name}\n >\n <Heading className={depth === 0 ? s.sectionTitle : s.subsectionTitle}>\n {group.name}\n </Heading>\n {group.description !== undefined && (\n <p className={s.paneDesc}>{group.description}</p>\n )}\n <div className={s.rows}>\n {Object.entries(group.children).map(([key, child]) => {\n const p = `${path}.${key}`;\n return isPrefLeaf(child) ? (\n <PrefRow key={key} ctx={ctx} path={p} pref={child} />\n ) : (\n <PaneSection key={key} ctx={ctx} group={child} path={p} depth={depth + 1} />\n );\n })}\n </div>\n </section>\n );\n}\n","import type { ReactNode } from 'react';\nimport { useRovingTabIndex } from '../../useRovingTabIndex';\nimport type { PrefRailItem } from './schema';\nimport s from './Prefs.module.css';\n\n/** Props for {@link PrefsRail}. */\nexport interface PrefsRailProps {\n items: readonly PrefRailItem[];\n /** Path of the open group: depth 0, or depth 1 under `subPages`. */\n section: string;\n /** Path of the depth-1 group in view, from the pane's scroll spy. */\n current: string | null;\n /** A depth-0 entry was chosen: open its pane. */\n onOpen: (path: string) => void;\n /** A depth-1 entry was chosen: scroll the open pane to it, or, under\n * `subPages`, open it. */\n onScrollTo: (path: string) => void;\n /** Accessible name for the rail's landmark. */\n ariaLabel: string;\n /** Rendered above the list — the filter field, when there is one. */\n header?: ReactNode;\n /** Show each entry's match count. Only meaningful while filtering. */\n showCounts?: boolean;\n}\n\n/**\n * The rail beside a `PrefsForm` pane: depth-0 groups, each followed by the\n * depth-1 groups that scroll within it.\n *\n * A list of buttons rather than a tablist, because only half of these entries\n * switch anything — the nested ones scroll the pane the selected entry already\n * opened, and a tab that does not own a panel has no honest role. The open\n * group is `aria-current=\"page\"`; the nested group in view is\n * `aria-current=\"location\"`.\n */\nexport function PrefsRail(props: PrefsRailProps) {\n const { items, section, current, onOpen, onScrollTo, ariaLabel, header, showCounts } = props;\n const activate = (index: number): void => {\n const item = items[index];\n if (!item) return;\n if (item.depth === 0) onOpen(item.path);\n else onScrollTo(item.path);\n };\n const roving = useRovingTabIndex<HTMLDivElement>({\n itemSelector: `.${s.railItem}`,\n tabStopIndex: Math.max(0, items.findIndex((i) => i.path === section)),\n });\n\n return (\n <nav className={s.rail} aria-label={ariaLabel}>\n {header}\n <div className={s.railList} ref={roving.rootRef} onKeyDown={roving.onKeyDown}>\n {items.map((item, index) => {\n const open = item.path === section;\n const inView = item.depth === 1 && item.path === current;\n return (\n <button\n key={item.path === '' ? '\\u0000root' : item.path}\n type=\"button\"\n className={[s.railItem, item.depth === 1 && s.railSub, open && s.railOpen, inView && s.railInView]\n .filter(Boolean)\n .join(' ')}\n aria-current={open ? 'page' : inView ? 'location' : undefined}\n onClick={() => activate(index)}\n >\n <span className={s.railName}>{item.name}</span>\n {showCounts ? <span className={s.railCount}>{item.matches}</span> : null}\n </button>\n );\n })}\n </div>\n </nav>\n );\n}\n","import { useMemo, useRef, useState, type ReactNode } from 'react';\nimport { Input } from '../Input';\nimport { useScrollSpy } from '../../useScrollSpy';\nimport {\n filterPrefSubtree,\n isPrefLeaf,\n prefRailItems,\n visiblePrefSubtree,\n type PrefGroup,\n} from './schema';\nimport { PrefRow, type PrefRenderer, type WalkCtx } from './PrefsRow';\nimport { PrefsPane } from './PrefsPane';\nimport { PrefsRail } from './PrefsRail';\nimport s from './Prefs.module.css';\n\nexport type { PrefRenderer, PrefRenderContext } from './PrefsRow';\n\n/** How a {@link PrefsForm} lays its groups out. */\nexport type PrefsLayout = 'columns' | 'rail';\n\n/** Props for {@link PrefsForm}. */\nexport interface PrefsFormProps {\n /** Root of the schema tree. Core `ToolPrefGroup`s assign structurally. */\n schema: PrefGroup;\n /** Nested value tree (shape mirrors the schema). Sparse is fine —\n * missing leaves fall back to their schema `default`. */\n values?: unknown;\n /** Change callback with the leaf's dotted path. Values apply live;\n * there is no dirty/commit state. */\n onChange: (path: string, value: unknown) => void;\n /**\n * Per-kind renderers for app-defined kinds. Entries also override the\n * built-in kinds when keys collide. A renderer owns the control cell\n * (the label/tooltip row chrome stays with the form, unless the leaf\n * sets `block`); returning `null` collapses the row entirely. Unknown\n * kinds with no renderer show a labeled placeholder instead of\n * crashing.\n */\n renderers?: Record<string, PrefRenderer>;\n /** Reveal `hidden` leaves (dev tooling). Default false. */\n showHidden?: boolean;\n /**\n * `'columns'` (the default) wraps each top-level group into its own panel\n * column. `'rail'` puts a two-level navigation rail beside one group's\n * settings at a time — what a dialog-sized surface wants, since columns\n * overflow sideways once there are more than two.\n */\n layout?: PrefsLayout;\n /** Show a filter field that narrows the form to matching leaves. */\n filterable?: boolean;\n /** Rail layout: path of the open top-level group. Controlled. */\n section?: string;\n /** Rail layout: path of the group open before the reader picks one.\n * Defaults to the first in the schema. */\n defaultSection?: string;\n onSectionChange?: (path: string) => void;\n /**\n * Rail layout: a nested entry opens a page of its own group instead of\n * scrolling the open one to it, and a top-level entry's page holds only its\n * own leaves (or opens its first nested entry when it has none). For a\n * top-level group whose subgroups are long enough that one page of all of\n * them reads as a wall. Default false.\n */\n subPages?: boolean;\n /** Dotted paths whose leaves currently inherit: each still draws its control,\n * dimmed, showing the value in `values` — pass it already resolved. Editing\n * it calls `onChange` as usual, which is the owner's cue to pin it. */\n auto?: ReadonlySet<string>;\n /** Given, a leaf's label toggles whether it inherits: `next` true unpins it,\n * false pins it at the value it shows. Leaves `canInherit` refuses keep a\n * plain label. */\n onAutoChange?: (path: string, next: boolean) => void;\n /** Which leaves can inherit, and so get a label toggle. Default: every leaf,\n * once `onAutoChange` is given. */\n canInherit?: (path: string) => boolean;\n /** Small text after an inherited leaf's label, e.g. `() => 'from Defaults'`.\n * Default: none. */\n inheritHint?: (path: string) => string | undefined;\n className?: string;\n}\n\n/**\n * Schema-driven preferences form. Leaves render as label + control rows;\n * how the groups around them are arranged is `layout`'s to say — columns of\n * panels, or a navigation rail beside one group at a time.\n *\n * Storage-agnostic: pair with `PrefsDialog` for the modal composition, and\n * persist however the app likes via `onChange`.\n */\nexport function PrefsForm(props: PrefsFormProps) {\n const {\n schema,\n values,\n onChange,\n renderers,\n showHidden = false,\n layout = 'columns',\n filterable = false,\n auto,\n onAutoChange,\n canInherit,\n inheritHint,\n className,\n } = props;\n const [query, setQuery] = useState('');\n const root = useMemo(() => {\n const visible = visiblePrefSubtree(schema, showHidden);\n return visible === null ? null : filterPrefSubtree(visible, query);\n }, [schema, showHidden, query]);\n\n const ctx: WalkCtx = { values, onChange, renderers, auto, onAutoChange, canInherit, inheritHint };\n const field = filterable ? (\n <div className={s.filter}>\n <Input\n value={query}\n onChange={setQuery}\n aria-label={`Filter ${schema.name}`}\n placeholder=\"Filter settings\"\n />\n </div>\n ) : null;\n\n if (layout === 'rail') {\n return (\n <RailLayout\n {...props}\n root={root}\n ctx={ctx}\n query={query}\n filterField={field}\n onClearFilter={() => setQuery('')}\n />\n );\n }\n\n return (\n <div className={[s.columnsLayout, className].filter(Boolean).join(' ')}>\n {field}\n {root === null ? (\n <NoMatches query={query} onClear={() => setQuery('')} />\n ) : (\n <div className={s.columns}>\n {Object.entries(root.children).map(([key, child]) => (\n <div key={key} className={s.column}>\n {isPrefLeaf(child) ? (\n // Top-level leaves are unusual but legal — give each its own\n // column for symmetry with grouped siblings.\n <PrefRow ctx={ctx} path={key} pref={child} />\n ) : (\n <GroupBody ctx={ctx} group={child} path={key} depth={0} />\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/** The rail layout's own state: which group is open, and where the pane is\n * scrolled to within it. Split out so the columns layout runs none of it. */\nfunction RailLayout(props: PrefsFormProps & {\n root: PrefGroup | null;\n ctx: WalkCtx;\n query: string;\n filterField: ReactNode;\n onClearFilter: () => void;\n}) {\n const { schema, root, ctx, query, filterField, onClearFilter, className } = props;\n const items = useMemo(() => (root === null ? [] : prefRailItems(root)), [root]);\n const [uncontrolled, setUncontrolled] = useState(\n () => props.defaultSection ?? '',\n );\n const subPages = props.subPages === true;\n const requested = props.section ?? uncontrolled;\n // A filter can take the open group out of the rail entirely, and a section\n // the schema never had can arrive from a consumer's stale state. Either way\n // the first surviving entry is what the reader should be looking at.\n let open = items.some((i) => i.path === requested && (i.depth === 0 || subPages))\n ? requested\n : (items.find((i) => i.depth === 0)?.path ?? '');\n if (subPages && root !== null && !hasLeaves(paneGroup(root, open, schema.name))) {\n open = items.find((i) => i.depth === 1 && i.section === open)?.path ?? open;\n }\n\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const sectionIds = useMemo(\n () =>\n subPages\n ? []\n : items.filter((i) => i.depth === 1 && i.section === open).map((i) => i.path),\n [items, open, subPages],\n );\n const spy = useScrollSpy({ rootRef: scrollRef, ids: sectionIds });\n\n const setOpen = (path: string): void => {\n if (props.section === undefined) setUncontrolled(path);\n props.onSectionChange?.(path);\n // Optional-called: jsdom's elements have no `scrollTo`, and neither does\n // a pane that is not the scrolling box in some consumer's layout.\n scrollRef.current?.scrollTo?.({ top: 0 });\n };\n\n const whole = root === null ? null : paneGroup(root, open, schema.name);\n const opensTop = items.some((i) => i.path === open && i.depth === 0);\n const group = subPages && opensTop && whole !== null ? leavesOf(whole) : whole;\n\n return (\n <div className={[s.railLayout, className].filter(Boolean).join(' ')}>\n <PrefsRail\n items={items}\n section={open}\n current={subPages ? null : spy.active}\n onOpen={setOpen}\n onScrollTo={subPages ? setOpen : spy.scrollTo}\n ariaLabel={schema.name}\n header={filterField}\n showCounts={query.trim() !== ''}\n />\n {group === null ? (\n <div className={s.pane}>\n <NoMatches query={query} onClear={onClearFilter} />\n </div>\n ) : (\n <PrefsPane ctx={ctx} group={group} path={open} scrollRef={scrollRef} />\n )}\n </div>\n );\n}\n\n/**\n * The group a rail path opens. The empty path is the root's loose leaves,\n * which belong to no group of their own and are handed back as one named for\n * the schema — the rail lists them under the same name.\n */\nfunction paneGroup(root: PrefGroup, path: string, rootName: string): PrefGroup | null {\n if (path === '') {\n const children = Object.fromEntries(\n Object.entries(root.children).filter(([, child]) => isPrefLeaf(child)),\n );\n return Object.keys(children).length === 0\n ? null\n : { ...root, name: rootName, children };\n }\n let node: PrefGroup | undefined;\n let cursor = root;\n for (const seg of path.split('.')) {\n const next = cursor.children[seg];\n if (next === undefined || isPrefLeaf(next)) return null;\n node = next;\n cursor = next;\n }\n return node ?? null;\n}\n\n/** Whether a group holds any leaf directly, not counting its subgroups. */\nfunction hasLeaves(group: PrefGroup | null): boolean {\n return group !== null && Object.values(group.children).some(isPrefLeaf);\n}\n\n/** A group cut down to its direct leaves, for a page its subgroups each get their own of. */\nfunction leavesOf(group: PrefGroup): PrefGroup {\n return {\n ...group,\n children: Object.fromEntries(\n Object.entries(group.children).filter(([, child]) => isPrefLeaf(child)),\n ),\n };\n}\n\n/** What a filter matching nothing leaves behind. */\nfunction NoMatches({ query, onClear }: { query: string; onClear: () => void }) {\n return (\n <div className={s.noMatches}>\n <p>No settings match “{query.trim()}”.</p>\n <button type=\"button\" className={s.clearFilter} onClick={onClear}>\n Clear filter\n </button>\n </div>\n );\n}\n\nfunction GroupBody({ ctx, group, path, depth }: {\n ctx: WalkCtx;\n group: PrefGroup;\n path: string;\n depth: number;\n}) {\n return (\n <div className={depth === 0 ? s.panel : s.subpanel}>\n <div className={s.groupHeader}>\n <h3 className={s.groupTitle}>{group.name}</h3>\n {group.description !== undefined && (\n <p className={s.groupDesc}>{group.description}</p>\n )}\n </div>\n <div className={s.rows}>\n {Object.entries(group.children).map(([key, child]) => {\n const childPath = `${path}.${key}`;\n return isPrefLeaf(child) ? (\n <PrefRow key={key} ctx={ctx} path={childPath} pref={child} />\n ) : (\n <GroupBody key={key} ctx={ctx} group={child} path={childPath} depth={depth + 1} />\n );\n })}\n </div>\n </div>\n );\n}\n\n","import type { ReactNode } from 'react';\nimport { Dialog } from '../Dialog';\nimport { PrefsForm, type PrefsFormProps } from './PrefsForm';\nimport s from './Prefs.module.css';\n\n/**\n * Props for {@link PrefsDialog} — everything {@link PrefsForm} takes, plus\n * the dialog's own open state and chrome.\n */\nexport interface PrefsDialogProps extends PrefsFormProps {\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n /** Dialog heading. Defaults to the schema root's `name`. */\n title?: ReactNode;\n /** Extra chrome rendered at the end of the title row (e.g. a dev-mode\n * \"Show hidden\" switch). An action the reader acts on when they are done\n * — resetting, importing — belongs in `footer` instead, where a dialog's\n * actions live. */\n headerExtra?: ReactNode;\n /** Footer slot, passed through to `Dialog` — typically a reset or done\n * action. */\n footer?: ReactNode;\n /** Class applied to the dialog's modal box. */\n dialogClassName?: string;\n}\n\n/**\n * The kit's preferences dialog: `Dialog` + `PrefsForm`. Changes apply\n * live through `onChange` — there is no OK/Cancel staging. For custom\n * placement (sidebar, popover, inline page), compose `PrefsForm`\n * directly; this wrapper is intentionally thin.\n *\n * `layout=\"rail\"` is what a dialog usually wants: the default columns wrap\n * sideways past two groups, and this box is 900px at its widest.\n */\nexport function PrefsDialog(props: PrefsDialogProps) {\n const { isOpen, onOpenChange, title, headerExtra, footer, dialogClassName, ...form } = props;\n const rail = form.layout === 'rail';\n return (\n <Dialog\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n aria-label={typeof title === 'string' ? title : form.schema.name}\n className={dialogClassName}\n footer={footer}\n bodyClassName={rail ? s.railBody : undefined}\n title={\n headerExtra !== undefined ? (\n <span className={s.titleRow}>\n <span>{title ?? form.schema.name}</span>\n {headerExtra}\n </span>\n ) : (\n title ?? form.schema.name\n )\n }\n >\n <PrefsForm {...form} />\n </Dialog>\n );\n}\n"],"mappings":"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"}