@techfides/ui-library-design 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/assets/brands/digital-boost-group.svg +1 -0
  4. package/assets/brands/rtsg.svg +1 -0
  5. package/assets/brands/tech-it-out.svg +1 -0
  6. package/assets/brands/techfides.svg +1 -0
  7. package/css/index.css +8 -0
  8. package/css/theme.css +1640 -0
  9. package/dist/brands.d.ts +39 -0
  10. package/dist/brands.js +41 -0
  11. package/dist/brands.js.map +1 -0
  12. package/dist/charts/animation.js +14 -0
  13. package/dist/charts/animation.js.map +1 -0
  14. package/dist/charts/bars.d.ts +22 -0
  15. package/dist/charts/bars.js +61 -0
  16. package/dist/charts/bars.js.map +1 -0
  17. package/dist/charts/groupedBars.d.ts +20 -0
  18. package/dist/charts/groupedBars.js +82 -0
  19. package/dist/charts/groupedBars.js.map +1 -0
  20. package/dist/charts/paint.js +19 -0
  21. package/dist/charts/paint.js.map +1 -0
  22. package/dist/charts/spark.d.ts +17 -0
  23. package/dist/charts/spark.js +159 -0
  24. package/dist/charts/spark.js.map +1 -0
  25. package/dist/charts/tooltip.js +41 -0
  26. package/dist/charts/tooltip.js.map +1 -0
  27. package/dist/cn.d.ts +6 -0
  28. package/dist/cn.js +178 -0
  29. package/dist/cn.js.map +1 -0
  30. package/dist/control.d.ts +15 -0
  31. package/dist/control.js +13 -0
  32. package/dist/control.js.map +1 -0
  33. package/dist/index.d.ts +65 -0
  34. package/dist/index.js +65 -0
  35. package/dist/mark.d.ts +7 -0
  36. package/dist/mark.js +11 -0
  37. package/dist/mark.js.map +1 -0
  38. package/dist/parts/control.js +55 -0
  39. package/dist/parts/control.js.map +1 -0
  40. package/dist/parts/eyebrow.js +8 -0
  41. package/dist/parts/eyebrow.js.map +1 -0
  42. package/dist/parts/mark.js +52 -0
  43. package/dist/parts/mark.js.map +1 -0
  44. package/dist/parts/reveal.js +35 -0
  45. package/dist/parts/reveal.js.map +1 -0
  46. package/dist/parts/rouse.js +25 -0
  47. package/dist/parts/rouse.js.map +1 -0
  48. package/dist/parts/rule.js +12 -0
  49. package/dist/parts/rule.js.map +1 -0
  50. package/dist/parts/scroll.js +10 -0
  51. package/dist/parts/scroll.js.map +1 -0
  52. package/dist/parts/shell.js +23 -0
  53. package/dist/parts/shell.js.map +1 -0
  54. package/dist/parts/surface.js +15 -0
  55. package/dist/parts/surface.js.map +1 -0
  56. package/dist/parts/tone.js +13 -0
  57. package/dist/parts/tone.js.map +1 -0
  58. package/dist/parts/travel.js +11 -0
  59. package/dist/parts/travel.js.map +1 -0
  60. package/dist/recipes/accordion.d.ts +13 -0
  61. package/dist/recipes/accordion.js +42 -0
  62. package/dist/recipes/accordion.js.map +1 -0
  63. package/dist/recipes/alert.d.ts +16 -0
  64. package/dist/recipes/alert.js +21 -0
  65. package/dist/recipes/alert.js.map +1 -0
  66. package/dist/recipes/band.d.ts +8 -0
  67. package/dist/recipes/band.js +22 -0
  68. package/dist/recipes/band.js.map +1 -0
  69. package/dist/recipes/bars.d.ts +17 -0
  70. package/dist/recipes/bars.js +27 -0
  71. package/dist/recipes/bars.js.map +1 -0
  72. package/dist/recipes/brandMark.d.ts +5 -0
  73. package/dist/recipes/brandMark.js +7 -0
  74. package/dist/recipes/brandMark.js.map +1 -0
  75. package/dist/recipes/button.d.ts +23 -0
  76. package/dist/recipes/button.js +229 -0
  77. package/dist/recipes/button.js.map +1 -0
  78. package/dist/recipes/cardHeader.d.ts +10 -0
  79. package/dist/recipes/cardHeader.js +11 -0
  80. package/dist/recipes/cardHeader.js.map +1 -0
  81. package/dist/recipes/checkbox.d.ts +26 -0
  82. package/dist/recipes/checkbox.js +103 -0
  83. package/dist/recipes/checkbox.js.map +1 -0
  84. package/dist/recipes/chip.d.ts +26 -0
  85. package/dist/recipes/chip.js +123 -0
  86. package/dist/recipes/chip.js.map +1 -0
  87. package/dist/recipes/codeEditor.d.ts +74 -0
  88. package/dist/recipes/codeEditor.js +71 -0
  89. package/dist/recipes/codeEditor.js.map +1 -0
  90. package/dist/recipes/datePicker.d.ts +39 -0
  91. package/dist/recipes/datePicker.js +166 -0
  92. package/dist/recipes/datePicker.js.map +1 -0
  93. package/dist/recipes/dialog.d.ts +37 -0
  94. package/dist/recipes/dialog.js +116 -0
  95. package/dist/recipes/dialog.js.map +1 -0
  96. package/dist/recipes/feature.d.ts +15 -0
  97. package/dist/recipes/feature.js +48 -0
  98. package/dist/recipes/feature.js.map +1 -0
  99. package/dist/recipes/field.d.ts +26 -0
  100. package/dist/recipes/field.js +129 -0
  101. package/dist/recipes/field.js.map +1 -0
  102. package/dist/recipes/findings.d.ts +11 -0
  103. package/dist/recipes/findings.js +16 -0
  104. package/dist/recipes/findings.js.map +1 -0
  105. package/dist/recipes/heading.d.ts +17 -0
  106. package/dist/recipes/heading.js +37 -0
  107. package/dist/recipes/heading.js.map +1 -0
  108. package/dist/recipes/heartbeat.d.ts +23 -0
  109. package/dist/recipes/heartbeat.js +43 -0
  110. package/dist/recipes/heartbeat.js.map +1 -0
  111. package/dist/recipes/input.d.ts +17 -0
  112. package/dist/recipes/input.js +90 -0
  113. package/dist/recipes/input.js.map +1 -0
  114. package/dist/recipes/listItem.d.ts +6 -0
  115. package/dist/recipes/listItem.js +8 -0
  116. package/dist/recipes/listItem.js.map +1 -0
  117. package/dist/recipes/listbox.d.ts +12 -0
  118. package/dist/recipes/listbox.js +29 -0
  119. package/dist/recipes/listbox.js.map +1 -0
  120. package/dist/recipes/marquee.d.ts +19 -0
  121. package/dist/recipes/marquee.js +36 -0
  122. package/dist/recipes/marquee.js.map +1 -0
  123. package/dist/recipes/menu.d.ts +26 -0
  124. package/dist/recipes/menu.js +86 -0
  125. package/dist/recipes/menu.js.map +1 -0
  126. package/dist/recipes/metaRow.d.ts +14 -0
  127. package/dist/recipes/metaRow.js +19 -0
  128. package/dist/recipes/metaRow.js.map +1 -0
  129. package/dist/recipes/meter.d.ts +23 -0
  130. package/dist/recipes/meter.js +39 -0
  131. package/dist/recipes/meter.js.map +1 -0
  132. package/dist/recipes/motion.d.ts +6 -0
  133. package/dist/recipes/motion.js +34 -0
  134. package/dist/recipes/motion.js.map +1 -0
  135. package/dist/recipes/nebula.d.ts +9 -0
  136. package/dist/recipes/nebula.js +15 -0
  137. package/dist/recipes/nebula.js.map +1 -0
  138. package/dist/recipes/numberRange.d.ts +15 -0
  139. package/dist/recipes/numberRange.js +109 -0
  140. package/dist/recipes/numberRange.js.map +1 -0
  141. package/dist/recipes/paper.d.ts +22 -0
  142. package/dist/recipes/paper.js +42 -0
  143. package/dist/recipes/paper.js.map +1 -0
  144. package/dist/recipes/progressBar.d.ts +7 -0
  145. package/dist/recipes/progressBar.js +11 -0
  146. package/dist/recipes/progressBar.js.map +1 -0
  147. package/dist/recipes/queue.d.ts +16 -0
  148. package/dist/recipes/queue.js +27 -0
  149. package/dist/recipes/queue.js.map +1 -0
  150. package/dist/recipes/radioGroup.d.ts +27 -0
  151. package/dist/recipes/radioGroup.js +68 -0
  152. package/dist/recipes/radioGroup.js.map +1 -0
  153. package/dist/recipes/scopeSwitcher.d.ts +26 -0
  154. package/dist/recipes/scopeSwitcher.js +80 -0
  155. package/dist/recipes/scopeSwitcher.js.map +1 -0
  156. package/dist/recipes/scrollArea.d.ts +19 -0
  157. package/dist/recipes/scrollArea.js +43 -0
  158. package/dist/recipes/scrollArea.js.map +1 -0
  159. package/dist/recipes/searchPalette.d.ts +19 -0
  160. package/dist/recipes/searchPalette.js +63 -0
  161. package/dist/recipes/searchPalette.js.map +1 -0
  162. package/dist/recipes/sectionHeader.d.ts +9 -0
  163. package/dist/recipes/sectionHeader.js +10 -0
  164. package/dist/recipes/sectionHeader.js.map +1 -0
  165. package/dist/recipes/segmentedControl.d.ts +9 -0
  166. package/dist/recipes/segmentedControl.js +29 -0
  167. package/dist/recipes/segmentedControl.js.map +1 -0
  168. package/dist/recipes/select.d.ts +9 -0
  169. package/dist/recipes/select.js +21 -0
  170. package/dist/recipes/select.js.map +1 -0
  171. package/dist/recipes/separator.d.ts +14 -0
  172. package/dist/recipes/separator.js +59 -0
  173. package/dist/recipes/separator.js.map +1 -0
  174. package/dist/recipes/sidebar.d.ts +40 -0
  175. package/dist/recipes/sidebar.js +128 -0
  176. package/dist/recipes/sidebar.js.map +1 -0
  177. package/dist/recipes/sky.d.ts +20 -0
  178. package/dist/recipes/sky.js +127 -0
  179. package/dist/recipes/sky.js.map +1 -0
  180. package/dist/recipes/slider.d.ts +20 -0
  181. package/dist/recipes/slider.js +62 -0
  182. package/dist/recipes/slider.js.map +1 -0
  183. package/dist/recipes/stat.d.ts +30 -0
  184. package/dist/recipes/stat.js +52 -0
  185. package/dist/recipes/stat.js.map +1 -0
  186. package/dist/recipes/switch.d.ts +20 -0
  187. package/dist/recipes/switch.js +60 -0
  188. package/dist/recipes/switch.js.map +1 -0
  189. package/dist/recipes/table.d.ts +74 -0
  190. package/dist/recipes/table.js +182 -0
  191. package/dist/recipes/table.js.map +1 -0
  192. package/dist/recipes/tableFilter.d.ts +14 -0
  193. package/dist/recipes/tableFilter.js +28 -0
  194. package/dist/recipes/tableFilter.js.map +1 -0
  195. package/dist/recipes/tablePaging.d.ts +15 -0
  196. package/dist/recipes/tablePaging.js +50 -0
  197. package/dist/recipes/tablePaging.js.map +1 -0
  198. package/dist/recipes/tail.d.ts +20 -0
  199. package/dist/recipes/tail.js +48 -0
  200. package/dist/recipes/tail.js.map +1 -0
  201. package/dist/recipes/text.d.ts +25 -0
  202. package/dist/recipes/text.js +94 -0
  203. package/dist/recipes/text.js.map +1 -0
  204. package/dist/recipes/textarea.d.ts +13 -0
  205. package/dist/recipes/textarea.js +48 -0
  206. package/dist/recipes/textarea.js.map +1 -0
  207. package/dist/recipes/tile.d.ts +18 -0
  208. package/dist/recipes/tile.js +85 -0
  209. package/dist/recipes/tile.js.map +1 -0
  210. package/dist/recipes/tooltip.d.ts +12 -0
  211. package/dist/recipes/tooltip.js +26 -0
  212. package/dist/recipes/tooltip.js.map +1 -0
  213. package/dist/recipes/topBar.d.ts +15 -0
  214. package/dist/recipes/topBar.js +35 -0
  215. package/dist/recipes/topBar.js.map +1 -0
  216. package/dist/recipes/trail.d.ts +27 -0
  217. package/dist/recipes/trail.js +66 -0
  218. package/dist/recipes/trail.js.map +1 -0
  219. package/dist/recipes/userMenu.d.ts +11 -0
  220. package/dist/recipes/userMenu.js +38 -0
  221. package/dist/recipes/userMenu.js.map +1 -0
  222. package/dist/tally.d.ts +17 -0
  223. package/dist/tally.js +75 -0
  224. package/dist/tally.js.map +1 -0
  225. package/dist/tone.d.ts +26 -0
  226. package/dist/tone.js +26 -0
  227. package/dist/tone.js.map +1 -0
  228. package/dist/words.d.ts +116 -0
  229. package/dist/words.js +93 -0
  230. package/dist/words.js.map +1 -0
  231. package/package.json +72 -0
