@techfides/ui-library-design 0.5.0 → 0.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 (169) hide show
  1. package/dist/anatomies.d.ts +1586 -0
  2. package/dist/anatomies.js +107 -0
  3. package/dist/anatomies.js.map +1 -0
  4. package/dist/anatomy.d.ts +13 -0
  5. package/dist/anatomy.js +6 -0
  6. package/dist/anatomy.js.map +1 -0
  7. package/dist/cn.generated.js +217 -0
  8. package/dist/cn.generated.js.map +1 -0
  9. package/dist/cn.js +10 -166
  10. package/dist/cn.js.map +1 -1
  11. package/dist/control.d.ts +1 -2
  12. package/dist/control.js +1 -2
  13. package/dist/control.js.map +1 -1
  14. package/dist/index.d.ts +55 -52
  15. package/dist/index.js +59 -56
  16. package/dist/recipes/accordion.d.ts +28 -1
  17. package/dist/recipes/accordion.js +29 -1
  18. package/dist/recipes/accordion.js.map +1 -1
  19. package/dist/recipes/alert.d.ts +45 -1
  20. package/dist/recipes/alert.js +45 -1
  21. package/dist/recipes/alert.js.map +1 -1
  22. package/dist/recipes/band.d.ts +11 -1
  23. package/dist/recipes/band.js +7 -1
  24. package/dist/recipes/band.js.map +1 -1
  25. package/dist/recipes/bars.d.ts +60 -1
  26. package/dist/recipes/bars.js +59 -1
  27. package/dist/recipes/bars.js.map +1 -1
  28. package/dist/recipes/brandMark.d.ts +8 -1
  29. package/dist/recipes/brandMark.js +7 -1
  30. package/dist/recipes/brandMark.js.map +1 -1
  31. package/dist/recipes/button.d.ts +41 -4
  32. package/dist/recipes/button.js +31 -2
  33. package/dist/recipes/button.js.map +1 -1
  34. package/dist/recipes/cardHeader.d.ts +18 -1
  35. package/dist/recipes/cardHeader.js +19 -1
  36. package/dist/recipes/cardHeader.js.map +1 -1
  37. package/dist/recipes/checkbox.d.ts +16 -1
  38. package/dist/recipes/checkbox.js +16 -3
  39. package/dist/recipes/checkbox.js.map +1 -1
  40. package/dist/recipes/chip.d.ts +41 -2
  41. package/dist/recipes/chip.js +34 -1
  42. package/dist/recipes/chip.js.map +1 -1
  43. package/dist/recipes/codeEditor.d.ts +8 -1
  44. package/dist/recipes/codeEditor.js +7 -1
  45. package/dist/recipes/codeEditor.js.map +1 -1
  46. package/dist/recipes/datePicker.d.ts +62 -1
  47. package/dist/recipes/datePicker.js +56 -3
  48. package/dist/recipes/datePicker.js.map +1 -1
  49. package/dist/recipes/dialog.d.ts +49 -1
  50. package/dist/recipes/dialog.js +40 -1
  51. package/dist/recipes/dialog.js.map +1 -1
  52. package/dist/recipes/feature.d.ts +30 -1
  53. package/dist/recipes/feature.js +30 -2
  54. package/dist/recipes/feature.js.map +1 -1
  55. package/dist/recipes/field.js +1 -1
  56. package/dist/recipes/findings.d.ts +33 -1
  57. package/dist/recipes/findings.js +34 -1
  58. package/dist/recipes/findings.js.map +1 -1
  59. package/dist/recipes/heading.d.ts +12 -2
  60. package/dist/recipes/heading.js +7 -1
  61. package/dist/recipes/heading.js.map +1 -1
  62. package/dist/recipes/heartbeat.d.ts +52 -2
  63. package/dist/recipes/heartbeat.js +51 -4
  64. package/dist/recipes/heartbeat.js.map +1 -1
  65. package/dist/recipes/ink.d.ts +11 -0
  66. package/dist/recipes/ink.js +13 -0
  67. package/dist/recipes/ink.js.map +1 -0
  68. package/dist/recipes/input.d.ts +55 -1
  69. package/dist/recipes/input.js +52 -2
  70. package/dist/recipes/input.js.map +1 -1
  71. package/dist/recipes/listItem.d.ts +18 -1
  72. package/dist/recipes/listItem.js +20 -1
  73. package/dist/recipes/listItem.js.map +1 -1
  74. package/dist/recipes/listbox.d.ts +22 -2
  75. package/dist/recipes/listbox.js +19 -1
  76. package/dist/recipes/listbox.js.map +1 -1
  77. package/dist/recipes/marquee.d.ts +26 -2
  78. package/dist/recipes/marquee.js +24 -1
  79. package/dist/recipes/marquee.js.map +1 -1
  80. package/dist/recipes/menu.d.ts +33 -1
  81. package/dist/recipes/menu.js +29 -1
  82. package/dist/recipes/menu.js.map +1 -1
  83. package/dist/recipes/metaRow.d.ts +11 -2
  84. package/dist/recipes/metaRow.js +7 -1
  85. package/dist/recipes/metaRow.js.map +1 -1
  86. package/dist/recipes/meter.d.ts +36 -2
  87. package/dist/recipes/meter.js +34 -1
  88. package/dist/recipes/meter.js.map +1 -1
  89. package/dist/recipes/motion.d.ts +9 -1
  90. package/dist/recipes/nebula.js +1 -1
  91. package/dist/recipes/numberRange.d.ts +44 -1
  92. package/dist/recipes/numberRange.js +36 -1
  93. package/dist/recipes/numberRange.js.map +1 -1
  94. package/dist/recipes/paper.d.ts +55 -2
  95. package/dist/recipes/paper.js +47 -4
  96. package/dist/recipes/paper.js.map +1 -1
  97. package/dist/recipes/progressBar.d.ts +8 -1
  98. package/dist/recipes/progressBar.js +7 -1
  99. package/dist/recipes/progressBar.js.map +1 -1
  100. package/dist/recipes/queue.d.ts +33 -1
  101. package/dist/recipes/queue.js +35 -1
  102. package/dist/recipes/queue.js.map +1 -1
  103. package/dist/recipes/radioGroup.d.ts +18 -1
  104. package/dist/recipes/radioGroup.js +21 -3
  105. package/dist/recipes/radioGroup.js.map +1 -1
  106. package/dist/recipes/scopeSwitcher.d.ts +38 -1
  107. package/dist/recipes/scopeSwitcher.js +40 -1
  108. package/dist/recipes/scopeSwitcher.js.map +1 -1
  109. package/dist/recipes/scrollArea.d.ts +12 -3
  110. package/dist/recipes/scrollArea.js +7 -1
  111. package/dist/recipes/scrollArea.js.map +1 -1
  112. package/dist/recipes/searchPalette.d.ts +48 -1
  113. package/dist/recipes/searchPalette.js +49 -1
  114. package/dist/recipes/searchPalette.js.map +1 -1
  115. package/dist/recipes/sectionHeader.d.ts +20 -2
  116. package/dist/recipes/sectionHeader.js +20 -3
  117. package/dist/recipes/sectionHeader.js.map +1 -1
  118. package/dist/recipes/segmentedControl.d.ts +8 -1
  119. package/dist/recipes/segmentedControl.js +7 -1
  120. package/dist/recipes/segmentedControl.js.map +1 -1
  121. package/dist/recipes/select.d.ts +57 -1
  122. package/dist/recipes/select.js +51 -1
  123. package/dist/recipes/select.js.map +1 -1
  124. package/dist/recipes/separator.d.ts +13 -2
  125. package/dist/recipes/separator.js +8 -2
  126. package/dist/recipes/separator.js.map +1 -1
  127. package/dist/recipes/sidebar.d.ts +128 -2
  128. package/dist/recipes/sidebar.js +125 -2
  129. package/dist/recipes/sidebar.js.map +1 -1
  130. package/dist/recipes/sky.d.ts +31 -1
  131. package/dist/recipes/sky.js +30 -1
  132. package/dist/recipes/sky.js.map +1 -1
  133. package/dist/recipes/slider.d.ts +15 -1
  134. package/dist/recipes/slider.js +14 -1
  135. package/dist/recipes/slider.js.map +1 -1
  136. package/dist/recipes/stat.d.ts +71 -1
  137. package/dist/recipes/stat.js +73 -3
  138. package/dist/recipes/stat.js.map +1 -1
  139. package/dist/recipes/switch.d.ts +10 -1
  140. package/dist/recipes/switch.js +9 -3
  141. package/dist/recipes/switch.js.map +1 -1
  142. package/dist/recipes/table.d.ts +63 -3
  143. package/dist/recipes/table.js +56 -2
  144. package/dist/recipes/table.js.map +1 -1
  145. package/dist/recipes/tail.d.ts +40 -5
  146. package/dist/recipes/tail.js +37 -5
  147. package/dist/recipes/tail.js.map +1 -1
  148. package/dist/recipes/text.d.ts +16 -3
  149. package/dist/recipes/text.js +8 -3
  150. package/dist/recipes/text.js.map +1 -1
  151. package/dist/recipes/textarea.d.ts +46 -1
  152. package/dist/recipes/textarea.js +41 -1
  153. package/dist/recipes/textarea.js.map +1 -1
  154. package/dist/recipes/tile.d.ts +23 -1
  155. package/dist/recipes/tile.js +19 -1
  156. package/dist/recipes/tile.js.map +1 -1
  157. package/dist/recipes/tooltip.d.ts +8 -1
  158. package/dist/recipes/tooltip.js +7 -1
  159. package/dist/recipes/tooltip.js.map +1 -1
  160. package/dist/recipes/topBar.d.ts +43 -1
  161. package/dist/recipes/topBar.js +44 -1
  162. package/dist/recipes/topBar.js.map +1 -1
  163. package/dist/recipes/trail.d.ts +55 -5
  164. package/dist/recipes/trail.js +47 -5
  165. package/dist/recipes/trail.js.map +1 -1
  166. package/dist/recipes/userMenu.d.ts +23 -1
  167. package/dist/recipes/userMenu.js +24 -1
  168. package/dist/recipes/userMenu.js.map +1 -1
  169. package/package.json +3 -2
@@ -17,7 +17,7 @@ declare const tableScrollRecipe: (props?: import("class-variance-authority/types
17
17
  declare const tableGridRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
18
18
  declare const tableHeadRowRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
19
19
  declare const tableHeadCellRecipe: (props?: ({
20
- align?: "end" | "start" | null | undefined;
20
+ align?: "start" | "end" | null | undefined;
21
21
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
22
22
  declare const tableHeadingRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
23
23
  declare const tableSortRecipe: (props?: ({
@@ -47,7 +47,7 @@ declare const tableRowRecipe: (props?: ({
47
47
  declare const tableSelectCellRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
48
48
  declare const tableMarkRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
49
49
  declare const tableCellRecipe: (props?: ({
50
- align?: "end" | "start" | null | undefined;
50
+ align?: "start" | "end" | null | undefined;
51
51
  mono?: boolean | null | undefined;
52
52
  tabular?: boolean | null | undefined;
53
53
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -69,6 +69,66 @@ declare const tableSkeletonMarkRecipe: (props?: import("class-variance-authority
69
69
  declare const tableEmptyRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
70
70
  declare const tableEmptyTitleRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
71
71
  declare const tableEmptyHintRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
72
+ declare const tableAnatomy: {
73
+ readonly bar: {
74
+ readonly part: "bar";
75
+ readonly recipe: (props?: ({
76
+ numeric?: boolean | null | undefined;
77
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
78
+ readonly required: false;
79
+ };
80
+ readonly filterRule: {
81
+ readonly part: "filter-rule";
82
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
83
+ readonly required: true;
84
+ };
85
+ readonly head: {
86
+ readonly part: "head";
87
+ readonly recipe: (props?: ({
88
+ align?: "start" | "end" | null | undefined;
89
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
90
+ readonly required: true;
91
+ };
92
+ readonly mark: {
93
+ readonly part: "mark";
94
+ readonly recipe: (props?: ({
95
+ sorted?: boolean | null | undefined;
96
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
97
+ readonly required: false;
98
+ };
99
+ readonly rank: {
100
+ readonly part: "rank";
101
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
102
+ readonly required: false;
103
+ };
104
+ readonly root: {
105
+ readonly part: "table";
106
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
107
+ readonly required: true;
108
+ };
109
+ readonly rule: {
110
+ readonly part: "rule";
111
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
112
+ readonly required: true;
113
+ };
114
+ readonly ruled: {
115
+ readonly part: "ruled";
116
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
117
+ readonly required: true;
118
+ };
119
+ readonly tableFilter: {
120
+ readonly part: "table-filter";
121
+ readonly recipe: (props?: ({
122
+ on?: boolean | null | undefined;
123
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
124
+ readonly required: false;
125
+ };
126
+ readonly toolbar: {
127
+ readonly part: "table-toolbar";
128
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
129
+ readonly required: false;
130
+ };
131
+ };
72
132
  //#endregion
73
- export { type TableAlign, type TableFilterKind, tableActionsCellRecipe, tableActionsWidth, tableAppliedRecipe, tableBodyRecipe, tableCardRecipe, tableCellRecipe, tableDetailBodyRecipe, tableDetailRecipe, tableEmptyHintRecipe, tableEmptyRecipe, tableEmptyTitleRecipe, tableExpandIconRecipe, tableExpandRecipe, tableFilterMarkRecipe, tableFilterRecipe, tableGridRecipe, tableGroupRecipe, tableHeadCellRecipe, tableHeadRowRecipe, tableHeadingRecipe, tableMarkRecipe, tablePinWidth, tableRankRecipe, tableRecipe, tableRowRecipe, tableRuleRecipe, tableScrollRecipe, tableSearchRecipe, tableSelectCellRecipe, tableSelectionActionsRecipe, tableSelectionCountRecipe, tableSelectionRecipe, tableSkeletonBarRecipe, tableSkeletonMarkRecipe, tableSortIconRecipe, tableSortLabelRecipe, tableSortMarkRecipe, tableSortRecipe, tableStepRecipe, tableToolbarRecipe, tableValueRecipe };
133
+ export { type TableAlign, type TableFilterKind, tableActionsCellRecipe, tableActionsWidth, tableAnatomy, tableAppliedRecipe, tableBodyRecipe, tableCardRecipe, tableCellRecipe, tableDetailBodyRecipe, tableDetailRecipe, tableEmptyHintRecipe, tableEmptyRecipe, tableEmptyTitleRecipe, tableExpandIconRecipe, tableExpandRecipe, tableFilterMarkRecipe, tableFilterRecipe, tableGridRecipe, tableGroupRecipe, tableHeadCellRecipe, tableHeadRowRecipe, tableHeadingRecipe, tableMarkRecipe, tablePinWidth, tableRankRecipe, tableRecipe, tableRowRecipe, tableRuleRecipe, tableScrollRecipe, tableSearchRecipe, tableSelectCellRecipe, tableSelectionActionsRecipe, tableSelectionCountRecipe, tableSelectionRecipe, tableSkeletonBarRecipe, tableSkeletonMarkRecipe, tableSortIconRecipe, tableSortLabelRecipe, tableSortMarkRecipe, tableSortRecipe, tableStepRecipe, tableToolbarRecipe, tableValueRecipe };
74
134
  //# sourceMappingURL=table.d.ts.map
@@ -1,8 +1,10 @@
1
- import { toneTint } from "../tone.js";
1
+ import { anatomy } from "../anatomy.js";
2
2
  import { controlInert, controlPress, controlQuietIcon, controlReach } from "../parts/control.js";
3
3
  import { ruleFading } from "../parts/rule.js";
4
+ import { toneTint } from "../tone.js";
4
5
  import { eyebrowQuiet, eyebrowType } from "../parts/eyebrow.js";
5
6
  import { revealedControl, revealedIcon, shownControl, shownIcon } from "../parts/reveal.js";
7
+ import { tableFilterRuleRecipe } from "./tableFilter.js";
6
8
  import { cva } from "class-variance-authority";
7
9
  //#region src/recipes/table.ts
8
10
  const defaultTableAlign = "start";
@@ -176,7 +178,59 @@ const tableSkeletonMarkRecipe = cva("size-tf-icon-lg flex-none tf-breathing roun
176
178
  const tableEmptyRecipe = cva("flex flex-col items-center gap-2 px-6 py-14 text-center");
177
179
  const tableEmptyTitleRecipe = cva("font-tf-display text-tf-h4 font-bold tracking-tf-tight text-tf-fg");
178
180
  const tableEmptyHintRecipe = cva("text-tf-body-sm font-medium text-tf-muted");
181
+ const tableAnatomy = anatomy({
182
+ bar: {
183
+ part: "bar",
184
+ recipe: tableSkeletonBarRecipe,
185
+ required: false
186
+ },
187
+ filterRule: {
188
+ part: "filter-rule",
189
+ recipe: tableFilterRuleRecipe,
190
+ required: true
191
+ },
192
+ head: {
193
+ part: "head",
194
+ recipe: tableHeadCellRecipe,
195
+ required: true
196
+ },
197
+ mark: {
198
+ part: "mark",
199
+ recipe: tableSortMarkRecipe,
200
+ required: false
201
+ },
202
+ rank: {
203
+ part: "rank",
204
+ recipe: tableRankRecipe,
205
+ required: false
206
+ },
207
+ root: {
208
+ part: "table",
209
+ recipe: tableRecipe,
210
+ required: true
211
+ },
212
+ rule: {
213
+ part: "rule",
214
+ recipe: tableRuleRecipe,
215
+ required: true
216
+ },
217
+ ruled: {
218
+ part: "ruled",
219
+ recipe: tableGroupRecipe,
220
+ required: true
221
+ },
222
+ tableFilter: {
223
+ part: "table-filter",
224
+ recipe: tableFilterRecipe,
225
+ required: false
226
+ },
227
+ toolbar: {
228
+ part: "table-toolbar",
229
+ recipe: tableToolbarRecipe,
230
+ required: false
231
+ }
232
+ });
179
233
  //#endregion
180
- export { tableActionsCellRecipe, tableActionsWidth, tableAppliedRecipe, tableBodyRecipe, tableCardRecipe, tableCellRecipe, tableDetailBodyRecipe, tableDetailRecipe, tableEmptyHintRecipe, tableEmptyRecipe, tableEmptyTitleRecipe, tableExpandIconRecipe, tableExpandRecipe, tableFilterMarkRecipe, tableFilterRecipe, tableGridRecipe, tableGroupRecipe, tableHeadCellRecipe, tableHeadRowRecipe, tableHeadingRecipe, tableMarkRecipe, tablePinWidth, tableRankRecipe, tableRecipe, tableRowRecipe, tableRuleRecipe, tableScrollRecipe, tableSearchRecipe, tableSelectCellRecipe, tableSelectionActionsRecipe, tableSelectionCountRecipe, tableSelectionRecipe, tableSkeletonBarRecipe, tableSkeletonMarkRecipe, tableSortIconRecipe, tableSortLabelRecipe, tableSortMarkRecipe, tableSortRecipe, tableStepRecipe, tableToolbarRecipe, tableValueRecipe };
234
+ export { tableActionsCellRecipe, tableActionsWidth, tableAnatomy, tableAppliedRecipe, tableBodyRecipe, tableCardRecipe, tableCellRecipe, tableDetailBodyRecipe, tableDetailRecipe, tableEmptyHintRecipe, tableEmptyRecipe, tableEmptyTitleRecipe, tableExpandIconRecipe, tableExpandRecipe, tableFilterMarkRecipe, tableFilterRecipe, tableGridRecipe, tableGroupRecipe, tableHeadCellRecipe, tableHeadRowRecipe, tableHeadingRecipe, tableMarkRecipe, tablePinWidth, tableRankRecipe, tableRecipe, tableRowRecipe, tableRuleRecipe, tableScrollRecipe, tableSearchRecipe, tableSelectCellRecipe, tableSelectionActionsRecipe, tableSelectionCountRecipe, tableSelectionRecipe, tableSkeletonBarRecipe, tableSkeletonMarkRecipe, tableSortIconRecipe, tableSortLabelRecipe, tableSortMarkRecipe, tableSortRecipe, tableStepRecipe, tableToolbarRecipe, tableValueRecipe };
181
235
 
182
236
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":[],"sources":["../../src/recipes/table.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { controlInert, controlPress, controlQuietIcon, controlReach } from '#parts/control'\nimport { eyebrowQuiet, eyebrowType } from '#parts/eyebrow'\nimport { revealedControl, revealedIcon, shownControl, shownIcon } from '#parts/reveal'\nimport { ruleFading } from '#parts/rule'\nimport { toneTint } from '#tone'\n\ntype TableAlign = 'start' | 'end'\n\ntype TableFilterKind = 'text' | 'enum' | 'range'\n\nconst defaultTableAlign = 'start' satisfies TableAlign\n\nconst TIGHT = [\n 'flex size-tf-control-2xs flex-none items-center justify-center rounded-tf-inline',\n 'tf-icons [&_svg]:size-tf-icon-2xs [&_svg]:shrink-0',\n 'cursor-pointer tf-transition motion-reduce:transition-none',\n 'interactive:hovered:bg-tf-panel-hi interactive:hovered:text-tf-fg',\n ...controlReach,\n ...controlInert,\n]\n\nconst CELL = 'flex min-w-0 items-center px-4'\n\nconst tablePinWidth = 52\n\nconst tableActionsWidth = 160\n\nconst tableRecipe = cva('flex w-full min-w-0 flex-col gap-8 font-tf-body')\n\nconst tableToolbarRecipe = cva('flex flex-wrap items-center gap-3')\n\nconst tableSearchRecipe = cva('max-w-tf-panel flex-none')\n\nconst tableAppliedRecipe = cva('flex flex-1 flex-wrap items-center justify-end gap-2')\n\nconst tableSelectionRecipe = cva([\n 'flex flex-wrap items-center gap-4 rounded-tf-control bg-tf-accent-tint px-4 py-3',\n 'animate-tf-in motion-reduce:animate-none',\n])\n\nconst tableSelectionCountRecipe = cva('text-tf-body-sm font-medium text-tf-accent-hi')\n\nconst tableSelectionActionsRecipe = cva('ml-auto flex flex-wrap items-center gap-2')\n\nconst tableCardRecipe = cva('relative isolate rounded-tf-card', {\n defaultVariants: { bordered: true },\n variants: {\n bordered: {\n false: '',\n true: 'tf-edge-sweep tf-swept blend-tf-accent tf-edge-plain',\n },\n },\n})\n\nconst tableScrollRecipe = cva([\n 'tf-scroll-thin overflow-x-auto rounded-tf-card',\n 'tf-resizes motion-reduce:transition-none',\n])\n\nconst tableGridRecipe = cva('overflow-x-clip text-tf-body-sm font-medium text-tf-fg')\n\nconst tableHeadRowRecipe = cva('grid h-tf-control-md')\n\nconst tableHeadCellRecipe = cva([CELL, 'gap-1 whitespace-nowrap'], {\n defaultVariants: { align: defaultTableAlign },\n variants: {\n align: {\n end: 'justify-end',\n start: '',\n } satisfies Record<TableAlign, string>,\n },\n})\n\nconst tableHeadingRecipe = cva([`flex-none text-tf-caption ${eyebrowQuiet}`])\n\nconst tableSortRecipe = cva(\n [\n '-ml-2 flex h-tf-row min-w-0 items-center gap-2 rounded-tf-inline px-2',\n `text-tf-caption ${eyebrowType}`,\n 'tf-icons [&_svg]:size-tf-icon-2xs [&_svg]:shrink-0',\n 'cursor-pointer tf-transition motion-reduce:transition-none',\n 'interactive:hovered:bg-tf-panel-hi interactive:hovered:text-tf-fg',\n ...controlReach,\n ...controlPress,\n ...controlInert,\n ],\n {\n defaultVariants: { sorted: false },\n variants: {\n sorted: { false: 'text-tf-muted', true: 'text-tf-accent-hi' },\n },\n },\n)\n\nconst tableSortLabelRecipe = cva('min-w-0 truncate')\n\nconst tableSortIconRecipe = cva('tf-transition motion-reduce:transition-none', {\n defaultVariants: { descending: false },\n variants: {\n descending: { false: '', true: 'rotate-180' },\n },\n})\n\nconst tableSortMarkRecipe = cva('', {\n defaultVariants: { sorted: false },\n variants: {\n sorted: { false: revealedIcon, true: shownIcon },\n },\n})\n\nconst tableFilterMarkRecipe = cva('', {\n defaultVariants: { on: false },\n variants: {\n on: { false: revealedControl, true: shownControl },\n },\n})\n\nconst tableRankRecipe = cva([\n 'flex-none rounded-tf-pill bg-tf-accent-tint px-1.5',\n 'text-tf-caption-sm font-normal text-tf-accent-hi tabular-nums',\n])\n\nconst tableFilterRecipe = cva(TIGHT, {\n defaultVariants: { on: false },\n variants: {\n on: { false: 'text-tf-muted', true: 'bg-tf-accent-tint text-tf-accent-hi' },\n },\n})\n\nconst tableRuleRecipe = cva(`block ${ruleFading}`)\n\nconst PAGING = [\n 'data-[going=forward]:[--tf-page-from:calc(var(--spacing)*4)]',\n 'data-[going=back]:[--tf-page-from:calc(var(--spacing)*-4)]',\n 'data-[step=a]:motion-safe:animate-tf-page',\n 'data-[step=b]:motion-safe:animate-tf-page-again',\n]\n\nconst tableBodyRecipe = cva(PAGING)\n\nconst tableGroupRecipe = cva('border-b border-tf-line-2 last:border-b-0')\n\nconst A_WASH_OVER_WHATEVER_IS_THERE = [\n 'relative',\n \"before:pointer-events-none before:absolute before:inset-0 before:content-['']\",\n 'before:tf-transition before:motion-reduce:transition-none',\n 'not-data-selected:hovered:before:bg-tf-panel-2',\n 'data-selected:before:bg-tf-accent-tint',\n]\n\nconst tableRowRecipe = cva(\n ['grid tf-transition motion-reduce:transition-none', ...A_WASH_OVER_WHATEVER_IS_THERE],\n {\n defaultVariants: { accent: 'none', dense: false },\n variants: {\n accent: { ...toneTint, none: '' },\n dense: { false: 'h-tf-control-lg', true: 'h-tf-control-md' },\n },\n },\n)\n\nconst tableSelectCellRecipe = cva('flex items-center justify-center')\n\nconst tableMarkRecipe = cva('flex')\n\nconst tableCellRecipe = cva([CELL, 'gap-3'], {\n defaultVariants: { align: defaultTableAlign, mono: false, tabular: false },\n variants: {\n align: {\n end: 'justify-end text-right',\n start: '',\n } satisfies Record<TableAlign, string>,\n mono: { false: '', true: 'font-mono' },\n tabular: { false: '', true: 'whitespace-nowrap tabular-nums' },\n },\n})\n\nconst tableValueRecipe = cva('min-w-0 truncate')\n\nconst tableExpandRecipe = cva(TIGHT, {\n defaultVariants: { open: false },\n variants: {\n open: { false: 'text-tf-muted', true: 'text-tf-accent-hi' },\n },\n})\n\nconst tableExpandIconRecipe = cva('tf-transition motion-reduce:transition-none', {\n defaultVariants: { open: false },\n variants: {\n open: { false: '', true: 'rotate-90' },\n },\n})\n\nconst tableActionsCellRecipe = cva([\n 'sticky right-0 flex items-center justify-end gap-2 pr-3 pl-6',\n 'backdrop-blur-tf-panel in-data-turning:bg-tf-surface-quiet',\n 'before:absolute before:inset-y-0 before:left-0 before:w-tf-hairline before:bg-tf-line-2',\n \"before:content-['']\",\n])\n\nconst tableStepRecipe = cva(controlQuietIcon)\n\nconst tableDetailRecipe = cva('tf-unfolds bg-tf-sunken-hi motion-reduce:transition-none')\n\nconst tableDetailBodyRecipe = cva([\n 'py-5 pr-6 pl-16',\n 'animate-tf-fade-in motion-reduce:animate-none',\n])\n\nconst tableSkeletonBarRecipe = cva('h-3 tf-breathing rounded-tf-pill bg-tf-panel', {\n defaultVariants: { numeric: false },\n variants: {\n numeric: { false: 'w-3/5', true: 'w-2/5' },\n },\n})\n\nconst tableSkeletonMarkRecipe = cva(\n 'size-tf-icon-lg flex-none tf-breathing rounded-tf-inline bg-tf-panel',\n)\n\nconst tableEmptyRecipe = cva('flex flex-col items-center gap-2 px-6 py-14 text-center')\n\nconst tableEmptyTitleRecipe = cva(\n 'font-tf-display text-tf-h4 font-bold tracking-tf-tight text-tf-fg',\n)\n\nconst tableEmptyHintRecipe = cva('text-tf-body-sm font-medium text-tf-muted')\n\nexport {\n type TableAlign,\n type TableFilterKind,\n tableActionsCellRecipe,\n tableActionsWidth,\n tableAppliedRecipe,\n tableBodyRecipe,\n tableCardRecipe,\n tableCellRecipe,\n tableDetailBodyRecipe,\n tableDetailRecipe,\n tableEmptyHintRecipe,\n tableEmptyRecipe,\n tableEmptyTitleRecipe,\n tableExpandIconRecipe,\n tableExpandRecipe,\n tableFilterRecipe,\n tableGridRecipe,\n tableGroupRecipe,\n tableHeadCellRecipe,\n tableHeadRowRecipe,\n tableHeadingRecipe,\n tableMarkRecipe,\n tablePinWidth,\n tableRecipe,\n tableRowRecipe,\n tableRuleRecipe,\n tableScrollRecipe,\n tableSearchRecipe,\n tableSelectCellRecipe,\n tableSelectionActionsRecipe,\n tableSelectionCountRecipe,\n tableSelectionRecipe,\n tableSkeletonBarRecipe,\n tableSkeletonMarkRecipe,\n tableFilterMarkRecipe,\n tableRankRecipe,\n tableSortIconRecipe,\n tableSortMarkRecipe,\n tableSortLabelRecipe,\n tableSortRecipe,\n tableStepRecipe,\n tableToolbarRecipe,\n tableValueRecipe,\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","names":[],"sources":["../../src/recipes/table.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { anatomy } from '#anatomy'\nimport { controlInert, controlPress, controlQuietIcon, controlReach } from '#parts/control'\nimport { eyebrowQuiet, eyebrowType } from '#parts/eyebrow'\nimport { revealedControl, revealedIcon, shownControl, shownIcon } from '#parts/reveal'\nimport { ruleFading } from '#parts/rule'\nimport { toneTint } from '#tone'\n\nimport { tableFilterRuleRecipe } from './tableFilter'\n\ntype TableAlign = 'start' | 'end'\n\ntype TableFilterKind = 'text' | 'enum' | 'range'\n\nconst defaultTableAlign = 'start' satisfies TableAlign\n\nconst TIGHT = [\n 'flex size-tf-control-2xs flex-none items-center justify-center rounded-tf-inline',\n 'tf-icons [&_svg]:size-tf-icon-2xs [&_svg]:shrink-0',\n 'cursor-pointer tf-transition motion-reduce:transition-none',\n 'interactive:hovered:bg-tf-panel-hi interactive:hovered:text-tf-fg',\n ...controlReach,\n ...controlInert,\n]\n\nconst CELL = 'flex min-w-0 items-center px-4'\n\nconst tablePinWidth = 52\n\nconst tableActionsWidth = 160\n\nconst tableRecipe = cva('flex w-full min-w-0 flex-col gap-8 font-tf-body')\n\nconst tableToolbarRecipe = cva('flex flex-wrap items-center gap-3')\n\nconst tableSearchRecipe = cva('max-w-tf-panel flex-none')\n\nconst tableAppliedRecipe = cva('flex flex-1 flex-wrap items-center justify-end gap-2')\n\nconst tableSelectionRecipe = cva([\n 'flex flex-wrap items-center gap-4 rounded-tf-control bg-tf-accent-tint px-4 py-3',\n 'animate-tf-in motion-reduce:animate-none',\n])\n\nconst tableSelectionCountRecipe = cva('text-tf-body-sm font-medium text-tf-accent-hi')\n\nconst tableSelectionActionsRecipe = cva('ml-auto flex flex-wrap items-center gap-2')\n\nconst tableCardRecipe = cva('relative isolate rounded-tf-card', {\n defaultVariants: { bordered: true },\n variants: {\n bordered: {\n false: '',\n true: 'tf-edge-sweep tf-swept blend-tf-accent tf-edge-plain',\n },\n },\n})\n\nconst tableScrollRecipe = cva([\n 'tf-scroll-thin overflow-x-auto rounded-tf-card',\n 'tf-resizes motion-reduce:transition-none',\n])\n\nconst tableGridRecipe = cva('overflow-x-clip text-tf-body-sm font-medium text-tf-fg')\n\nconst tableHeadRowRecipe = cva('grid h-tf-control-md')\n\nconst tableHeadCellRecipe = cva([CELL, 'gap-1 whitespace-nowrap'], {\n defaultVariants: { align: defaultTableAlign },\n variants: {\n align: {\n end: 'justify-end',\n start: '',\n } satisfies Record<TableAlign, string>,\n },\n})\n\nconst tableHeadingRecipe = cva([`flex-none text-tf-caption ${eyebrowQuiet}`])\n\nconst tableSortRecipe = cva(\n [\n '-ml-2 flex h-tf-row min-w-0 items-center gap-2 rounded-tf-inline px-2',\n `text-tf-caption ${eyebrowType}`,\n 'tf-icons [&_svg]:size-tf-icon-2xs [&_svg]:shrink-0',\n 'cursor-pointer tf-transition motion-reduce:transition-none',\n 'interactive:hovered:bg-tf-panel-hi interactive:hovered:text-tf-fg',\n ...controlReach,\n ...controlPress,\n ...controlInert,\n ],\n {\n defaultVariants: { sorted: false },\n variants: {\n sorted: { false: 'text-tf-muted', true: 'text-tf-accent-hi' },\n },\n },\n)\n\nconst tableSortLabelRecipe = cva('min-w-0 truncate')\n\nconst tableSortIconRecipe = cva('tf-transition motion-reduce:transition-none', {\n defaultVariants: { descending: false },\n variants: {\n descending: { false: '', true: 'rotate-180' },\n },\n})\n\nconst tableSortMarkRecipe = cva('', {\n defaultVariants: { sorted: false },\n variants: {\n sorted: { false: revealedIcon, true: shownIcon },\n },\n})\n\nconst tableFilterMarkRecipe = cva('', {\n defaultVariants: { on: false },\n variants: {\n on: { false: revealedControl, true: shownControl },\n },\n})\n\nconst tableRankRecipe = cva([\n 'flex-none rounded-tf-pill bg-tf-accent-tint px-1.5',\n 'text-tf-caption-sm font-normal text-tf-accent-hi tabular-nums',\n])\n\nconst tableFilterRecipe = cva(TIGHT, {\n defaultVariants: { on: false },\n variants: {\n on: { false: 'text-tf-muted', true: 'bg-tf-accent-tint text-tf-accent-hi' },\n },\n})\n\nconst tableRuleRecipe = cva(`block ${ruleFading}`)\n\nconst PAGING = [\n 'data-[going=forward]:[--tf-page-from:calc(var(--spacing)*4)]',\n 'data-[going=back]:[--tf-page-from:calc(var(--spacing)*-4)]',\n 'data-[step=a]:motion-safe:animate-tf-page',\n 'data-[step=b]:motion-safe:animate-tf-page-again',\n]\n\nconst tableBodyRecipe = cva(PAGING)\n\nconst tableGroupRecipe = cva('border-b border-tf-line-2 last:border-b-0')\n\nconst A_WASH_OVER_WHATEVER_IS_THERE = [\n 'relative',\n \"before:pointer-events-none before:absolute before:inset-0 before:content-['']\",\n 'before:tf-transition before:motion-reduce:transition-none',\n 'not-data-selected:hovered:before:bg-tf-panel-2',\n 'data-selected:before:bg-tf-accent-tint',\n]\n\nconst tableRowRecipe = cva(\n ['grid tf-transition motion-reduce:transition-none', ...A_WASH_OVER_WHATEVER_IS_THERE],\n {\n defaultVariants: { accent: 'none', dense: false },\n variants: {\n accent: { ...toneTint, none: '' },\n dense: { false: 'h-tf-control-lg', true: 'h-tf-control-md' },\n },\n },\n)\n\nconst tableSelectCellRecipe = cva('flex items-center justify-center')\n\nconst tableMarkRecipe = cva('flex')\n\nconst tableCellRecipe = cva([CELL, 'gap-3'], {\n defaultVariants: { align: defaultTableAlign, mono: false, tabular: false },\n variants: {\n align: {\n end: 'justify-end text-right',\n start: '',\n } satisfies Record<TableAlign, string>,\n mono: { false: '', true: 'font-mono' },\n tabular: { false: '', true: 'whitespace-nowrap tabular-nums' },\n },\n})\n\nconst tableValueRecipe = cva('min-w-0 truncate')\n\nconst tableExpandRecipe = cva(TIGHT, {\n defaultVariants: { open: false },\n variants: {\n open: { false: 'text-tf-muted', true: 'text-tf-accent-hi' },\n },\n})\n\nconst tableExpandIconRecipe = cva('tf-transition motion-reduce:transition-none', {\n defaultVariants: { open: false },\n variants: {\n open: { false: '', true: 'rotate-90' },\n },\n})\n\nconst tableActionsCellRecipe = cva([\n 'sticky right-0 flex items-center justify-end gap-2 pr-3 pl-6',\n 'backdrop-blur-tf-panel in-data-turning:bg-tf-surface-quiet',\n 'before:absolute before:inset-y-0 before:left-0 before:w-tf-hairline before:bg-tf-line-2',\n \"before:content-['']\",\n])\n\nconst tableStepRecipe = cva(controlQuietIcon)\n\nconst tableDetailRecipe = cva('tf-unfolds bg-tf-sunken-hi motion-reduce:transition-none')\n\nconst tableDetailBodyRecipe = cva([\n 'py-5 pr-6 pl-16',\n 'animate-tf-fade-in motion-reduce:animate-none',\n])\n\nconst tableSkeletonBarRecipe = cva('h-3 tf-breathing rounded-tf-pill bg-tf-panel', {\n defaultVariants: { numeric: false },\n variants: {\n numeric: { false: 'w-3/5', true: 'w-2/5' },\n },\n})\n\nconst tableSkeletonMarkRecipe = cva(\n 'size-tf-icon-lg flex-none tf-breathing rounded-tf-inline bg-tf-panel',\n)\n\nconst tableEmptyRecipe = cva('flex flex-col items-center gap-2 px-6 py-14 text-center')\n\nconst tableEmptyTitleRecipe = cva(\n 'font-tf-display text-tf-h4 font-bold tracking-tf-tight text-tf-fg',\n)\n\nconst tableEmptyHintRecipe = cva('text-tf-body-sm font-medium text-tf-muted')\n\nconst tableAnatomy = anatomy({\n bar: { part: 'bar', recipe: tableSkeletonBarRecipe, required: false },\n filterRule: { part: 'filter-rule', recipe: tableFilterRuleRecipe, required: true },\n head: { part: 'head', recipe: tableHeadCellRecipe, required: true },\n mark: { part: 'mark', recipe: tableSortMarkRecipe, required: false },\n rank: { part: 'rank', recipe: tableRankRecipe, required: false },\n root: { part: 'table', recipe: tableRecipe, required: true },\n rule: { part: 'rule', recipe: tableRuleRecipe, required: true },\n ruled: { part: 'ruled', recipe: tableGroupRecipe, required: true },\n tableFilter: { part: 'table-filter', recipe: tableFilterRecipe, required: false },\n toolbar: { part: 'table-toolbar', recipe: tableToolbarRecipe, required: false },\n})\n\nexport {\n type TableAlign,\n type TableFilterKind,\n tableAnatomy,\n tableActionsCellRecipe,\n tableActionsWidth,\n tableAppliedRecipe,\n tableBodyRecipe,\n tableCardRecipe,\n tableCellRecipe,\n tableDetailBodyRecipe,\n tableDetailRecipe,\n tableEmptyHintRecipe,\n tableEmptyRecipe,\n tableEmptyTitleRecipe,\n tableExpandIconRecipe,\n tableExpandRecipe,\n tableFilterRecipe,\n tableGridRecipe,\n tableGroupRecipe,\n tableHeadCellRecipe,\n tableHeadRowRecipe,\n tableHeadingRecipe,\n tableMarkRecipe,\n tablePinWidth,\n tableRecipe,\n tableRowRecipe,\n tableRuleRecipe,\n tableScrollRecipe,\n tableSearchRecipe,\n tableSelectCellRecipe,\n tableSelectionActionsRecipe,\n tableSelectionCountRecipe,\n tableSelectionRecipe,\n tableSkeletonBarRecipe,\n tableSkeletonMarkRecipe,\n tableFilterMarkRecipe,\n tableRankRecipe,\n tableSortIconRecipe,\n tableSortMarkRecipe,\n tableSortLabelRecipe,\n tableSortRecipe,\n tableStepRecipe,\n tableToolbarRecipe,\n tableValueRecipe,\n}\n"],"mappings":"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"}
@@ -1,20 +1,55 @@
1
1
  //#region src/recipes/tail.d.ts
2
2
  declare const tailSeverities: readonly ["quiet", "plain", "warning", "danger", "success"];
3
3
  type TailSeverity = (typeof tailSeverities)[number];
4
- declare const defaultTailSeverity = "plain";
5
4
  declare const tailRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
6
5
  declare const tailScrollRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
7
6
  declare const tailLineRecipe: (props?: ({
8
- severity?: "success" | "warning" | "danger" | "plain" | "quiet" | null | undefined;
7
+ severity?: "plain" | "success" | "warning" | "danger" | "quiet" | null | undefined;
9
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
9
  declare const tailGutterRecipe: (props?: ({
11
- severity?: "success" | "warning" | "danger" | "plain" | "quiet" | null | undefined;
10
+ severity?: "plain" | "success" | "warning" | "danger" | "quiet" | null | undefined;
12
11
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
12
  declare const tailAtRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
14
13
  declare const tailTextRecipe: (props?: ({
15
- severity?: "success" | "warning" | "danger" | "plain" | "quiet" | null | undefined;
14
+ severity?: "plain" | "success" | "warning" | "danger" | "quiet" | null | undefined;
16
15
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
17
16
  declare const tailEmptyRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
17
+ declare const tailAnatomy: {
18
+ readonly at: {
19
+ readonly part: "at";
20
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
21
+ readonly required: false;
22
+ };
23
+ readonly empty: {
24
+ readonly part: "empty";
25
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
26
+ readonly required: false;
27
+ };
28
+ readonly line: {
29
+ readonly part: "line";
30
+ readonly recipe: (props?: ({
31
+ severity?: "plain" | "success" | "warning" | "danger" | "quiet" | null | undefined;
32
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
33
+ readonly required: false;
34
+ };
35
+ readonly root: {
36
+ readonly part: "tail";
37
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
38
+ readonly required: true;
39
+ };
40
+ readonly scroll: {
41
+ readonly part: "scroll";
42
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
43
+ readonly required: true;
44
+ };
45
+ readonly text: {
46
+ readonly part: "text";
47
+ readonly recipe: (props?: ({
48
+ severity?: "plain" | "success" | "warning" | "danger" | "quiet" | null | undefined;
49
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
50
+ readonly required: false;
51
+ };
52
+ };
18
53
  //#endregion
19
- export { type TailSeverity, defaultTailSeverity, tailAtRecipe, tailEmptyRecipe, tailGutterRecipe, tailLineRecipe, tailRecipe, tailScrollRecipe, tailSeverities, tailTextRecipe };
54
+ export { type TailSeverity, tailAnatomy, tailAtRecipe, tailEmptyRecipe, tailGutterRecipe, tailLineRecipe, tailRecipe, tailScrollRecipe, tailSeverities, tailTextRecipe };
20
55
  //# sourceMappingURL=tail.d.ts.map
@@ -1,3 +1,4 @@
1
+ import { anatomy } from "../anatomy.js";
1
2
  import { cva } from "class-variance-authority";
2
3
  //#region src/recipes/tail.ts
3
4
  const tailSeverities = [
@@ -7,11 +8,10 @@ const tailSeverities = [
7
8
  "danger",
8
9
  "success"
9
10
  ];
10
- const defaultTailSeverity = "plain";
11
11
  const tailRecipe = cva(["overflow-hidden rounded-tf-block bg-tf-sunken-quiet", "shadow-[inset_0_0_0_var(--spacing-tf-hairline)_var(--color-tf-line-2)]"]);
12
12
  const tailScrollRecipe = cva("tf-scroll-thin overflow-x-auto overflow-y-auto");
13
13
  const tailLineRecipe = cva("grid min-w-max grid-cols-[3px_6.5rem_1fr] items-center gap-x-3 py-0.5", {
14
- defaultVariants: { severity: defaultTailSeverity },
14
+ defaultVariants: { severity: "plain" },
15
15
  variants: { severity: {
16
16
  danger: "bg-tf-danger-wash",
17
17
  plain: "",
@@ -21,7 +21,7 @@ const tailLineRecipe = cva("grid min-w-max grid-cols-[3px_6.5rem_1fr] items-cent
21
21
  } }
22
22
  });
23
23
  const tailGutterRecipe = cva("h-full", {
24
- defaultVariants: { severity: defaultTailSeverity },
24
+ defaultVariants: { severity: "plain" },
25
25
  variants: { severity: {
26
26
  danger: "bg-tf-danger-hi",
27
27
  plain: "bg-transparent",
@@ -32,7 +32,7 @@ const tailGutterRecipe = cva("h-full", {
32
32
  });
33
33
  const tailAtRecipe = cva("py-0.5 pl-3 font-mono text-tf-caption-sm text-tf-muted");
34
34
  const tailTextRecipe = cva("py-0.5 pr-3 font-mono text-tf-caption-sm whitespace-nowrap", {
35
- defaultVariants: { severity: defaultTailSeverity },
35
+ defaultVariants: { severity: "plain" },
36
36
  variants: { severity: {
37
37
  danger: "text-tf-danger-hi",
38
38
  plain: "text-tf-fg",
@@ -42,7 +42,39 @@ const tailTextRecipe = cva("py-0.5 pr-3 font-mono text-tf-caption-sm whitespace-
42
42
  } }
43
43
  });
44
44
  const tailEmptyRecipe = cva("p-5 text-center text-tf-caption font-medium text-tf-muted");
45
+ const tailAnatomy = anatomy({
46
+ at: {
47
+ part: "at",
48
+ recipe: tailAtRecipe,
49
+ required: false
50
+ },
51
+ empty: {
52
+ part: "empty",
53
+ recipe: tailEmptyRecipe,
54
+ required: false
55
+ },
56
+ line: {
57
+ part: "line",
58
+ recipe: tailLineRecipe,
59
+ required: false
60
+ },
61
+ root: {
62
+ part: "tail",
63
+ recipe: tailRecipe,
64
+ required: true
65
+ },
66
+ scroll: {
67
+ part: "scroll",
68
+ recipe: tailScrollRecipe,
69
+ required: true
70
+ },
71
+ text: {
72
+ part: "text",
73
+ recipe: tailTextRecipe,
74
+ required: false
75
+ }
76
+ });
45
77
  //#endregion
46
- export { defaultTailSeverity, tailAtRecipe, tailEmptyRecipe, tailGutterRecipe, tailLineRecipe, tailRecipe, tailScrollRecipe, tailSeverities, tailTextRecipe };
78
+ export { tailAnatomy, tailAtRecipe, tailEmptyRecipe, tailGutterRecipe, tailLineRecipe, tailRecipe, tailScrollRecipe, tailSeverities, tailTextRecipe };
47
79
 
48
80
  //# sourceMappingURL=tail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tail.js","names":[],"sources":["../../src/recipes/tail.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nconst tailSeverities = ['quiet', 'plain', 'warning', 'danger', 'success'] as const\n\ntype TailSeverity = (typeof tailSeverities)[number]\n\nconst defaultTailSeverity = 'plain' satisfies TailSeverity\n\nconst tailRecipe = cva([\n 'overflow-hidden rounded-tf-block bg-tf-sunken-quiet',\n 'shadow-[inset_0_0_0_var(--spacing-tf-hairline)_var(--color-tf-line-2)]',\n])\n\nconst tailScrollRecipe = cva('tf-scroll-thin overflow-x-auto overflow-y-auto')\n\nconst tailLineRecipe = cva(\n 'grid min-w-max grid-cols-[3px_6.5rem_1fr] items-center gap-x-3 py-0.5',\n {\n defaultVariants: { severity: defaultTailSeverity },\n variants: {\n severity: {\n danger: 'bg-tf-danger-wash',\n plain: '',\n quiet: '',\n success: 'bg-tf-success-tint',\n warning: 'bg-tf-warning-tint',\n } satisfies Record<TailSeverity, string>,\n },\n },\n)\n\nconst tailGutterRecipe = cva('h-full', {\n defaultVariants: { severity: defaultTailSeverity },\n variants: {\n severity: {\n danger: 'bg-tf-danger-hi',\n plain: 'bg-transparent',\n quiet: 'bg-transparent',\n success: 'bg-tf-success-hi',\n warning: 'bg-tf-warning-hi',\n } satisfies Record<TailSeverity, string>,\n },\n})\n\nconst tailAtRecipe = cva('py-0.5 pl-3 font-mono text-tf-caption-sm text-tf-muted')\n\nconst tailTextRecipe = cva('py-0.5 pr-3 font-mono text-tf-caption-sm whitespace-nowrap', {\n defaultVariants: { severity: defaultTailSeverity },\n variants: {\n severity: {\n danger: 'text-tf-danger-hi',\n plain: 'text-tf-fg',\n quiet: 'text-tf-muted',\n success: 'text-tf-success-hi',\n warning: 'text-tf-warning-hi',\n } satisfies Record<TailSeverity, string>,\n },\n})\n\nconst tailEmptyRecipe = cva('p-5 text-center text-tf-caption font-medium text-tf-muted')\n\nexport {\n type TailSeverity,\n defaultTailSeverity,\n tailAtRecipe,\n tailEmptyRecipe,\n tailGutterRecipe,\n tailLineRecipe,\n tailRecipe,\n tailScrollRecipe,\n tailSeverities,\n tailTextRecipe,\n}\n"],"mappings":";;AAEA,MAAM,iBAAiB;CAAC;CAAS;CAAS;CAAW;CAAU;AAAS;AAIxE,MAAM,sBAAsB;AAE5B,MAAM,aAAa,IAAI,CACrB,uDACA,wEACF,CAAC;AAED,MAAM,mBAAmB,IAAI,gDAAgD;AAE7E,MAAM,iBAAiB,IACrB,yEACA;CACE,iBAAiB,EAAE,UAAU,oBAAoB;CACjD,UAAU,EACR,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,SAAS;EACT,SAAS;CACX,EACF;AACF,CACF;AAEA,MAAM,mBAAmB,IAAI,UAAU;CACrC,iBAAiB,EAAE,UAAU,oBAAoB;CACjD,UAAU,EACR,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,SAAS;EACT,SAAS;CACX,EACF;AACF,CAAC;AAED,MAAM,eAAe,IAAI,wDAAwD;AAEjF,MAAM,iBAAiB,IAAI,8DAA8D;CACvF,iBAAiB,EAAE,UAAU,oBAAoB;CACjD,UAAU,EACR,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,SAAS;EACT,SAAS;CACX,EACF;AACF,CAAC;AAED,MAAM,kBAAkB,IAAI,2DAA2D"}
1
+ {"version":3,"file":"tail.js","names":[],"sources":["../../src/recipes/tail.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { anatomy } from '#anatomy'\n\nconst tailSeverities = ['quiet', 'plain', 'warning', 'danger', 'success'] as const\n\ntype TailSeverity = (typeof tailSeverities)[number]\n\nconst tailRecipe = cva([\n 'overflow-hidden rounded-tf-block bg-tf-sunken-quiet',\n 'shadow-[inset_0_0_0_var(--spacing-tf-hairline)_var(--color-tf-line-2)]',\n])\n\nconst tailScrollRecipe = cva('tf-scroll-thin overflow-x-auto overflow-y-auto')\n\nconst tailLineRecipe = cva(\n 'grid min-w-max grid-cols-[3px_6.5rem_1fr] items-center gap-x-3 py-0.5',\n {\n defaultVariants: { severity: 'plain' },\n variants: {\n severity: {\n danger: 'bg-tf-danger-wash',\n plain: '',\n quiet: '',\n success: 'bg-tf-success-tint',\n warning: 'bg-tf-warning-tint',\n } satisfies Record<TailSeverity, string>,\n },\n },\n)\n\nconst tailGutterRecipe = cva('h-full', {\n defaultVariants: { severity: 'plain' },\n variants: {\n severity: {\n danger: 'bg-tf-danger-hi',\n plain: 'bg-transparent',\n quiet: 'bg-transparent',\n success: 'bg-tf-success-hi',\n warning: 'bg-tf-warning-hi',\n } satisfies Record<TailSeverity, string>,\n },\n})\n\nconst tailAtRecipe = cva('py-0.5 pl-3 font-mono text-tf-caption-sm text-tf-muted')\n\nconst tailTextRecipe = cva('py-0.5 pr-3 font-mono text-tf-caption-sm whitespace-nowrap', {\n defaultVariants: { severity: 'plain' },\n variants: {\n severity: {\n danger: 'text-tf-danger-hi',\n plain: 'text-tf-fg',\n quiet: 'text-tf-muted',\n success: 'text-tf-success-hi',\n warning: 'text-tf-warning-hi',\n } satisfies Record<TailSeverity, string>,\n },\n})\n\nconst tailEmptyRecipe = cva('p-5 text-center text-tf-caption font-medium text-tf-muted')\n\nconst tailAnatomy = anatomy({\n at: { part: 'at', recipe: tailAtRecipe, required: false },\n empty: { part: 'empty', recipe: tailEmptyRecipe, required: false },\n line: { part: 'line', recipe: tailLineRecipe, required: false },\n root: { part: 'tail', recipe: tailRecipe, required: true },\n scroll: { part: 'scroll', recipe: tailScrollRecipe, required: true },\n text: { part: 'text', recipe: tailTextRecipe, required: false },\n})\n\nexport {\n type TailSeverity,\n tailAnatomy,\n tailAtRecipe,\n tailEmptyRecipe,\n tailGutterRecipe,\n tailLineRecipe,\n tailRecipe,\n tailScrollRecipe,\n tailSeverities,\n tailTextRecipe,\n}\n"],"mappings":";;;AAIA,MAAM,iBAAiB;CAAC;CAAS;CAAS;CAAW;CAAU;AAAS;AAIxE,MAAM,aAAa,IAAI,CACrB,uDACA,wEACF,CAAC;AAED,MAAM,mBAAmB,IAAI,gDAAgD;AAE7E,MAAM,iBAAiB,IACrB,yEACA;CACE,iBAAiB,EAAE,UAAU,QAAQ;CACrC,UAAU,EACR,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,SAAS;EACT,SAAS;CACX,EACF;AACF,CACF;AAEA,MAAM,mBAAmB,IAAI,UAAU;CACrC,iBAAiB,EAAE,UAAU,QAAQ;CACrC,UAAU,EACR,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,SAAS;EACT,SAAS;CACX,EACF;AACF,CAAC;AAED,MAAM,eAAe,IAAI,wDAAwD;AAEjF,MAAM,iBAAiB,IAAI,8DAA8D;CACvF,iBAAiB,EAAE,UAAU,QAAQ;CACrC,UAAU,EACR,UAAU;EACR,QAAQ;EACR,OAAO;EACP,OAAO;EACP,SAAS;EACT,SAAS;CACX,EACF;AACF,CAAC;AAED,MAAM,kBAAkB,IAAI,2DAA2D;AAEvF,MAAM,cAAc,QAAQ;CAC1B,IAAI;EAAE,MAAM;EAAM,QAAQ;EAAc,UAAU;CAAM;CACxD,OAAO;EAAE,MAAM;EAAS,QAAQ;EAAiB,UAAU;CAAM;CACjE,MAAM;EAAE,MAAM;EAAQ,QAAQ;EAAgB,UAAU;CAAM;CAC9D,MAAM;EAAE,MAAM;EAAQ,QAAQ;EAAY,UAAU;CAAK;CACzD,QAAQ;EAAE,MAAM;EAAU,QAAQ;EAAkB,UAAU;CAAK;CACnE,MAAM;EAAE,MAAM;EAAQ,QAAQ;EAAgB,UAAU;CAAM;AAChE,CAAC"}
@@ -5,7 +5,6 @@ type TextWeight = 'normal' | 'medium' | 'semibold' | 'bold';
5
5
  type TextFamily = 'sans' | 'mono' | 'display';
6
6
  declare const defaultTextSize = "body";
7
7
  declare const defaultTextTone = "fg";
8
- declare const defaultTextWeight = "normal";
9
8
  declare const defaultTextFamily = "sans";
10
9
  declare const textSizes: readonly ["caption-sm", "caption", "body-sm", "body", "lead"];
11
10
  declare const textTones: readonly ["fg", "muted", "accent", "danger", "info", "success", "warning"];
@@ -14,12 +13,26 @@ declare const textFamilies: readonly ["sans", "mono", "display"];
14
13
  declare const restingWeight: (size: TextSize, uppercase?: boolean) => TextWeight;
15
14
  declare const textRecipe: (props?: ({
16
15
  family?: "display" | "sans" | "mono" | null | undefined;
17
- size?: "lead" | "caption-sm" | "caption" | "body-sm" | "body" | null | undefined;
16
+ size?: "body" | "caption" | "lead" | "caption-sm" | "body-sm" | null | undefined;
18
17
  tabular?: boolean | null | undefined;
19
18
  tone?: "accent" | "success" | "warning" | "info" | "danger" | "fg" | "muted" | null | undefined;
20
19
  uppercase?: boolean | null | undefined;
21
20
  weight?: "normal" | "medium" | "semibold" | "bold" | null | undefined;
22
21
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
22
+ declare const textAnatomy: {
23
+ readonly root: {
24
+ readonly part: "text";
25
+ readonly recipe: (props?: ({
26
+ family?: "display" | "sans" | "mono" | null | undefined;
27
+ size?: "body" | "caption" | "lead" | "caption-sm" | "body-sm" | null | undefined;
28
+ tabular?: boolean | null | undefined;
29
+ tone?: "accent" | "success" | "warning" | "info" | "danger" | "fg" | "muted" | null | undefined;
30
+ uppercase?: boolean | null | undefined;
31
+ weight?: "normal" | "medium" | "semibold" | "bold" | null | undefined;
32
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
33
+ readonly required: true;
34
+ };
35
+ };
23
36
  //#endregion
24
- export { type TextFamily, type TextSize, type TextTone, type TextWeight, defaultTextFamily, defaultTextSize, defaultTextTone, defaultTextWeight, restingWeight, textFamilies, textRecipe, textSizes, textTones, textWeights };
37
+ export { type TextFamily, type TextSize, type TextTone, type TextWeight, defaultTextFamily, defaultTextSize, defaultTextTone, restingWeight, textAnatomy, textFamilies, textRecipe, textSizes, textTones, textWeights };
25
38
  //# sourceMappingURL=text.d.ts.map
@@ -1,10 +1,10 @@
1
+ import { anatomy } from "../anatomy.js";
1
2
  import { toneText } from "../tone.js";
2
3
  import { eyebrowType } from "../parts/eyebrow.js";
3
4
  import { cva } from "class-variance-authority";
4
5
  //#region src/recipes/text.ts
5
6
  const defaultTextSize = "body";
6
7
  const defaultTextTone = "fg";
7
- const defaultTextWeight = "normal";
8
8
  const defaultTextFamily = "sans";
9
9
  const textSizes = [
10
10
  "caption-sm",
@@ -56,7 +56,7 @@ const textRecipe = cva("tf-transition motion-reduce:transition-none", {
56
56
  tabular: false,
57
57
  tone: "fg",
58
58
  uppercase: false,
59
- weight: defaultTextWeight
59
+ weight: "normal"
60
60
  },
61
61
  variants: {
62
62
  family: {
@@ -88,7 +88,12 @@ const textRecipe = cva("tf-transition motion-reduce:transition-none", {
88
88
  }
89
89
  }
90
90
  });
91
+ const textAnatomy = anatomy({ root: {
92
+ part: "text",
93
+ recipe: textRecipe,
94
+ required: true
95
+ } });
91
96
  //#endregion
92
- export { defaultTextFamily, defaultTextSize, defaultTextTone, defaultTextWeight, restingWeight, textFamilies, textRecipe, textSizes, textTones, textWeights };
97
+ export { defaultTextFamily, defaultTextSize, defaultTextTone, restingWeight, textAnatomy, textFamilies, textRecipe, textSizes, textTones, textWeights };
93
98
 
94
99
  //# sourceMappingURL=text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","names":[],"sources":["../../src/recipes/text.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { eyebrowType } from '#parts/eyebrow'\nimport { toneText } from '#tone'\n\ntype TextSize = 'caption-sm' | 'caption' | 'body-sm' | 'body' | 'lead'\n\ntype TextTone = 'fg' | 'muted' | 'accent' | 'danger' | 'info' | 'success' | 'warning'\n\ntype TextWeight = 'normal' | 'medium' | 'semibold' | 'bold'\n\ntype TextFamily = 'sans' | 'mono' | 'display'\n\nconst defaultTextSize = 'body' satisfies TextSize\n\nconst defaultTextTone = 'fg' satisfies TextTone\n\nconst defaultTextWeight = 'normal' satisfies TextWeight\n\nconst defaultTextFamily = 'sans' satisfies TextFamily\n\nconst textSizes = [\n 'caption-sm',\n 'caption',\n 'body-sm',\n 'body',\n 'lead',\n] as const satisfies readonly TextSize[]\n\nconst textTones = [\n 'fg',\n 'muted',\n 'accent',\n 'danger',\n 'info',\n 'success',\n 'warning',\n] as const satisfies readonly TextTone[]\n\nconst textWeights = [\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n] as const satisfies readonly TextWeight[]\n\nconst textFamilies = ['sans', 'mono', 'display'] as const satisfies readonly TextFamily[]\n\nconst SIZE_WEIGHT = {\n body: 'normal',\n 'body-sm': 'medium',\n caption: 'medium',\n 'caption-sm': 'medium',\n lead: 'normal',\n} satisfies Record<TextSize, TextWeight>\n\nconst restingWeight = (size: TextSize, uppercase?: boolean): TextWeight => {\n if (uppercase === true) {\n return 'medium'\n }\n return SIZE_WEIGHT[size]\n}\n\nconst TONE_CLASS = {\n ...toneText,\n fg: 'text-tf-fg',\n muted: 'text-tf-muted',\n} satisfies Record<TextTone, string>\n\nconst textRecipe = cva('tf-transition motion-reduce:transition-none', {\n defaultVariants: {\n family: defaultTextFamily,\n size: defaultTextSize,\n tabular: false,\n tone: defaultTextTone,\n uppercase: false,\n weight: defaultTextWeight,\n },\n variants: {\n family: {\n display: 'font-tf-display',\n mono: 'font-mono',\n sans: 'font-tf-body',\n } satisfies Record<TextFamily, string>,\n size: {\n body: 'text-tf-body',\n 'body-sm': 'text-tf-body-sm',\n caption: 'text-tf-caption',\n 'caption-sm': 'text-tf-caption-sm',\n lead: 'max-w-tf-measure text-tf-lead',\n } satisfies Record<TextSize, string>,\n tabular: { false: '', true: 'tabular-nums' },\n tone: TONE_CLASS,\n uppercase: { false: '', true: eyebrowType },\n weight: {\n bold: 'font-bold',\n medium: 'font-medium',\n normal: 'font-normal',\n semibold: 'font-semibold',\n } satisfies Record<TextWeight, string>,\n },\n})\n\nexport {\n type TextFamily,\n type TextSize,\n type TextTone,\n type TextWeight,\n defaultTextFamily,\n defaultTextSize,\n defaultTextTone,\n defaultTextWeight,\n restingWeight,\n textFamilies,\n textRecipe,\n textSizes,\n textTones,\n textWeights,\n}\n"],"mappings":";;;;AAaA,MAAM,kBAAkB;AAExB,MAAM,kBAAkB;AAExB,MAAM,oBAAoB;AAE1B,MAAM,oBAAoB;AAE1B,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,cAAc;CAClB;CACA;CACA;CACA;AACF;AAEA,MAAM,eAAe;CAAC;CAAQ;CAAQ;AAAS;AAE/C,MAAM,cAAc;CAClB,MAAM;CACN,WAAW;CACX,SAAS;CACT,cAAc;CACd,MAAM;AACR;AAEA,MAAM,iBAAiB,MAAgB,cAAoC;CACzE,IAAI,cAAc,MAChB,OAAO;CAET,OAAO,YAAY;AACrB;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,IAAI;CACJ,OAAO;AACT;AAEA,MAAM,aAAa,IAAI,+CAA+C;CACpE,iBAAiB;EACf,QAAQ;EACR,MAAM;EACN,SAAS;EACT,MAAA;EACA,WAAW;EACX,QAAQ;CACV;CACA,UAAU;EACR,QAAQ;GACN,SAAS;GACT,MAAM;GACN,MAAM;EACR;EACA,MAAM;GACJ,MAAM;GACN,WAAW;GACX,SAAS;GACT,cAAc;GACd,MAAM;EACR;EACA,SAAS;GAAE,OAAO;GAAI,MAAM;EAAe;EAC3C,MAAM;EACN,WAAW;GAAE,OAAO;GAAI,MAAM;EAAY;EAC1C,QAAQ;GACN,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"text.js","names":[],"sources":["../../src/recipes/text.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { anatomy } from '#anatomy'\nimport { eyebrowType } from '#parts/eyebrow'\nimport { toneText } from '#tone'\n\ntype TextSize = 'caption-sm' | 'caption' | 'body-sm' | 'body' | 'lead'\n\ntype TextTone = 'fg' | 'muted' | 'accent' | 'danger' | 'info' | 'success' | 'warning'\n\ntype TextWeight = 'normal' | 'medium' | 'semibold' | 'bold'\n\ntype TextFamily = 'sans' | 'mono' | 'display'\n\nconst defaultTextSize = 'body' satisfies TextSize\n\nconst defaultTextTone = 'fg' satisfies TextTone\n\nconst defaultTextFamily = 'sans' satisfies TextFamily\n\nconst textSizes = [\n 'caption-sm',\n 'caption',\n 'body-sm',\n 'body',\n 'lead',\n] as const satisfies readonly TextSize[]\n\nconst textTones = [\n 'fg',\n 'muted',\n 'accent',\n 'danger',\n 'info',\n 'success',\n 'warning',\n] as const satisfies readonly TextTone[]\n\nconst textWeights = [\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n] as const satisfies readonly TextWeight[]\n\nconst textFamilies = ['sans', 'mono', 'display'] as const satisfies readonly TextFamily[]\n\nconst SIZE_WEIGHT = {\n body: 'normal',\n 'body-sm': 'medium',\n caption: 'medium',\n 'caption-sm': 'medium',\n lead: 'normal',\n} satisfies Record<TextSize, TextWeight>\n\nconst restingWeight = (size: TextSize, uppercase?: boolean): TextWeight => {\n if (uppercase === true) {\n return 'medium'\n }\n return SIZE_WEIGHT[size]\n}\n\nconst TONE_CLASS = {\n ...toneText,\n fg: 'text-tf-fg',\n muted: 'text-tf-muted',\n} satisfies Record<TextTone, string>\n\nconst textRecipe = cva('tf-transition motion-reduce:transition-none', {\n defaultVariants: {\n family: defaultTextFamily,\n size: defaultTextSize,\n tabular: false,\n tone: defaultTextTone,\n uppercase: false,\n weight: 'normal',\n },\n variants: {\n family: {\n display: 'font-tf-display',\n mono: 'font-mono',\n sans: 'font-tf-body',\n } satisfies Record<TextFamily, string>,\n size: {\n body: 'text-tf-body',\n 'body-sm': 'text-tf-body-sm',\n caption: 'text-tf-caption',\n 'caption-sm': 'text-tf-caption-sm',\n lead: 'max-w-tf-measure text-tf-lead',\n } satisfies Record<TextSize, string>,\n tabular: { false: '', true: 'tabular-nums' },\n tone: TONE_CLASS,\n uppercase: { false: '', true: eyebrowType },\n weight: {\n bold: 'font-bold',\n medium: 'font-medium',\n normal: 'font-normal',\n semibold: 'font-semibold',\n } satisfies Record<TextWeight, string>,\n },\n})\n\nconst textAnatomy = anatomy({\n root: { part: 'text', recipe: textRecipe, required: true },\n})\n\nexport {\n type TextFamily,\n type TextSize,\n type TextTone,\n type TextWeight,\n defaultTextFamily,\n defaultTextSize,\n defaultTextTone,\n restingWeight,\n textAnatomy,\n textFamilies,\n textRecipe,\n textSizes,\n textTones,\n textWeights,\n}\n"],"mappings":";;;;;AAcA,MAAM,kBAAkB;AAExB,MAAM,kBAAkB;AAExB,MAAM,oBAAoB;AAE1B,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,YAAY;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,cAAc;CAClB;CACA;CACA;CACA;AACF;AAEA,MAAM,eAAe;CAAC;CAAQ;CAAQ;AAAS;AAE/C,MAAM,cAAc;CAClB,MAAM;CACN,WAAW;CACX,SAAS;CACT,cAAc;CACd,MAAM;AACR;AAEA,MAAM,iBAAiB,MAAgB,cAAoC;CACzE,IAAI,cAAc,MAChB,OAAO;CAET,OAAO,YAAY;AACrB;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,IAAI;CACJ,OAAO;AACT;AAEA,MAAM,aAAa,IAAI,+CAA+C;CACpE,iBAAiB;EACf,QAAQ;EACR,MAAM;EACN,SAAS;EACT,MAAA;EACA,WAAW;EACX,QAAQ;CACV;CACA,UAAU;EACR,QAAQ;GACN,SAAS;GACT,MAAM;GACN,MAAM;EACR;EACA,MAAM;GACJ,MAAM;GACN,WAAW;GACX,SAAS;GACT,cAAc;GACd,MAAM;EACR;EACA,SAAS;GAAE,OAAO;GAAI,MAAM;EAAe;EAC3C,MAAM;EACN,WAAW;GAAE,OAAO;GAAI,MAAM;EAAY;EAC1C,QAAQ;GACN,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;CACF;AACF,CAAC;AAED,MAAM,cAAc,QAAQ,EAC1B,MAAM;CAAE,MAAM;CAAQ,QAAQ;CAAY,UAAU;AAAK,EAC3D,CAAC"}
@@ -8,6 +8,51 @@ declare const textareaRecipe: (props?: import("class-variance-authority/types").
8
8
  declare const textareaCountRecipe: (props?: ({
9
9
  reach?: "clear" | "near" | "full" | null | undefined;
10
10
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ declare const textareaAnatomy: {
12
+ readonly cloud: {
13
+ readonly part: "cloud";
14
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
15
+ readonly required: true;
16
+ };
17
+ readonly count: {
18
+ readonly part: "count";
19
+ readonly recipe: (props?: ({
20
+ reach?: "clear" | "near" | "full" | null | undefined;
21
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
22
+ readonly required: false;
23
+ };
24
+ readonly foot: {
25
+ readonly part: "foot";
26
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
27
+ readonly required: true;
28
+ };
29
+ readonly nebula: {
30
+ readonly part: "nebula";
31
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
32
+ readonly required: true;
33
+ };
34
+ readonly root: {
35
+ readonly part: "textarea";
36
+ readonly recipe: (props?: ({
37
+ fullWidth?: boolean | null | undefined;
38
+ message?: boolean | null | undefined;
39
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
40
+ readonly required: true;
41
+ };
42
+ readonly row: {
43
+ readonly part: "row";
44
+ readonly recipe: (props?: ({
45
+ invalid?: boolean | null | undefined;
46
+ loading?: boolean | null | undefined;
47
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
48
+ readonly required: true;
49
+ };
50
+ readonly spoken: {
51
+ readonly part: "spoken";
52
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
53
+ readonly required: false;
54
+ };
55
+ };
11
56
  //#endregion
12
- export { type TextareaReach, textareaCountRecipe, textareaRecipe, textareaShellRecipe };
57
+ export { type TextareaReach, textareaAnatomy, textareaCountRecipe, textareaRecipe, textareaShellRecipe };
13
58
  //# sourceMappingURL=textarea.d.ts.map
@@ -1,5 +1,8 @@
1
+ import { anatomy } from "../anatomy.js";
1
2
  import { controlBase, controlInert } from "../parts/control.js";
3
+ import { nebulaCloudLowRecipe, nebulaVeilRecipe } from "./nebula.js";
2
4
  import { controlFailed, controlHealthy, controlShell } from "../parts/shell.js";
5
+ import { fieldFootRecipe, fieldRecipe } from "./field.js";
3
6
  import { cva } from "class-variance-authority";
4
7
  //#region src/recipes/textarea.ts
5
8
  const shellSurface = [
@@ -42,7 +45,44 @@ const textareaCountRecipe = cva(["flex-none pt-2 font-mono text-tf-caption-sm ta
42
45
  near: "text-tf-warning-hi"
43
46
  } }
44
47
  });
48
+ const textareaAnatomy = anatomy({
49
+ cloud: {
50
+ part: "cloud",
51
+ recipe: nebulaCloudLowRecipe,
52
+ required: true
53
+ },
54
+ count: {
55
+ part: "count",
56
+ recipe: textareaCountRecipe,
57
+ required: false
58
+ },
59
+ foot: {
60
+ part: "foot",
61
+ recipe: fieldFootRecipe,
62
+ required: true
63
+ },
64
+ nebula: {
65
+ part: "nebula",
66
+ recipe: nebulaVeilRecipe,
67
+ required: true
68
+ },
69
+ root: {
70
+ part: "textarea",
71
+ recipe: fieldRecipe,
72
+ required: true
73
+ },
74
+ row: {
75
+ part: "row",
76
+ recipe: textareaShellRecipe,
77
+ required: true
78
+ },
79
+ spoken: {
80
+ part: "spoken",
81
+ recipe: fieldFootRecipe,
82
+ required: false
83
+ }
84
+ });
45
85
  //#endregion
46
- export { textareaCountRecipe, textareaRecipe, textareaShellRecipe };
86
+ export { textareaAnatomy, textareaCountRecipe, textareaRecipe, textareaShellRecipe };
47
87
 
48
88
  //# sourceMappingURL=textarea.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"textarea.js","names":[],"sources":["../../src/recipes/textarea.ts"],"sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { anatomy } from '#anatomy'\nimport { controlBase, controlInert } from '#parts/control'\nimport { controlFailed, controlHealthy, controlShell } from '#parts/shell'\n\nimport { fieldFootRecipe, fieldRecipe } from './field'\nimport { nebulaCloudLowRecipe, nebulaVeilRecipe } from './nebula'\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\nconst textareaAnatomy = anatomy({\n cloud: { part: 'cloud', recipe: nebulaCloudLowRecipe, required: true },\n count: { part: 'count', recipe: textareaCountRecipe, required: false },\n foot: { part: 'foot', recipe: fieldFootRecipe, required: true },\n nebula: { part: 'nebula', recipe: nebulaVeilRecipe, required: true },\n root: { part: 'textarea', recipe: fieldRecipe, required: true },\n row: { part: 'row', recipe: textareaShellRecipe, required: true },\n spoken: { part: 'spoken', recipe: fieldFootRecipe, required: false },\n})\n\nexport {\n type TextareaReach,\n textareaAnatomy,\n textareaCountRecipe,\n textareaRecipe,\n textareaShellRecipe,\n}\n"],"mappings":";;;;;;;AAkBA,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;AAEA,MAAM,kBAAkB,QAAQ;CAC9B,OAAO;EAAE,MAAM;EAAS,QAAQ;EAAsB,UAAU;CAAK;CACrE,OAAO;EAAE,MAAM;EAAS,QAAQ;EAAqB,UAAU;CAAM;CACrE,MAAM;EAAE,MAAM;EAAQ,QAAQ;EAAiB,UAAU;CAAK;CAC9D,QAAQ;EAAE,MAAM;EAAU,QAAQ;EAAkB,UAAU;CAAK;CACnE,MAAM;EAAE,MAAM;EAAY,QAAQ;EAAa,UAAU;CAAK;CAC9D,KAAK;EAAE,MAAM;EAAO,QAAQ;EAAqB,UAAU;CAAK;CAChE,QAAQ;EAAE,MAAM;EAAU,QAAQ;EAAiB,UAAU;CAAM;AACrE,CAAC"}
@@ -13,6 +13,28 @@ declare const tileGlyphRecipe: (props?: ({
13
13
  rest?: "quiet" | "filled" | "lit" | null | undefined;
14
14
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
15
15
  declare const tileCloudRecipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
16
+ declare const tileAnatomy: {
17
+ readonly cloud: {
18
+ readonly part: "cloud";
19
+ readonly recipe: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
20
+ readonly required: false;
21
+ };
22
+ readonly glyph: {
23
+ readonly part: "glyph";
24
+ readonly recipe: (props?: ({
25
+ rest?: "quiet" | "filled" | "lit" | null | undefined;
26
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
27
+ readonly required: true;
28
+ };
29
+ readonly root: {
30
+ readonly part: "tile";
31
+ readonly recipe: (props?: ({
32
+ rest?: "quiet" | "filled" | "lit" | null | undefined;
33
+ tone?: "accent" | "success" | "warning" | "info" | "danger" | null | undefined;
34
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
35
+ readonly required: true;
36
+ };
37
+ };
16
38
  //#endregion
17
- export { type TileRest, type TileTone, defaultTileRest, defaultTileTone, tileCloudRecipe, tileGlyphRecipe, tileRecipe, tileRests, tileTones };
39
+ export { type TileRest, type TileTone, defaultTileRest, defaultTileTone, tileAnatomy, tileCloudRecipe, tileGlyphRecipe, tileRecipe, tileRests, tileTones };
18
40
  //# sourceMappingURL=tile.d.ts.map