@@ -0,0 +1,13 @@
1
+ //#region src/recipes/textarea.d.ts
2
+ type TextareaReach = 'clear' | 'near' | 'full';
3
+ declare const textareaShellRecipe: (props?: ({
4
+ invalid?: boolean | null | undefined;
5
+ loading?: boolean | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ declare const textareaRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
8
+ declare const textareaCountRecipe: (props?: ({
9
+ reach?: "clear" | "near" | "full" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ //#endregion
12
+ export { type TextareaReach, textareaCountRecipe, textareaRecipe, textareaShellRecipe };
13
+ //# sourceMappingURL=textarea.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { controlBase, controlInert } from "../parts/control.js";
2
+ import { controlFailed, controlHealthy, controlShell } from "../parts/shell.js";
3
+ import { cva } from "class-variance-authority";
4
+ //#region src/recipes/textarea.ts
5
+ const shellSurface = [
6
+ "relative isolate w-full flex-col",
7
+ "rounded-tf-control font-tf-body",
8
+ ...controlShell(["reached:[&_textarea]:placeholder:opacity-100", "reached:[&_textarea]:placeholder:delay-(--tf-duration-1)"], "asleep:**:data-[part=label]:translate-y-2.5")
9
+ ];
10
+ const PENDING = ["tf-edge-lit tf-pulsing tf-clouding", "**:data-[part=nebula]:tf-cloud-breathing"].join(" ");
11
+ const textareaShellRecipe = cva([...controlBase, ...shellSurface], {
12
+ defaultVariants: {
13
+ invalid: false,
14
+ loading: false
15
+ },
16
+ variants: {
17
+ invalid: {
18
+ false: controlHealthy,
19
+ true: controlFailed
20
+ },
21
+ loading: {
22
+ false: "",
23
+ true: PENDING
24
+ }
25
+ }
26
+ });
27
+ const textareaRecipe = cva([
28
+ "max-h-59 min-h-29 w-full resize-none",
29
+ "tf-writes bg-transparent px-4 pt-6 pb-5",
30
+ "tf-scroll-faded [--tf-fade-foot:calc(var(--spacing)*5)] [--tf-fade-head:calc(var(--spacing)*6)]",
31
+ "text-tf-body text-tf-fg",
32
+ "placeholder:text-tf-muted placeholder:opacity-0",
33
+ "data-readonly:text-tf-muted",
34
+ "tf-scroll-thin outline-hidden",
35
+ ...controlInert
36
+ ]);
37
+ const textareaCountRecipe = cva(["flex-none pt-2 font-mono text-tf-caption-sm tabular-nums", "tf-transition motion-reduce:transition-none"], {
38
+ defaultVariants: { reach: "clear" },
39
+ variants: { reach: {
40
+ clear: "text-tf-muted",
41
+ full: "text-tf-danger-hi",
42
+ near: "text-tf-warning-hi"
43
+ } }
44
+ });
45
+ //#endregion
46
+ export { textareaCountRecipe, textareaRecipe, textareaShellRecipe };
47
+
48
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.js","names":[],"sources":["../../src/recipes/textarea.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { controlBase, controlInert } from '#parts/control'\nimport { controlFailed, controlHealthy, controlShell } from '#parts/shell'\n\ntype TextareaReach = 'clear' | 'near' | 'full'\n\nconst TEXTAREA_WAKES = [\n 'reached:[&_textarea]:placeholder:opacity-100',\n 'reached:[&_textarea]:placeholder:delay-(--tf-duration-1)',\n]\n\nconst LABEL_RESTS_BY_THE_FIRST_LINE = 'asleep:**:data-[part=label]:translate-y-2.5'\n\nconst shellSurface = [\n 'relative isolate w-full flex-col',\n 'rounded-tf-control font-tf-body',\n ...controlShell(TEXTAREA_WAKES, LABEL_RESTS_BY_THE_FIRST_LINE),\n]\n\nconst PENDING = [\n 'tf-edge-lit tf-pulsing tf-clouding',\n '**:data-[part=nebula]:tf-cloud-breathing',\n].join(' ')\n\nconst textareaShellRecipe = cva([...controlBase, ...shellSurface], {\n defaultVariants: { invalid: false, loading: false },\n variants: {\n invalid: { false: controlHealthy, true: controlFailed },\n loading: { false: '', true: PENDING },\n },\n})\n\nconst textareaRecipe = cva([\n 'max-h-59 min-h-29 w-full resize-none',\n 'tf-writes bg-transparent px-4 pt-6 pb-5',\n 'tf-scroll-faded [--tf-fade-foot:calc(var(--spacing)*5)] [--tf-fade-head:calc(var(--spacing)*6)]',\n 'text-tf-body text-tf-fg',\n 'placeholder:text-tf-muted placeholder:opacity-0',\n 'data-readonly:text-tf-muted',\n 'tf-scroll-thin outline-hidden',\n ...controlInert,\n])\n\nconst textareaCountRecipe = cva(\n [\n 'flex-none pt-2 font-mono text-tf-caption-sm tabular-nums',\n 'tf-transition motion-reduce:transition-none',\n ],\n {\n defaultVariants: { reach: 'clear' },\n variants: {\n reach: {\n clear: 'text-tf-muted',\n full: 'text-tf-danger-hi',\n near: 'text-tf-warning-hi',\n } satisfies Record<TextareaReach, string>,\n },\n },\n)\n\nexport { type TextareaReach, textareaCountRecipe, textareaRecipe, textareaShellRecipe }\n"],"mappings":";;;;AAcA,MAAM,eAAe;CACnB;CACA;CACA,GAAG,aAAa,CAThB,gDACA,0DAQ6B,GAAG,6CAA6B;AAC/D;AAEA,MAAM,UAAU,CACd,sCACA,0CACF,CAAC,CAAC,KAAK,GAAG;AAEV,MAAM,sBAAsB,IAAI,CAAC,GAAG,aAAa,GAAG,YAAY,GAAG;CACjE,iBAAiB;EAAE,SAAS;EAAO,SAAS;CAAM;CAClD,UAAU;EACR,SAAS;GAAE,OAAO;GAAgB,MAAM;EAAc;EACtD,SAAS;GAAE,OAAO;GAAI,MAAM;EAAQ;CACtC;AACF,CAAC;AAED,MAAM,iBAAiB,IAAI;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG;AACL,CAAC;AAED,MAAM,sBAAsB,IAC1B,CACE,4DACA,6CACF,GACA;CACE,iBAAiB,EAAE,OAAO,QAAQ;CAClC,UAAU,EACR,OAAO;EACL,OAAO;EACP,MAAM;EACN,MAAM;CACR,EACF;AACF,CACF"}
@@ -0,0 +1,18 @@
1
+ //#region src/recipes/tile.d.ts
2
+ declare const tileTones: readonly ["accent", "success", "warning", "info", "danger"];
3
+ type TileTone = (typeof tileTones)[number];
4
+ declare const defaultTileTone = "accent";
5
+ declare const tileRests: readonly ["lit", "quiet", "filled"];
6
+ type TileRest = (typeof tileRests)[number];
7
+ declare const defaultTileRest = "lit";
8
+ declare const tileRecipe: (props?: ({
9
+ rest?: "quiet" | "filled" | "lit" | null | undefined;
10
+ tone?: "accent" | "success" | "warning" | "info" | "danger" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ declare const tileGlyphRecipe: (props?: ({
13
+ rest?: "quiet" | "filled" | "lit" | null | undefined;
14
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
15
+ declare const tileCloudRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
16
+ //#endregion
17
+ export { type TileRest, type TileTone, defaultTileRest, defaultTileTone, tileCloudRecipe, tileGlyphRecipe, tileRecipe, tileRests, tileTones };
18
+ //# sourceMappingURL=tile.d.ts.map
@@ -0,0 +1,85 @@
1
+ import { cva } from "class-variance-authority";
2
+ //#region src/recipes/tile.ts
3
+ const tileTones = [
4
+ "accent",
5
+ "success",
6
+ "warning",
7
+ "info",
8
+ "danger"
9
+ ];
10
+ const defaultTileTone = "accent";
11
+ const tileRests = [
12
+ "lit",
13
+ "quiet",
14
+ "filled"
15
+ ];
16
+ const defaultTileRest = "lit";
17
+ const BLEND = {
18
+ accent: "blend-tf-accent",
19
+ danger: "blend-tf-danger",
20
+ info: "blend-tf-info",
21
+ success: "blend-tf-success",
22
+ warning: "blend-tf-warning"
23
+ };
24
+ const INK = {
25
+ accent: "text-tf-accent-hi",
26
+ danger: "text-tf-danger-hi",
27
+ info: "text-tf-info-hi",
28
+ success: "text-tf-success-hi",
29
+ warning: "text-tf-warning-hi"
30
+ };
31
+ const FILLED_INK = {
32
+ accent: "text-tf-on-accent",
33
+ danger: "text-tf-on-semantic",
34
+ info: "text-tf-on-semantic",
35
+ success: "text-tf-on-semantic",
36
+ warning: "text-tf-on-semantic"
37
+ };
38
+ const LIT = "tf-edge-sweep tf-swept tf-inner-lit tf-glass-plate stroke-tf-ink tf-icons-solo";
39
+ const QUIET = ["bg-tf-panel-hi tf-ramp tf-cloud-brand tf-cloud-hidden", "text-tf-fg tf-blend-drift tf-icons"].join(" ");
40
+ const FILLED = ["bg-tf-blend tf-cloud-brand tf-clouded tf-blend-drift", "tf-edge-sweep tf-swept tf-inner-lit tf-icons-solo"].join(" ");
41
+ const tileRecipe = cva([
42
+ "relative isolate flex size-tf-control-lg shrink-0 items-center justify-center",
43
+ "rounded-tf-card",
44
+ "tf-transition motion-reduce:transition-none",
45
+ "[&_svg]:size-tf-icon-solo-lg [&_svg]:shrink-0"
46
+ ], {
47
+ compoundVariants: [...tileTones.map((tone) => ({
48
+ class: INK[tone],
49
+ rest: "lit",
50
+ tone
51
+ })), ...tileTones.map((tone) => ({
52
+ class: FILLED_INK[tone],
53
+ rest: "filled",
54
+ tone
55
+ }))],
56
+ defaultVariants: {
57
+ rest: "lit",
58
+ tone: defaultTileTone
59
+ },
60
+ variants: {
61
+ rest: {
62
+ filled: FILLED,
63
+ lit: LIT,
64
+ quiet: QUIET
65
+ },
66
+ tone: BLEND
67
+ }
68
+ });
69
+ const tileGlyphRecipe = cva([
70
+ "inline-flex items-center justify-center",
71
+ "[&_svg]:size-tf-icon-solo-lg [&_svg]:shrink-0",
72
+ "tf-moves-spring tf-transition motion-reduce:transition-none"
73
+ ], {
74
+ defaultVariants: { rest: "lit" },
75
+ variants: { rest: {
76
+ filled: "motion-safe:tf-pops",
77
+ lit: "motion-safe:tf-pops",
78
+ quiet: ""
79
+ } }
80
+ });
81
+ const tileCloudRecipe = cva("tf-nebula-cloud tf-cloud-tight");
82
+ //#endregion
83
+ export { defaultTileRest, defaultTileTone, tileCloudRecipe, tileGlyphRecipe, tileRecipe, tileRests, tileTones };
84
+
85
+ //# sourceMappingURL=tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tile.js","names":[],"sources":["../../src/recipes/tile.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nconst tileTones = ['accent', 'success', 'warning', 'info', 'danger'] as const\n\ntype TileTone = (typeof tileTones)[number]\n\nconst defaultTileTone = 'accent' satisfies TileTone\n\nconst tileRests = ['lit', 'quiet', 'filled'] as const\n\ntype TileRest = (typeof tileRests)[number]\n\nconst defaultTileRest = 'lit' satisfies TileRest\n\nconst BLEND = {\n accent: 'blend-tf-accent',\n danger: 'blend-tf-danger',\n info: 'blend-tf-info',\n success: 'blend-tf-success',\n warning: 'blend-tf-warning',\n} satisfies Record<TileTone, string>\n\nconst INK = {\n accent: 'text-tf-accent-hi',\n danger: 'text-tf-danger-hi',\n info: 'text-tf-info-hi',\n success: 'text-tf-success-hi',\n warning: 'text-tf-warning-hi',\n} satisfies Record<TileTone, string>\n\nconst FILLED_INK = {\n accent: 'text-tf-on-accent',\n danger: 'text-tf-on-semantic',\n info: 'text-tf-on-semantic',\n success: 'text-tf-on-semantic',\n warning: 'text-tf-on-semantic',\n} satisfies Record<TileTone, string>\n\nconst LIT = 'tf-edge-sweep tf-swept tf-inner-lit tf-glass-plate stroke-tf-ink tf-icons-solo'\n\nconst QUIET = [\n 'bg-tf-panel-hi tf-ramp tf-cloud-brand tf-cloud-hidden',\n 'text-tf-fg tf-blend-drift tf-icons',\n].join(' ')\n\nconst FILLED = [\n 'bg-tf-blend tf-cloud-brand tf-clouded tf-blend-drift',\n 'tf-edge-sweep tf-swept tf-inner-lit tf-icons-solo',\n].join(' ')\n\nconst tileRecipe = cva(\n [\n 'relative isolate flex size-tf-control-lg shrink-0 items-center justify-center',\n 'rounded-tf-card',\n 'tf-transition motion-reduce:transition-none',\n '[&_svg]:size-tf-icon-solo-lg [&_svg]:shrink-0',\n ],\n {\n compoundVariants: [\n ...tileTones.map((tone) => ({ class: INK[tone], rest: 'lit' as const, tone })),\n ...tileTones.map((tone) => ({ class: FILLED_INK[tone], rest: 'filled' as const, tone })),\n ],\n defaultVariants: { rest: defaultTileRest, tone: defaultTileTone },\n variants: {\n rest: { filled: FILLED, lit: LIT, quiet: QUIET } satisfies Record<TileRest, string>,\n tone: BLEND,\n },\n },\n)\n\nconst tileGlyphRecipe = cva(\n [\n 'inline-flex items-center justify-center',\n '[&_svg]:size-tf-icon-solo-lg [&_svg]:shrink-0',\n 'tf-moves-spring tf-transition motion-reduce:transition-none',\n ],\n {\n defaultVariants: { rest: defaultTileRest },\n variants: {\n rest: {\n filled: 'motion-safe:tf-pops',\n lit: 'motion-safe:tf-pops',\n quiet: '',\n } satisfies Record<TileRest, string>,\n },\n },\n)\n\nconst tileCloudRecipe = cva('tf-nebula-cloud tf-cloud-tight')\n\nexport {\n type TileRest,\n type TileTone,\n defaultTileRest,\n defaultTileTone,\n tileCloudRecipe,\n tileGlyphRecipe,\n tileRecipe,\n tileRests,\n tileTones,\n}\n"],"mappings":";;AAEA,MAAM,YAAY;CAAC;CAAU;CAAW;CAAW;CAAQ;AAAQ;AAInE,MAAM,kBAAkB;AAExB,MAAM,YAAY;CAAC;CAAO;CAAS;AAAQ;AAI3C,MAAM,kBAAkB;AAExB,MAAM,QAAQ;CACZ,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;AACX;AAEA,MAAM,MAAM;CACV,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;AACX;AAEA,MAAM,aAAa;CACjB,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;AACX;AAEA,MAAM,MAAM;AAEZ,MAAM,QAAQ,CACZ,yDACA,oCACF,CAAC,CAAC,KAAK,GAAG;AAEV,MAAM,SAAS,CACb,wDACA,mDACF,CAAC,CAAC,KAAK,GAAG;AAEV,MAAM,aAAa,IACjB;CACE;CACA;CACA;CACA;AACF,GACA;CACE,kBAAkB,CAChB,GAAG,UAAU,KAAK,UAAU;EAAE,OAAO,IAAI;EAAO,MAAM;EAAgB;CAAK,EAAE,GAC7E,GAAG,UAAU,KAAK,UAAU;EAAE,OAAO,WAAW;EAAO,MAAM;EAAmB;CAAK,EAAE,CACzF;CACA,iBAAiB;EAAE,MAAA;EAAuB,MAAM;CAAgB;CAChE,UAAU;EACR,MAAM;GAAE,QAAQ;GAAQ,KAAK;GAAK,OAAO;EAAM;EAC/C,MAAM;CACR;AACF,CACF;AAEA,MAAM,kBAAkB,IACtB;CACE;CACA;CACA;AACF,GACA;CACE,iBAAiB,EAAE,MAAA,MAAsB;CACzC,UAAU,EACR,MAAM;EACJ,QAAQ;EACR,KAAK;EACL,OAAO;CACT,EACF;AACF,CACF;AAEA,MAAM,kBAAkB,IAAI,gCAAgC"}
@@ -0,0 +1,12 @@
1
+ //#region src/recipes/tooltip.d.ts
2
+ type TooltipPlacement = 'top' | 'right' | 'bottom' | 'left';
3
+ declare const defaultTooltipPlacement = "right";
4
+ declare const tooltipOpenToken = "--tf-duration-2";
5
+ declare const tooltipCloseToken = "--tf-duration-1";
6
+ declare const tooltipPlacements: readonly ["top", "right", "bottom", "left"];
7
+ declare const tooltipRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
8
+ declare const tooltipArrowRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
9
+ declare const tooltipArrowTipRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
10
+ //#endregion
11
+ export { type TooltipPlacement, defaultTooltipPlacement, tooltipArrowRecipe, tooltipArrowTipRecipe, tooltipCloseToken, tooltipOpenToken, tooltipPlacements, tooltipRecipe };
12
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1,26 @@
1
+ import { arrivalMotion } from "./motion.js";
2
+ import { cva } from "class-variance-authority";
3
+ //#region src/recipes/tooltip.ts
4
+ const defaultTooltipPlacement = "right";
5
+ const tooltipOpenToken = "--tf-duration-2";
6
+ const tooltipCloseToken = "--tf-duration-1";
7
+ const tooltipPlacements = [
8
+ "top",
9
+ "right",
10
+ "bottom",
11
+ "left"
12
+ ];
13
+ const tooltipRecipe = cva([
14
+ "z-tf-tooltip max-w-tf-panel rounded-tf-inline px-1.5 py-0.75",
15
+ "bg-tf-glass shadow-tf-float backdrop-blur-tf-glass",
16
+ "tf-edge-sweep tf-edge-plain",
17
+ "font-tf-body text-tf-caption-sm text-tf-fg",
18
+ ...arrivalMotion,
19
+ "motion-reduce:animate-none"
20
+ ]);
21
+ const tooltipArrowRecipe = cva(["[--arrow-size:0.5rem]", "[--arrow-background:var(--tf-glass-flat)]"]);
22
+ const tooltipArrowTipRecipe = cva("border-t border-l border-tf-line");
23
+ //#endregion
24
+ export { defaultTooltipPlacement, tooltipArrowRecipe, tooltipArrowTipRecipe, tooltipCloseToken, tooltipOpenToken, tooltipPlacements, tooltipRecipe };
25
+
26
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.js","names":[],"sources":["../../src/recipes/tooltip.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { arrivalMotion } from './motion'\n\ntype TooltipPlacement = 'top' | 'right' | 'bottom' | 'left'\n\nconst defaultTooltipPlacement = 'right' satisfies TooltipPlacement\n\nconst tooltipOpenToken = '--tf-duration-2'\n\nconst tooltipCloseToken = '--tf-duration-1'\n\nconst tooltipPlacements = [\n 'top',\n 'right',\n 'bottom',\n 'left',\n] as const satisfies readonly TooltipPlacement[]\n\nconst tooltipRecipe = cva([\n 'z-tf-tooltip max-w-tf-panel rounded-tf-inline px-1.5 py-0.75',\n 'bg-tf-glass shadow-tf-float backdrop-blur-tf-glass',\n 'tf-edge-sweep tf-edge-plain',\n 'font-tf-body text-tf-caption-sm text-tf-fg',\n ...arrivalMotion,\n 'motion-reduce:animate-none',\n])\n\nconst tooltipArrowRecipe = cva([\n '[--arrow-size:0.5rem]',\n '[--arrow-background:var(--tf-glass-flat)]',\n])\n\nconst tooltipArrowTipRecipe = cva('border-t border-l border-tf-line')\n\nexport {\n type TooltipPlacement,\n defaultTooltipPlacement,\n tooltipCloseToken,\n tooltipOpenToken,\n tooltipArrowRecipe,\n tooltipArrowTipRecipe,\n tooltipPlacements,\n tooltipRecipe,\n}\n"],"mappings":";;;AAMA,MAAM,0BAA0B;AAEhC,MAAM,mBAAmB;AAEzB,MAAM,oBAAoB;AAE1B,MAAM,oBAAoB;CACxB;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAAgB,IAAI;CACxB;CACA;CACA;CACA;CACA,GAAG;CACH;AACF,CAAC;AAED,MAAM,qBAAqB,IAAI,CAC7B,yBACA,2CACF,CAAC;AAED,MAAM,wBAAwB,IAAI,kCAAkC"}
@@ -0,0 +1,15 @@
1
+ //#region src/recipes/topBar.d.ts
2
+ declare const topBarRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
3
+ declare const topBarContentRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
4
+ declare const topBarEdgeRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
5
+ declare const topBarRuleRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
6
+ declare const topBarHeadingsRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
7
+ declare const topBarEyebrowRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
8
+ declare const topBarTitleRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
9
+ declare const topBarActionsRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
10
+ declare const topBarLevels: readonly ["h1", "h2", "h3", "h4", "h5", "h6"];
11
+ type TopBarLevel = (typeof topBarLevels)[number];
12
+ declare const defaultTopBarLevel = "h1";
13
+ //#endregion
14
+ export { type TopBarLevel, defaultTopBarLevel, topBarActionsRecipe, topBarContentRecipe, topBarEdgeRecipe, topBarEyebrowRecipe, topBarHeadingsRecipe, topBarLevels, topBarRecipe, topBarRuleRecipe, topBarTitleRecipe };
15
+ //# sourceMappingURL=topBar.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { ruleFading } from "../parts/rule.js";
2
+ import { eyebrowLead } from "../parts/eyebrow.js";
3
+ import { cva } from "class-variance-authority";
4
+ //#region src/recipes/topBar.ts
5
+ const topBarRecipe = cva([
6
+ "sticky top-0 isolate z-tf-raised w-full",
7
+ "bg-tf-panel-2 backdrop-blur-tf-panel",
8
+ "tf-icons font-tf-body text-tf-fg",
9
+ "tf-transition motion-reduce:transition-none",
10
+ "data-lifted:shadow-tf-float"
11
+ ]);
12
+ const topBarContentRecipe = cva(["mx-auto flex w-full max-w-tf-canvas flex-wrap items-center gap-4 px-6 py-4 sm:px-12", "min-h-[calc(var(--spacing-tf-control-lg)+var(--spacing)*8)]"]);
13
+ const topBarEdgeRecipe = cva("-mb-px block h-px w-full");
14
+ const topBarRuleRecipe = cva([
15
+ `absolute inset-x-0 bottom-0 ${ruleFading}`,
16
+ "opacity-0 tf-transition motion-reduce:transition-none",
17
+ "in-data-lifted:opacity-100"
18
+ ]);
19
+ const topBarHeadingsRecipe = cva("flex min-w-0 flex-1 flex-col gap-1");
20
+ const topBarEyebrowRecipe = cva(eyebrowLead);
21
+ const topBarTitleRecipe = cva("truncate font-tf-display text-tf-h3 font-bold tracking-tf-tight text-tf-fg");
22
+ const topBarActionsRecipe = cva("flex flex-wrap items-center gap-4");
23
+ const topBarLevels = [
24
+ "h1",
25
+ "h2",
26
+ "h3",
27
+ "h4",
28
+ "h5",
29
+ "h6"
30
+ ];
31
+ const defaultTopBarLevel = "h1";
32
+ //#endregion
33
+ export { defaultTopBarLevel, topBarActionsRecipe, topBarContentRecipe, topBarEdgeRecipe, topBarEyebrowRecipe, topBarHeadingsRecipe, topBarLevels, topBarRecipe, topBarRuleRecipe, topBarTitleRecipe };
34
+
35
+ //# sourceMappingURL=topBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topBar.js","names":[],"sources":["../../src/recipes/topBar.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { eyebrowLead } from '#parts/eyebrow'\nimport { ruleFading } from '#parts/rule'\n\nconst topBarRecipe = cva([\n 'sticky top-0 isolate z-tf-raised w-full',\n 'bg-tf-panel-2 backdrop-blur-tf-panel',\n 'tf-icons font-tf-body text-tf-fg',\n 'tf-transition motion-reduce:transition-none',\n 'data-lifted:shadow-tf-float',\n])\n\nconst topBarContentRecipe = cva([\n 'mx-auto flex w-full max-w-tf-canvas flex-wrap items-center gap-4 px-6 py-4 sm:px-12',\n 'min-h-[calc(var(--spacing-tf-control-lg)+var(--spacing)*8)]',\n])\n\nconst topBarEdgeRecipe = cva('-mb-px block h-px w-full')\n\nconst topBarRuleRecipe = cva([\n `absolute inset-x-0 bottom-0 ${ruleFading}`,\n 'opacity-0 tf-transition motion-reduce:transition-none',\n 'in-data-lifted:opacity-100',\n])\n\nconst topBarHeadingsRecipe = cva('flex min-w-0 flex-1 flex-col gap-1')\n\nconst topBarEyebrowRecipe = cva(eyebrowLead)\n\nconst topBarTitleRecipe = cva(\n 'truncate font-tf-display text-tf-h3 font-bold tracking-tf-tight text-tf-fg',\n)\n\nconst topBarActionsRecipe = cva('flex flex-wrap items-center gap-4')\n\nconst topBarLevels = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const\n\ntype TopBarLevel = (typeof topBarLevels)[number]\n\nconst defaultTopBarLevel = 'h1' satisfies TopBarLevel\n\nexport {\n type TopBarLevel,\n defaultTopBarLevel,\n topBarLevels,\n topBarRuleRecipe,\n topBarActionsRecipe,\n topBarContentRecipe,\n topBarEdgeRecipe,\n topBarEyebrowRecipe,\n topBarHeadingsRecipe,\n topBarRecipe,\n topBarTitleRecipe,\n}\n"],"mappings":";;;;AAKA,MAAM,eAAe,IAAI;CACvB;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,sBAAsB,IAAI,CAC9B,uFACA,6DACF,CAAC;AAED,MAAM,mBAAmB,IAAI,0BAA0B;AAEvD,MAAM,mBAAmB,IAAI;CAC3B,+BAA+B;CAC/B;CACA;AACF,CAAC;AAED,MAAM,uBAAuB,IAAI,oCAAoC;AAErE,MAAM,sBAAsB,IAAI,WAAW;AAE3C,MAAM,oBAAoB,IACxB,4EACF;AAEA,MAAM,sBAAsB,IAAI,mCAAmC;AAEnE,MAAM,eAAe;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;AAAI;AAIxD,MAAM,qBAAqB"}
@@ -0,0 +1,27 @@
1
+ //#region src/recipes/trail.d.ts
2
+ declare const trailStates: readonly ["done", "failed", "current", "pending"];
3
+ type TrailState = (typeof trailStates)[number];
4
+ declare const defaultTrailState = "pending";
5
+ declare const trailFlows: readonly ["row", "column"];
6
+ type TrailFlow = (typeof trailFlows)[number];
7
+ declare const defaultTrailFlow = "row";
8
+ declare const trailRecipe: (props?: ({
9
+ flow?: "row" | "column" | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ declare const trailStepRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
12
+ declare const trailCaptionRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
13
+ declare const trailBadgeRecipe: (props?: ({
14
+ state?: "current" | "done" | "failed" | "pending" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
+ declare const trailSpinRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
17
+ declare const trailConnectorRecipe: (props?: ({
18
+ flow?: "row" | "column" | null | undefined;
19
+ state?: "current" | "done" | "failed" | "pending" | null | undefined;
20
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
21
+ declare const trailLabelRecipe: (props?: ({
22
+ state?: "current" | "done" | "failed" | "pending" | null | undefined;
23
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
24
+ declare const trailHintRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
25
+ //#endregion
26
+ export { type TrailFlow, type TrailState, defaultTrailFlow, defaultTrailState, trailBadgeRecipe, trailCaptionRecipe, trailConnectorRecipe, trailFlows, trailHintRecipe, trailLabelRecipe, trailRecipe, trailSpinRecipe, trailStates, trailStepRecipe };
27
+ //# sourceMappingURL=trail.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { cva } from "class-variance-authority";
2
+ //#region src/recipes/trail.ts
3
+ const trailStates = [
4
+ "done",
5
+ "failed",
6
+ "current",
7
+ "pending"
8
+ ];
9
+ const defaultTrailState = "pending";
10
+ const trailFlows = ["row", "column"];
11
+ const defaultTrailFlow = "row";
12
+ const trailRecipe = cva("rounded-tf-block bg-tf-sunken p-6 font-tf-body", {
13
+ defaultVariants: { flow: "row" },
14
+ variants: { flow: {
15
+ column: "grid grid-cols-1 gap-3",
16
+ row: "grid gap-y-2"
17
+ } }
18
+ });
19
+ const trailStepRecipe = cva("relative flex flex-row items-start gap-2");
20
+ const trailCaptionRecipe = cva("[grid-column:span_2] flex min-w-0 flex-1 flex-col gap-0 pr-3 last:[grid-column:span_1] last:pr-0");
21
+ const trailBadgeRecipe = cva([
22
+ "relative isolate flex size-6.5 flex-none items-center justify-center rounded-tf-pill",
23
+ "tf-icons",
24
+ "[&_svg]:size-tf-icon-2xs [&_svg]:shrink-0"
25
+ ], {
26
+ defaultVariants: { state: defaultTrailState },
27
+ variants: { state: {
28
+ current: "bg-tf-blend text-tf-on-accent blend-tf-accent",
29
+ done: "bg-tf-blend text-tf-on-semantic blend-tf-success",
30
+ failed: "bg-tf-blend text-tf-on-semantic blend-tf-danger",
31
+ pending: "bg-tf-panel text-tf-muted opacity-55"
32
+ } }
33
+ });
34
+ const trailSpinRecipe = cva("[&_svg]:animate-spin motion-reduce:[&_svg]:animate-none");
35
+ const trailConnectorRecipe = cva("", {
36
+ defaultVariants: {
37
+ flow: "row",
38
+ state: defaultTrailState
39
+ },
40
+ variants: {
41
+ flow: {
42
+ column: "absolute top-6.5 -bottom-3 left-[calc(1.625rem/2-1px)] w-0.5",
43
+ row: "mx-1 mt-[calc(1.625rem/2)] h-0.5 min-w-6"
44
+ },
45
+ state: {
46
+ current: "bg-tf-line",
47
+ done: "bg-tf-success-hi",
48
+ failed: "bg-tf-danger-hi",
49
+ pending: "bg-tf-line"
50
+ }
51
+ }
52
+ });
53
+ const trailLabelRecipe = cva("text-tf-caption font-medium", {
54
+ defaultVariants: { state: defaultTrailState },
55
+ variants: { state: {
56
+ current: "text-tf-accent-hi",
57
+ done: "text-tf-fg",
58
+ failed: "text-tf-danger-hi",
59
+ pending: "text-tf-muted"
60
+ } }
61
+ });
62
+ const trailHintRecipe = cva("text-tf-caption-sm text-tf-muted");
63
+ //#endregion
64
+ export { defaultTrailFlow, defaultTrailState, trailBadgeRecipe, trailCaptionRecipe, trailConnectorRecipe, trailFlows, trailHintRecipe, trailLabelRecipe, trailRecipe, trailSpinRecipe, trailStates, trailStepRecipe };
65
+
66
+ //# sourceMappingURL=trail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trail.js","names":[],"sources":["../../src/recipes/trail.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nconst trailStates = ['done', 'failed', 'current', 'pending'] as const\n\ntype TrailState = (typeof trailStates)[number]\n\nconst defaultTrailState = 'pending' satisfies TrailState\n\nconst trailFlows = ['row', 'column'] as const\n\ntype TrailFlow = (typeof trailFlows)[number]\n\nconst defaultTrailFlow = 'row' satisfies TrailFlow\n\nconst trailRecipe = cva('rounded-tf-block bg-tf-sunken p-6 font-tf-body', {\n defaultVariants: { flow: defaultTrailFlow },\n variants: {\n flow: {\n column: 'grid grid-cols-1 gap-3',\n row: 'grid gap-y-2',\n } satisfies Record<TrailFlow, string>,\n },\n})\n\nconst trailStepRecipe = cva('relative flex flex-row items-start gap-2')\n\nconst trailCaptionRecipe = cva(\n '[grid-column:span_2] flex min-w-0 flex-1 flex-col gap-0 pr-3 last:[grid-column:span_1] last:pr-0',\n)\n\nconst trailBadgeRecipe = cva(\n [\n 'relative isolate flex size-6.5 flex-none items-center justify-center rounded-tf-pill',\n 'tf-icons',\n '[&_svg]:size-tf-icon-2xs [&_svg]:shrink-0',\n ],\n {\n defaultVariants: { state: defaultTrailState },\n variants: {\n state: {\n current: 'bg-tf-blend text-tf-on-accent blend-tf-accent',\n done: 'bg-tf-blend text-tf-on-semantic blend-tf-success',\n failed: 'bg-tf-blend text-tf-on-semantic blend-tf-danger',\n pending: 'bg-tf-panel text-tf-muted opacity-55',\n } satisfies Record<TrailState, string>,\n },\n },\n)\n\nconst trailSpinRecipe = cva('[&_svg]:animate-spin motion-reduce:[&_svg]:animate-none')\n\nconst trailConnectorRecipe = cva('', {\n defaultVariants: { flow: defaultTrailFlow, state: defaultTrailState },\n variants: {\n flow: {\n column: 'absolute top-6.5 -bottom-3 left-[calc(1.625rem/2-1px)] w-0.5',\n row: 'mx-1 mt-[calc(1.625rem/2)] h-0.5 min-w-6',\n } satisfies Record<TrailFlow, string>,\n state: {\n current: 'bg-tf-line',\n done: 'bg-tf-success-hi',\n failed: 'bg-tf-danger-hi',\n pending: 'bg-tf-line',\n } satisfies Record<TrailState, string>,\n },\n})\n\nconst trailLabelRecipe = cva('text-tf-caption font-medium', {\n defaultVariants: { state: defaultTrailState },\n variants: {\n state: {\n current: 'text-tf-accent-hi',\n done: 'text-tf-fg',\n failed: 'text-tf-danger-hi',\n pending: 'text-tf-muted',\n } satisfies Record<TrailState, string>,\n },\n})\n\nconst trailHintRecipe = cva('text-tf-caption-sm text-tf-muted')\n\nexport {\n type TrailFlow,\n type TrailState,\n defaultTrailFlow,\n defaultTrailState,\n trailBadgeRecipe,\n trailCaptionRecipe,\n trailConnectorRecipe,\n trailFlows,\n trailHintRecipe,\n trailLabelRecipe,\n trailRecipe,\n trailSpinRecipe,\n trailStates,\n trailStepRecipe,\n}\n"],"mappings":";;AAEA,MAAM,cAAc;CAAC;CAAQ;CAAU;CAAW;AAAS;AAI3D,MAAM,oBAAoB;AAE1B,MAAM,aAAa,CAAC,OAAO,QAAQ;AAInC,MAAM,mBAAmB;AAEzB,MAAM,cAAc,IAAI,kDAAkD;CACxE,iBAAiB,EAAE,MAAA,MAAuB;CAC1C,UAAU,EACR,MAAM;EACJ,QAAQ;EACR,KAAK;CACP,EACF;AACF,CAAC;AAED,MAAM,kBAAkB,IAAI,0CAA0C;AAEtE,MAAM,qBAAqB,IACzB,kGACF;AAEA,MAAM,mBAAmB,IACvB;CACE;CACA;CACA;AACF,GACA;CACE,iBAAiB,EAAE,OAAO,kBAAkB;CAC5C,UAAU,EACR,OAAO;EACL,SAAS;EACT,MAAM;EACN,QAAQ;EACR,SAAS;CACX,EACF;AACF,CACF;AAEA,MAAM,kBAAkB,IAAI,yDAAyD;AAErF,MAAM,uBAAuB,IAAI,IAAI;CACnC,iBAAiB;EAAE,MAAA;EAAwB,OAAO;CAAkB;CACpE,UAAU;EACR,MAAM;GACJ,QAAQ;GACR,KAAK;EACP;EACA,OAAO;GACL,SAAS;GACT,MAAM;GACN,QAAQ;GACR,SAAS;EACX;CACF;AACF,CAAC;AAED,MAAM,mBAAmB,IAAI,+BAA+B;CAC1D,iBAAiB,EAAE,OAAO,kBAAkB;CAC5C,UAAU,EACR,OAAO;EACL,SAAS;EACT,MAAM;EACN,QAAQ;EACR,SAAS;CACX,EACF;AACF,CAAC;AAED,MAAM,kBAAkB,IAAI,kCAAkC"}
@@ -0,0 +1,11 @@
1
+ //#region src/recipes/userMenu.d.ts
2
+ declare const userTriggerRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
3
+ declare const userAvatarRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
4
+ declare const userPortraitRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
5
+ declare const userIdentityRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
6
+ declare const userNameRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
7
+ declare const userRoleRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
8
+ declare const userChevronRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
9
+ //#endregion
10
+ export { userAvatarRecipe, userChevronRecipe, userIdentityRecipe, userNameRecipe, userPortraitRecipe, userRoleRecipe, userTriggerRecipe };
11
+ //# sourceMappingURL=userMenu.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { controlInert, controlPress } from "../parts/control.js";
2
+ import { railCollapse, railMorph } from "./motion.js";
3
+ import { cva } from "class-variance-authority";
4
+ //#region src/recipes/userMenu.ts
5
+ const userTriggerRecipe = cva([
6
+ "flex w-full items-center justify-center gap-3 rounded-tf-control p-3 text-left",
7
+ "text-tf-fg data-rail:gap-0 data-rail:py-2",
8
+ "data-rail:px-2",
9
+ "interactive:hovered:bg-tf-panel",
10
+ "hovered:**:data-[scope=avatar]:tf-edge-lit",
11
+ "focused:**:data-[scope=avatar]:tf-edge-lit",
12
+ "outline-hidden",
13
+ "focused:outline-2 focused:outline-offset-2 focused:outline-tf-accent-hi focused:outline-solid",
14
+ `cursor-pointer ${railMorph}`,
15
+ "[&_svg]:size-tf-icon-sm [&_svg]:shrink-0",
16
+ ...controlPress,
17
+ ...controlInert
18
+ ]);
19
+ const userAvatarRecipe = cva([
20
+ "relative isolate flex size-tf-control-sm flex-none items-center justify-center",
21
+ "rounded-tf-pill bg-tf-panel-hi text-tf-caption font-medium text-tf-fg",
22
+ "tf-edge-sweep tf-swept blend-tf-accent",
23
+ "tf-transition motion-reduce:transition-none"
24
+ ]);
25
+ const userPortraitRecipe = cva("size-full rounded-tf-pill object-cover");
26
+ const userIdentityRecipe = cva(`flex flex-col gap-0 ${railCollapse}`);
27
+ const userNameRecipe = cva("truncate text-tf-body-sm font-medium");
28
+ const userRoleRecipe = cva("truncate text-tf-caption-sm text-tf-muted");
29
+ const userChevronRecipe = cva([
30
+ "flex-none text-tf-muted",
31
+ "in-data-rail:size-0! in-data-rail:opacity-0",
32
+ "[--tf-travel:opacity_var(--tf-timing-glide)]",
33
+ railMorph
34
+ ]);
35
+ //#endregion
36
+ export { userAvatarRecipe, userChevronRecipe, userIdentityRecipe, userNameRecipe, userPortraitRecipe, userRoleRecipe, userTriggerRecipe };
37
+
38
+ //# sourceMappingURL=userMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"userMenu.js","names":[],"sources":["../../src/recipes/userMenu.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { controlInert, controlPress } from '#parts/control'\n\nimport { railCollapse, railMorph } from './motion'\n\nconst userTriggerRecipe = cva([\n 'flex w-full items-center justify-center gap-3 rounded-tf-control p-3 text-left',\n 'text-tf-fg data-rail:gap-0 data-rail:py-2',\n 'data-rail:px-2',\n 'interactive:hovered:bg-tf-panel',\n 'hovered:**:data-[scope=avatar]:tf-edge-lit',\n 'focused:**:data-[scope=avatar]:tf-edge-lit',\n 'outline-hidden',\n 'focused:outline-2 focused:outline-offset-2 focused:outline-tf-accent-hi focused:outline-solid',\n `cursor-pointer ${railMorph}`,\n '[&_svg]:size-tf-icon-sm [&_svg]:shrink-0',\n ...controlPress,\n ...controlInert,\n])\n\nconst userAvatarRecipe = cva([\n 'relative isolate flex size-tf-control-sm flex-none items-center justify-center',\n 'rounded-tf-pill bg-tf-panel-hi text-tf-caption font-medium text-tf-fg',\n 'tf-edge-sweep tf-swept blend-tf-accent',\n 'tf-transition motion-reduce:transition-none',\n])\n\nconst userPortraitRecipe = cva('size-full rounded-tf-pill object-cover')\n\nconst userIdentityRecipe = cva(`flex flex-col gap-0 ${railCollapse}`)\n\nconst userNameRecipe = cva('truncate text-tf-body-sm font-medium')\n\nconst userRoleRecipe = cva('truncate text-tf-caption-sm text-tf-muted')\n\nconst userChevronRecipe = cva([\n 'flex-none text-tf-muted',\n 'in-data-rail:size-0! in-data-rail:opacity-0',\n '[--tf-travel:opacity_var(--tf-timing-glide)]',\n railMorph,\n])\n\nexport {\n userAvatarRecipe,\n userPortraitRecipe,\n userChevronRecipe,\n userIdentityRecipe,\n userNameRecipe,\n userRoleRecipe,\n userTriggerRecipe,\n}\n"],"mappings":";;;;AAMA,MAAM,oBAAoB,IAAI;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,kBAAkB;CAClB;CACA,GAAG;CACH,GAAG;AACL,CAAC;AAED,MAAM,mBAAmB,IAAI;CAC3B;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,qBAAqB,IAAI,wCAAwC;AAEvE,MAAM,qBAAqB,IAAI,uBAAuB,cAAc;AAEpE,MAAM,iBAAiB,IAAI,sCAAsC;AAEjE,MAAM,iBAAiB,IAAI,2CAA2C;AAEtE,MAAM,oBAAoB,IAAI;CAC5B;CACA;CACA;CACA;AACF,CAAC"}
@@ -0,0 +1,17 @@
1
+ //#region src/tally.d.ts
2
+ declare const WHOLE = 1;
3
+ interface Tally {
4
+ counts: boolean;
5
+ group: string;
6
+ head: string;
7
+ places: number;
8
+ point: string;
9
+ tail: string;
10
+ target: number;
11
+ whole: string;
12
+ }
13
+ declare const tallyOf: (value: string) => Tally;
14
+ declare const tallyAt: (tally: Tally, part: number) => string;
15
+ //#endregion
16
+ export { type Tally, WHOLE, tallyAt, tallyOf };
17
+ //# sourceMappingURL=tally.d.ts.map
package/dist/tally.js ADDED
@@ -0,0 +1,75 @@
1
+ //#region src/tally.ts
2
+ const RUN = /\d(?:[\S\s]*\d)?/u;
3
+ const MARKS = /\D/gu;
4
+ const LAST = -1;
5
+ const ONCE = 1;
6
+ const ONE = 1;
7
+ const NONE = 0;
8
+ const WHOLE = 1;
9
+ const GROUP_SIZE = 3;
10
+ const DECIMAL_MAX = 2;
11
+ const marksIn = (run) => run.match(MARKS) ?? [];
12
+ const pointOf = (run) => {
13
+ const marks = marksIn(run);
14
+ const last = marks.at(LAST) ?? "";
15
+ if (last === "" || marks.filter((mark) => mark === last).length > ONCE) return "";
16
+ if (run.length - run.lastIndexOf(last) - ONE > DECIMAL_MAX) return "";
17
+ return last;
18
+ };
19
+ const groupOf = (run, point) => marksIn(run).filter((mark) => mark !== point).at(LAST) ?? "";
20
+ const NOT_DIGITS = /[^\d]/gu;
21
+ const targetOf = (run, point) => {
22
+ if (point === "") return Number(run.replace(NOT_DIGITS, ""));
23
+ const [body = "", fraction = ""] = run.split(point);
24
+ return Number(`${body.replace(NOT_DIGITS, "")}.${fraction.replace(NOT_DIGITS, "")}`);
25
+ };
26
+ const placesOf = (run, point) => {
27
+ if (point === "") return NONE;
28
+ return run.length - run.lastIndexOf(point) - ONE;
29
+ };
30
+ const RESTS = {
31
+ counts: false,
32
+ group: "",
33
+ head: "",
34
+ places: NONE,
35
+ point: "",
36
+ tail: "",
37
+ target: NONE,
38
+ whole: ""
39
+ };
40
+ const tallyOf = (value) => {
41
+ const found = RUN.exec(value);
42
+ if (!found) return {
43
+ ...RESTS,
44
+ whole: value
45
+ };
46
+ const [run] = found;
47
+ const point = pointOf(run);
48
+ return {
49
+ counts: true,
50
+ group: groupOf(run, point),
51
+ head: value.slice(NONE, found.index),
52
+ places: placesOf(run, point),
53
+ point,
54
+ tail: value.slice(found.index + run.length),
55
+ target: targetOf(run, point),
56
+ whole: value
57
+ };
58
+ };
59
+ const grouped = (body, group) => {
60
+ if (group === "") return body;
61
+ const parts = [];
62
+ for (let edge = body.length; edge > NONE; edge -= GROUP_SIZE) parts.unshift(body.slice(Math.max(edge - GROUP_SIZE, NONE), edge));
63
+ return parts.join(group);
64
+ };
65
+ const tallyAt = (tally, part) => {
66
+ if (!tally.counts || part >= 1) return tally.whole;
67
+ const [body = "", fraction = ""] = (tally.target * part).toFixed(tally.places).split(".");
68
+ const shown = grouped(body, tally.group);
69
+ if (tally.point === "") return `${tally.head}${shown}${tally.tail}`;
70
+ return `${tally.head}${shown}${tally.point}${fraction}${tally.tail}`;
71
+ };
72
+ //#endregion
73
+ export { WHOLE, tallyAt, tallyOf };
74
+
75
+ //# sourceMappingURL=tally.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tally.js","names":[],"sources":["../src/tally.ts"],"sourcesContent":["const RUN = /\\d(?:[\\S\\s]*\\d)?/u\n\nconst MARKS = /\\D/gu\n\nconst LAST = -1\nconst ONCE = 1\nconst ONE = 1\nconst NONE = 0\nconst WHOLE = 1\nconst GROUP_SIZE = 3\nconst DECIMAL_MAX = 2\n\ninterface Tally {\n counts: boolean\n group: string\n head: string\n places: number\n point: string\n tail: string\n target: number\n whole: string\n}\n\nconst marksIn = (run: string): string[] => run.match(MARKS) ?? []\n\nconst pointOf = (run: string): string => {\n const marks = marksIn(run)\n const last = marks.at(LAST) ?? ''\n\n if (last === '' || marks.filter((mark) => mark === last).length > ONCE) {\n return ''\n }\n if (run.length - run.lastIndexOf(last) - ONE > DECIMAL_MAX) {\n return ''\n }\n return last\n}\n\nconst groupOf = (run: string, point: string): string =>\n marksIn(run)\n .filter((mark) => mark !== point)\n .at(LAST) ?? ''\n\nconst NOT_DIGITS = /[^\\d]/gu\n\nconst targetOf = (run: string, point: string): number => {\n if (point === '') {\n return Number(run.replace(NOT_DIGITS, ''))\n }\n const [body = '', fraction = ''] = run.split(point)\n\n return Number(`${body.replace(NOT_DIGITS, '')}.${fraction.replace(NOT_DIGITS, '')}`)\n}\n\nconst placesOf = (run: string, point: string): number => {\n if (point === '') {\n return NONE\n }\n return run.length - run.lastIndexOf(point) - ONE\n}\n\nconst RESTS: Tally = {\n counts: false,\n group: '',\n head: '',\n places: NONE,\n point: '',\n tail: '',\n target: NONE,\n whole: '',\n}\n\nconst tallyOf = (value: string): Tally => {\n const found = RUN.exec(value)\n\n if (!found) {\n return { ...RESTS, whole: value }\n }\n const [run] = found\n const point = pointOf(run)\n\n return {\n counts: true,\n group: groupOf(run, point),\n head: value.slice(NONE, found.index),\n places: placesOf(run, point),\n point,\n tail: value.slice(found.index + run.length),\n target: targetOf(run, point),\n whole: value,\n }\n}\n\nconst grouped = (body: string, group: string): string => {\n if (group === '') {\n return body\n }\n const parts: string[] = []\n\n for (let edge = body.length; edge > NONE; edge -= GROUP_SIZE) {\n parts.unshift(body.slice(Math.max(edge - GROUP_SIZE, NONE), edge))\n }\n return parts.join(group)\n}\n\nconst tallyAt = (tally: Tally, part: number): string => {\n if (!tally.counts || part >= WHOLE) {\n return tally.whole\n }\n const [body = '', fraction = ''] = (tally.target * part).toFixed(tally.places).split('.')\n const shown = grouped(body, tally.group)\n\n if (tally.point === '') {\n return `${tally.head}${shown}${tally.tail}`\n }\n return `${tally.head}${shown}${tally.point}${fraction}${tally.tail}`\n}\n\nexport { type Tally, WHOLE, tallyAt, tallyOf }\n"],"mappings":";AAAA,MAAM,MAAM;AAEZ,MAAM,QAAQ;AAEd,MAAM,OAAO;AACb,MAAM,OAAO;AACb,MAAM,MAAM;AACZ,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,aAAa;AACnB,MAAM,cAAc;AAapB,MAAM,WAAW,QAA0B,IAAI,MAAM,KAAK,KAAK,CAAC;AAEhE,MAAM,WAAW,QAAwB;CACvC,MAAM,QAAQ,QAAQ,GAAG;CACzB,MAAM,OAAO,MAAM,GAAG,IAAI,KAAK;CAE/B,IAAI,SAAS,MAAM,MAAM,QAAQ,SAAS,SAAS,IAAI,CAAC,CAAC,SAAS,MAChE,OAAO;CAET,IAAI,IAAI,SAAS,IAAI,YAAY,IAAI,IAAI,MAAM,aAC7C,OAAO;CAET,OAAO;AACT;AAEA,MAAM,WAAW,KAAa,UAC5B,QAAQ,GAAG,CAAC,CACT,QAAQ,SAAS,SAAS,KAAK,CAAC,CAChC,GAAG,IAAI,KAAK;AAEjB,MAAM,aAAa;AAEnB,MAAM,YAAY,KAAa,UAA0B;CACvD,IAAI,UAAU,IACZ,OAAO,OAAO,IAAI,QAAQ,YAAY,EAAE,CAAC;CAE3C,MAAM,CAAC,OAAO,IAAI,WAAW,MAAM,IAAI,MAAM,KAAK;CAElD,OAAO,OAAO,GAAG,KAAK,QAAQ,YAAY,EAAE,EAAE,GAAG,SAAS,QAAQ,YAAY,EAAE,GAAG;AACrF;AAEA,MAAM,YAAY,KAAa,UAA0B;CACvD,IAAI,UAAU,IACZ,OAAO;CAET,OAAO,IAAI,SAAS,IAAI,YAAY,KAAK,IAAI;AAC/C;AAEA,MAAM,QAAe;CACnB,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;AACT;AAEA,MAAM,WAAW,UAAyB;CACxC,MAAM,QAAQ,IAAI,KAAK,KAAK;CAE5B,IAAI,CAAC,OACH,OAAO;EAAE,GAAG;EAAO,OAAO;CAAM;CAElC,MAAM,CAAC,OAAO;CACd,MAAM,QAAQ,QAAQ,GAAG;CAEzB,OAAO;EACL,QAAQ;EACR,OAAO,QAAQ,KAAK,KAAK;EACzB,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;EACnC,QAAQ,SAAS,KAAK,KAAK;EAC3B;EACA,MAAM,MAAM,MAAM,MAAM,QAAQ,IAAI,MAAM;EAC1C,QAAQ,SAAS,KAAK,KAAK;EAC3B,OAAO;CACT;AACF;AAEA,MAAM,WAAW,MAAc,UAA0B;CACvD,IAAI,UAAU,IACZ,OAAO;CAET,MAAM,QAAkB,CAAC;CAEzB,KAAK,IAAI,OAAO,KAAK,QAAQ,OAAO,MAAM,QAAQ,YAChD,MAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,OAAO,YAAY,IAAI,GAAG,IAAI,CAAC;CAEnE,OAAO,MAAM,KAAK,KAAK;AACzB;AAEA,MAAM,WAAW,OAAc,SAAyB;CACtD,IAAI,CAAC,MAAM,UAAU,QAAA,GACnB,OAAO,MAAM;CAEf,MAAM,CAAC,OAAO,IAAI,WAAW,OAAO,MAAM,SAAS,KAAA,CAAM,QAAQ,MAAM,MAAM,CAAC,CAAC,MAAM,GAAG;CACxF,MAAM,QAAQ,QAAQ,MAAM,MAAM,KAAK;CAEvC,IAAI,MAAM,UAAU,IAClB,OAAO,GAAG,MAAM,OAAO,QAAQ,MAAM;CAEvC,OAAO,GAAG,MAAM,OAAO,QAAQ,MAAM,QAAQ,WAAW,MAAM;AAChE"}
package/dist/tone.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ //#region src/tone.d.ts
2
+ type Tone = 'accent' | 'success' | 'warning' | 'info' | 'danger';
3
+ declare const toneBlend: {
4
+ accent: string;
5
+ danger: string;
6
+ info: string;
7
+ success: string;
8
+ warning: string;
9
+ };
10
+ declare const toneText: {
11
+ accent: string;
12
+ danger: string;
13
+ info: string;
14
+ success: string;
15
+ warning: string;
16
+ };
17
+ declare const toneTint: {
18
+ accent: string;
19
+ danger: string;
20
+ info: string;
21
+ success: string;
22
+ warning: string;
23
+ };
24
+ //#endregion
25
+ export { type Tone, toneBlend, toneText, toneTint };
26
+ //# sourceMappingURL=tone.d.ts.map
package/dist/tone.js ADDED
@@ -0,0 +1,26 @@
1
+ //#region src/tone.ts
2
+ const toneBlend = {
3
+ accent: "blend-tf-accent",
4
+ danger: "blend-tf-danger",
5
+ info: "blend-tf-info",
6
+ success: "blend-tf-success",
7
+ warning: "blend-tf-warning"
8
+ };
9
+ const toneText = {
10
+ accent: "text-tf-accent-hi",
11
+ danger: "text-tf-danger-hi",
12
+ info: "text-tf-info-hi",
13
+ success: "text-tf-success-hi",
14
+ warning: "text-tf-warning-hi"
15
+ };
16
+ const toneTint = {
17
+ accent: "bg-tf-accent-tint",
18
+ danger: "bg-tf-danger-tint",
19
+ info: "bg-tf-info-tint",
20
+ success: "bg-tf-success-tint",
21
+ warning: "bg-tf-warning-tint"
22
+ };
23
+ //#endregion
24
+ export { toneBlend, toneText, toneTint };
25
+
26
+ //# sourceMappingURL=tone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tone.js","names":[],"sources":["../src/tone.ts"],"sourcesContent":["type Tone = 'accent' | 'success' | 'warning' | 'info' | 'danger'\n\nconst toneBlend = {\n accent: 'blend-tf-accent',\n danger: 'blend-tf-danger',\n info: 'blend-tf-info',\n success: 'blend-tf-success',\n warning: 'blend-tf-warning',\n} satisfies Record<Tone, string>\n\nconst toneText = {\n accent: 'text-tf-accent-hi',\n danger: 'text-tf-danger-hi',\n info: 'text-tf-info-hi',\n success: 'text-tf-success-hi',\n warning: 'text-tf-warning-hi',\n} satisfies Record<Tone, string>\n\nconst toneTint = {\n accent: 'bg-tf-accent-tint',\n danger: 'bg-tf-danger-tint',\n info: 'bg-tf-info-tint',\n success: 'bg-tf-success-tint',\n warning: 'bg-tf-warning-tint',\n} satisfies Record<Tone, string>\n\nexport { type Tone, toneBlend, toneText, toneTint }\n"],"mappings":";AAEA,MAAM,YAAY;CAChB,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;AACX;AAEA,MAAM,WAAW;CACf,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;AACX;AAEA,MAAM,WAAW;CACf,QAAQ;CACR,QAAQ;CACR,MAAM;CACN,SAAS;CACT,SAAS;AACX"}