@lerianstudio/sindarian-ui 1.3.0 → 1.4.0-beta.2

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 (160) hide show
  1. package/README.md +93 -12
  2. package/dist/components/card/account-card/index.d.ts.map +1 -1
  3. package/dist/components/card/account-card/index.js +2 -2
  4. package/dist/components/card/entity-card/index.d.ts.map +1 -1
  5. package/dist/components/card/entity-card/index.js +5 -1
  6. package/dist/components/dialog/confirmation-dialog/index.d.ts +10 -2
  7. package/dist/components/dialog/confirmation-dialog/index.d.ts.map +1 -1
  8. package/dist/components/dialog/confirmation-dialog/index.js +72 -7
  9. package/dist/components/page-header/index.d.ts +14 -2
  10. package/dist/components/page-header/index.d.ts.map +1 -1
  11. package/dist/components/page-header/index.js +4 -4
  12. package/dist/components/ui/accordion/index.js +1 -1
  13. package/dist/components/ui/alert/index.d.ts +1 -1
  14. package/dist/components/ui/alert/styles.css +3 -3
  15. package/dist/components/ui/alert-dialog/index.d.ts +8 -2
  16. package/dist/components/ui/alert-dialog/index.d.ts.map +1 -1
  17. package/dist/components/ui/alert-dialog/index.js +4 -4
  18. package/dist/components/ui/autocomplete/index.d.ts +1 -1
  19. package/dist/components/ui/autocomplete/index.d.ts.map +1 -1
  20. package/dist/components/ui/autocomplete/index.js +42 -6
  21. package/dist/components/ui/badge/index.d.ts +10 -2
  22. package/dist/components/ui/badge/index.d.ts.map +1 -1
  23. package/dist/components/ui/badge/index.js +24 -4
  24. package/dist/components/ui/breadcrumb/styles.css +1 -1
  25. package/dist/components/ui/button/index.d.ts +2 -2
  26. package/dist/components/ui/button/index.d.ts.map +1 -1
  27. package/dist/components/ui/button/index.js +2 -1
  28. package/dist/components/ui/button/styles.css +17 -4
  29. package/dist/components/ui/card/index.d.ts +10 -2
  30. package/dist/components/ui/card/index.d.ts.map +1 -1
  31. package/dist/components/ui/card/index.js +2 -2
  32. package/dist/components/ui/command/index.js +1 -1
  33. package/dist/components/ui/dialog/styles.css +3 -3
  34. package/dist/components/ui/dropdown-menu/index.js +2 -2
  35. package/dist/components/ui/hover-card/index.js +1 -1
  36. package/dist/components/ui/input/adornment.d.ts +1 -1
  37. package/dist/components/ui/loading-button/index.js +1 -1
  38. package/dist/components/ui/multiple-select/index.js +1 -1
  39. package/dist/components/ui/otp-input/index.js +1 -1
  40. package/dist/components/ui/paper-collapsible/index.js +1 -1
  41. package/dist/components/ui/popover/index.js +1 -1
  42. package/dist/components/ui/select/styles.css +1 -1
  43. package/dist/components/ui/sheet/index.d.ts +1 -1
  44. package/dist/components/ui/sheet/index.js +2 -2
  45. package/dist/components/ui/sidebar/sidebar-expand-button.d.ts +5 -0
  46. package/dist/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -1
  47. package/dist/components/ui/sidebar/sidebar-expand-button.js +1 -1
  48. package/dist/components/ui/sidebar/sidebar-item-collapsible.js +1 -1
  49. package/dist/components/ui/skeleton/index.js +1 -1
  50. package/dist/components/ui/toast/toaster.d.ts +5 -0
  51. package/dist/components/ui/toast/toaster.d.ts.map +1 -1
  52. package/dist/components/ui/toast/toaster.js +6 -2
  53. package/dist/components/ui/tooltip/index.js +1 -1
  54. package/dist/domain/blotter/index.d.ts +7 -1
  55. package/dist/domain/blotter/index.d.ts.map +1 -1
  56. package/dist/domain/blotter/index.js +7 -3
  57. package/dist/domain/delinquency-aging/aging-buckets.d.ts +4 -1
  58. package/dist/domain/delinquency-aging/aging-buckets.d.ts.map +1 -1
  59. package/dist/domain/delinquency-aging/aging-buckets.js +7 -2
  60. package/dist/domain/delinquency-aging/index.d.ts +11 -1
  61. package/dist/domain/delinquency-aging/index.d.ts.map +1 -1
  62. package/dist/domain/delinquency-aging/index.js +7 -3
  63. package/dist/domain/figure/index.d.ts +13 -6
  64. package/dist/domain/figure/index.d.ts.map +1 -1
  65. package/dist/domain/figure/index.js +1 -0
  66. package/dist/domain/section-label/index.d.ts +7 -1
  67. package/dist/domain/section-label/index.d.ts.map +1 -1
  68. package/dist/domain/section-label/index.js +6 -2
  69. package/dist/enterprise/app-shell/index.d.ts +14 -0
  70. package/dist/enterprise/app-shell/index.d.ts.map +1 -1
  71. package/dist/enterprise/app-shell/index.js +2 -2
  72. package/dist/enterprise/data-table/index.d.ts +13 -1
  73. package/dist/enterprise/data-table/index.d.ts.map +1 -1
  74. package/dist/enterprise/data-table/index.js +7 -3
  75. package/dist/enterprise/search-input/index.d.ts +7 -1
  76. package/dist/enterprise/search-input/index.d.ts.map +1 -1
  77. package/dist/enterprise/search-input/index.js +2 -2
  78. package/dist/esm/components/card/account-card/index.d.ts.map +1 -1
  79. package/dist/esm/components/card/account-card/index.js +2 -2
  80. package/dist/esm/components/card/entity-card/index.d.ts.map +1 -1
  81. package/dist/esm/components/card/entity-card/index.js +5 -1
  82. package/dist/esm/components/dialog/confirmation-dialog/index.d.ts +10 -2
  83. package/dist/esm/components/dialog/confirmation-dialog/index.d.ts.map +1 -1
  84. package/dist/esm/components/dialog/confirmation-dialog/index.js +39 -7
  85. package/dist/esm/components/page-header/index.d.ts +14 -2
  86. package/dist/esm/components/page-header/index.d.ts.map +1 -1
  87. package/dist/esm/components/page-header/index.js +4 -4
  88. package/dist/esm/components/ui/accordion/index.js +1 -1
  89. package/dist/esm/components/ui/alert/index.d.ts +1 -1
  90. package/dist/esm/components/ui/alert-dialog/index.d.ts +8 -2
  91. package/dist/esm/components/ui/alert-dialog/index.d.ts.map +1 -1
  92. package/dist/esm/components/ui/alert-dialog/index.js +4 -4
  93. package/dist/esm/components/ui/autocomplete/index.d.ts +1 -1
  94. package/dist/esm/components/ui/autocomplete/index.d.ts.map +1 -1
  95. package/dist/esm/components/ui/autocomplete/index.js +42 -6
  96. package/dist/esm/components/ui/badge/index.d.ts +10 -2
  97. package/dist/esm/components/ui/badge/index.d.ts.map +1 -1
  98. package/dist/esm/components/ui/badge/index.js +24 -4
  99. package/dist/esm/components/ui/button/index.d.ts +2 -2
  100. package/dist/esm/components/ui/button/index.d.ts.map +1 -1
  101. package/dist/esm/components/ui/button/index.js +2 -1
  102. package/dist/esm/components/ui/card/index.d.ts +10 -2
  103. package/dist/esm/components/ui/card/index.d.ts.map +1 -1
  104. package/dist/esm/components/ui/card/index.js +2 -2
  105. package/dist/esm/components/ui/command/index.js +1 -1
  106. package/dist/esm/components/ui/dropdown-menu/index.js +2 -2
  107. package/dist/esm/components/ui/hover-card/index.js +1 -1
  108. package/dist/esm/components/ui/input/adornment.d.ts +1 -1
  109. package/dist/esm/components/ui/loading-button/index.js +1 -1
  110. package/dist/esm/components/ui/multiple-select/index.js +1 -1
  111. package/dist/esm/components/ui/otp-input/index.js +1 -1
  112. package/dist/esm/components/ui/paper-collapsible/index.js +1 -1
  113. package/dist/esm/components/ui/popover/index.js +1 -1
  114. package/dist/esm/components/ui/sheet/index.d.ts +1 -1
  115. package/dist/esm/components/ui/sheet/index.js +2 -2
  116. package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts +5 -0
  117. package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -1
  118. package/dist/esm/components/ui/sidebar/sidebar-expand-button.js +1 -1
  119. package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.js +1 -1
  120. package/dist/esm/components/ui/skeleton/index.js +1 -1
  121. package/dist/esm/components/ui/toast/toaster.d.ts +5 -0
  122. package/dist/esm/components/ui/toast/toaster.d.ts.map +1 -1
  123. package/dist/esm/components/ui/toast/toaster.js +6 -2
  124. package/dist/esm/components/ui/tooltip/index.js +1 -1
  125. package/dist/esm/domain/blotter/index.d.ts +7 -1
  126. package/dist/esm/domain/blotter/index.d.ts.map +1 -1
  127. package/dist/esm/domain/blotter/index.js +7 -3
  128. package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts +4 -1
  129. package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts.map +1 -1
  130. package/dist/esm/domain/delinquency-aging/aging-buckets.js +7 -2
  131. package/dist/esm/domain/delinquency-aging/index.d.ts +11 -1
  132. package/dist/esm/domain/delinquency-aging/index.d.ts.map +1 -1
  133. package/dist/esm/domain/delinquency-aging/index.js +7 -3
  134. package/dist/esm/domain/figure/index.d.ts +13 -6
  135. package/dist/esm/domain/figure/index.d.ts.map +1 -1
  136. package/dist/esm/domain/figure/index.js +1 -0
  137. package/dist/esm/domain/section-label/index.d.ts +7 -1
  138. package/dist/esm/domain/section-label/index.d.ts.map +1 -1
  139. package/dist/esm/domain/section-label/index.js +6 -2
  140. package/dist/esm/enterprise/app-shell/index.d.ts +14 -0
  141. package/dist/esm/enterprise/app-shell/index.d.ts.map +1 -1
  142. package/dist/esm/enterprise/app-shell/index.js +2 -2
  143. package/dist/esm/enterprise/data-table/index.d.ts +13 -1
  144. package/dist/esm/enterprise/data-table/index.d.ts.map +1 -1
  145. package/dist/esm/enterprise/data-table/index.js +8 -4
  146. package/dist/esm/enterprise/search-input/index.d.ts +7 -1
  147. package/dist/esm/enterprise/search-input/index.d.ts.map +1 -1
  148. package/dist/esm/enterprise/search-input/index.js +2 -2
  149. package/dist/esm/lib/utils.d.ts.map +1 -1
  150. package/dist/esm/lib/utils.js +27 -1
  151. package/dist/esm/theme/theme-provider.d.ts +8 -0
  152. package/dist/esm/theme/theme-provider.d.ts.map +1 -1
  153. package/dist/esm/theme/theme-provider.js +10 -0
  154. package/dist/globals.css +85 -58
  155. package/dist/lib/utils.d.ts.map +1 -1
  156. package/dist/lib/utils.js +27 -1
  157. package/dist/theme/theme-provider.d.ts +8 -0
  158. package/dist/theme/theme-provider.d.ts.map +1 -1
  159. package/dist/theme/theme-provider.js +11 -0
  160. package/package.json +1 -1
@@ -1,11 +1,19 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
+ /**
4
+ * `credit` is the accounting reading of a credit amount, NOT an alias of
5
+ * `destructive` (an error/alarm). The credit role is a tint-and-ink pair:
6
+ * `--credit-foreground` mirrors `--credit` by contract, so the red carries the
7
+ * role as text over a tinted surface. Do not "fix" this into a solid
8
+ * `bg-credit` fill — that renders red-on-red and is invisible.
9
+ */
3
10
  declare const badgeVariants: (props?: ({
4
- variant?: "default" | "secondary" | "outline" | "alert" | "destructive" | "success" | "active" | "inactive" | "error" | "info" | "purple" | null | undefined;
11
+ variant?: "default" | "secondary" | "outline" | "destructive" | "alert" | "success" | "active" | "inactive" | "credit" | "error" | "info" | "purple" | null | undefined;
12
+ size?: "default" | "sm" | null | undefined;
5
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
14
  export type BadgeProps = React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & {
7
15
  asChild?: boolean;
8
16
  };
9
- declare function Badge({ className, variant, asChild, ...props }: BadgeProps): React.JSX.Element;
17
+ declare function Badge({ className, variant, size, asChild, ...props }: BadgeProps): React.JSX.Element;
10
18
  export { Badge, badgeVariants };
11
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE,QAAA,MAAM,aAAa;;8EA+BlB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACnD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAUnE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE;;;;;;GAMG;AACH,QAAA,MAAM,aAAa;;;8EA6ClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACnD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAUzE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
@@ -6,6 +6,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const class_variance_authority_1 = require("class-variance-authority");
7
7
  const utils_1 = require("../../../lib/utils");
8
8
  const react_slot_1 = require("@radix-ui/react-slot");
9
+ /**
10
+ * `credit` is the accounting reading of a credit amount, NOT an alias of
11
+ * `destructive` (an error/alarm). The credit role is a tint-and-ink pair:
12
+ * `--credit-foreground` mirrors `--credit` by contract, so the red carries the
13
+ * role as text over a tinted surface. Do not "fix" this into a solid
14
+ * `bg-credit` fill — that renders red-on-red and is invisible.
15
+ */
9
16
  const badgeVariants = (0, class_variance_authority_1.cva)('inline-flex items-center rounded-full border border-border px-2.5 py-0.5 text-sm font-medium transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2', {
10
17
  variants: {
11
18
  variant: {
@@ -13,21 +20,34 @@ const badgeVariants = (0, class_variance_authority_1.cva)('inline-flex items-cen
13
20
  active: 'bg-system-success-surface text-system-success-h1a border-system-success-border py-[2px] px-3',
14
21
  inactive: 'bg-muted text-foreground border-muted-foreground/40 py-[2px] px-3',
15
22
  secondary: 'border-transparent bg-muted-foreground text-white dark:text-black',
16
- destructive: 'border-transparent bg-red-500 text-primary-foreground hover:bg-red-500/80',
23
+ destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
24
+ credit: 'border-credit/30 bg-credit/10 text-credit-foreground px-[10px] py-1',
17
25
  error: 'border-system-error-border bg-system-error-surface text-system-error-text px-[10px] py-1',
18
26
  success: 'border-system-success-border bg-system-success-surface text-system-success-text px-[10px] py-1',
19
27
  info: 'border-system-info-border bg-system-info-surface text-system-info-text px-[10px] py-1',
20
28
  alert: 'border-system-alert-border bg-system-alert-surface text-system-alert-text px-[10px] py-1',
21
29
  purple: 'border-system-purple-border bg-system-purple-surface text-system-purple-text px-[10px] py-1',
22
30
  outline: 'text-foreground'
31
+ },
32
+ /**
33
+ * Font size only. Padding is baked per-variant above, so a `sm` that also
34
+ * shrank the box would fight every variant that sets its own; scoping the
35
+ * axis to type keeps `sm` composable with all of them. 11px is the canon
36
+ * for fine print — the one micro-badge size, replacing the per-consumer
37
+ * 0.7rem/10px/11px anarchy.
38
+ */
39
+ size: {
40
+ default: '',
41
+ sm: 'text-[11px]'
23
42
  }
24
43
  },
25
44
  defaultVariants: {
26
- variant: 'default'
45
+ variant: 'default',
46
+ size: 'default'
27
47
  }
28
48
  });
29
49
  exports.badgeVariants = badgeVariants;
30
- function Badge({ className, variant, asChild, ...props }) {
50
+ function Badge({ className, variant, size, asChild, ...props }) {
31
51
  const Comp = asChild ? react_slot_1.Slot : 'span';
32
- return ((0, jsx_runtime_1.jsx)(Comp, { "data-slot": "badge", className: (0, utils_1.cn)(badgeVariants({ variant }), className), ...props }));
52
+ return ((0, jsx_runtime_1.jsx)(Comp, { "data-slot": "badge", className: (0, utils_1.cn)(badgeVariants({ variant, size }), className), ...props }));
33
53
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  @layer components {
8
8
  .breadcrumb-list {
9
- @apply flex flex-wrap items-center gap-2 break-words text-xs font-medium sm:gap-2.5;
9
+ @apply flex flex-wrap items-center gap-2 text-xs font-medium break-words sm:gap-2.5;
10
10
  }
11
11
 
12
12
  .breadcrumb-item {
@@ -1,12 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "default" | "plain" | "hoverLink" | "primary" | "secondary" | "tertiary" | "outline" | "link" | null | undefined;
4
+ variant?: "default" | "plain" | "hoverLink" | "primary" | "secondary" | "tertiary" | "outline" | "link" | "destructive" | null | undefined;
5
5
  fullWidth?: boolean | null | undefined;
6
6
  size?: "default" | "small" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  declare const iconVariants: (props?: ({
9
- position?: "start" | "end" | "far-end" | null | undefined;
9
+ position?: "end" | "start" | "far-end" | null | undefined;
10
10
  size?: "default" | "small" | null | undefined;
11
11
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
12
  export type ButtonProps = React.ComponentProps<'button'> & VariantProps<typeof buttonVariants> & {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/button/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,cAAc;;;;8EA0BlB,CAAA;AAEF,QAAA,MAAM,YAAY;;;8EAgBhB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GACtD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG;IACF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAA;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAEH,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAe,EACf,IAAI,EACJ,aAAuB,EACvB,SAAiB,EACjB,QAAgB,EAChB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,WAAW,qBAqCb;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/button/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,cAAc;;;;8EA2BlB,CAAA;AAEF,QAAA,MAAM,YAAY;;;8EAgBhB,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GACtD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG;IACF,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAA;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAEH,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,EACP,IAAI,EACJ,OAAe,EACf,IAAI,EACJ,aAAuB,EACvB,SAAiB,EACjB,QAAgB,EAChB,OAAO,EACP,GAAG,KAAK,EACT,EAAE,WAAW,qBAqCb;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,CAAA"}
@@ -16,7 +16,8 @@ const buttonVariants = (0, class_variance_authority_1.cva)('button-base button-d
16
16
  secondary: 'button-secondary',
17
17
  tertiary: 'button-tertiary',
18
18
  outline: 'button-outline',
19
- link: 'button-link'
19
+ link: 'button-link',
20
+ destructive: 'button-destructive'
20
21
  },
21
22
  fullWidth: {
22
23
  true: 'w-full',
@@ -1,6 +1,6 @@
1
1
  @theme inline {
2
2
  /* Button */
3
- --text-button: var(--font-size-sm);
3
+ --text-button-link: 13px;
4
4
  --spacing-button-px: calc(var(--spacing) * 4);
5
5
  --spacing-button-py: calc(var(--spacing) * 3);
6
6
  --spacing-button-px-small: calc(var(--spacing) * 3);
@@ -19,11 +19,18 @@
19
19
  --color-button-tertiary: var(--color-accent);
20
20
  --color-button-tertiary-foreground: var(--color-accent-foreground);
21
21
  --color-button-outline-foreground: var(--color-muted-foreground);
22
+ --color-button-destructive: var(--color-destructive);
23
+ --color-button-destructive-foreground: var(--color-destructive-foreground);
22
24
  }
23
25
 
24
26
  @layer components {
25
27
  .button-base {
26
- @apply h-button-h px-button-px py-button-py relative inline-flex cursor-pointer items-center justify-center rounded-lg text-sm font-medium whitespace-nowrap shadow-sm transition-colors;
28
+ @apply h-button-h px-button-px py-button-py ring-offset-background relative inline-flex cursor-pointer items-center justify-center rounded-lg text-sm font-medium whitespace-nowrap shadow-sm transition-colors;
29
+ /* Keyboard focus was unstyled on every kit button, so consumers restated a
30
+ ring by hand. Same idiom as tabs-trigger and textarea. `.button-read-only`
31
+ out-specifies this (class + attribute + pseudo-class), so the read-only
32
+ suppression still wins without depending on source order. */
33
+ @apply focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none;
27
34
  }
28
35
 
29
36
  .button-plain {
@@ -46,8 +53,14 @@
46
53
  @apply text-button-outline-foreground hover:border-shadcn-400 border border-transparent shadow-none;
47
54
  }
48
55
 
56
+ .button-destructive {
57
+ /* Disabled deliberately drops the red and reuses the shared muted pair: a
58
+ disabled danger button must not still read as armed. */
59
+ @apply bg-button-destructive text-button-destructive-foreground hover:bg-button-destructive/80 disabled:bg-button-primary-disabled disabled:text-button-primary-foreground-disabled;
60
+ }
61
+
49
62
  .button-link {
50
- @apply !h-4 !p-0 !px-0 !py-0 !text-[13px] underline shadow-none;
63
+ @apply !text-button-link !h-4 !p-0 !px-0 !py-0 underline shadow-none;
51
64
  }
52
65
 
53
66
  .button-disabled {
@@ -55,7 +68,7 @@
55
68
  }
56
69
 
57
70
  .button-read-only {
58
- @apply data-[read-only=true]:cursor-default data-[read-only=true]:border-transparent data-[read-only=true]:opacity-50 data-[read-only=true]:shadow-none data-[read-only=true]:focus:ring-0 data-[read-only=true]:focus:outline-hidden;
71
+ @apply data-[read-only=true]:cursor-default data-[read-only=true]:border-transparent data-[read-only=true]:opacity-50 data-[read-only=true]:shadow-none data-[read-only=true]:focus:ring-0 data-[read-only=true]:focus:ring-offset-0 data-[read-only=true]:focus:outline-hidden;
59
72
  }
60
73
 
61
74
  .button-small {
@@ -1,8 +1,16 @@
1
1
  import * as React from 'react';
2
2
  declare function Card({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
3
3
  declare function CardHeader({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
4
- declare function CardTitle({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
5
- declare function CardDescription({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
4
+ type CardTitleProps = React.ComponentProps<'h3'> & {
5
+ /**
6
+ * Heading level to render. Defaults to `h3`, which is correct for a card
7
+ * nested under a section heading. Set it when the card sits directly under
8
+ * the page `h1` (or deeper), so the document heading order stays valid.
9
+ */
10
+ as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
11
+ };
12
+ declare function CardTitle({ className, as: Comp, ...props }: CardTitleProps): React.JSX.Element;
13
+ declare function CardDescription({ className, ...props }: React.ComponentProps<'p'>): React.JSX.Element;
6
14
  declare function CardAction({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
7
15
  declare function CardContent({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
8
16
  declare function CardFooter({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWtE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACZ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;IACjD;;;;OAIG;IACH,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC7C,CAAA;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAW,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,qBAW1E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQ1E;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACZ,CAAA"}
@@ -15,8 +15,8 @@ function Card({ className, ...props }) {
15
15
  function CardHeader({ className, ...props }) {
16
16
  return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "card-header", className: (0, utils_1.cn)('flex flex-col space-y-1.5', className), ...props }));
17
17
  }
18
- function CardTitle({ className, ...props }) {
19
- return ((0, jsx_runtime_1.jsx)("h3", { "data-slot": "card-title", className: (0, utils_1.cn)('text-sm leading-none font-medium tracking-tight', className), ...props }));
18
+ function CardTitle({ className, as: Comp = 'h3', ...props }) {
19
+ return ((0, jsx_runtime_1.jsx)(Comp, { "data-slot": "card-title", className: (0, utils_1.cn)('text-sm leading-none font-medium tracking-tight', className), ...props }));
20
20
  }
21
21
  function CardDescription({ className, ...props }) {
22
22
  return ((0, jsx_runtime_1.jsx)("p", { "data-slot": "card-description", className: (0, utils_1.cn)('text-muted-foreground text-sm', className), ...props }));
@@ -53,7 +53,7 @@ function Command({ className, ...props }) {
53
53
  return ((0, jsx_runtime_1.jsx)(cmdk_1.Command, { "data-slot": "command", className: (0, utils_1.cn)('bg-card text-foreground flex h-full w-full flex-col overflow-hidden rounded-md', className), ...props }));
54
54
  }
55
55
  const CommandDialog = ({ children, ...props }) => {
56
- return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { ...props, children: (0, jsx_runtime_1.jsx)(dialog_1.DialogContent, { className: "overflow-hidden p-0 shadow-lg", children: (0, jsx_runtime_1.jsx)(Command, { className: "[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: children }) }) }));
56
+ return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { ...props, children: (0, jsx_runtime_1.jsx)(dialog_1.DialogContent, { className: "overflow-hidden p-0 shadow-lg", children: (0, jsx_runtime_1.jsx)(Command, { className: "[&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children: children }) }) }));
57
57
  };
58
58
  exports.CommandDialog = CommandDialog;
59
59
  function CommandInput({ className, ...props }) {
@@ -5,15 +5,15 @@
5
5
 
6
6
  @layer components {
7
7
  .dialog-overlay {
8
- @apply data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50;
8
+ @apply motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50;
9
9
  }
10
10
 
11
11
  .dialog-content {
12
- @apply bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-8 border p-7 shadow-lg duration-200 sm:max-w-[425px] sm:rounded-lg;
12
+ @apply bg-background motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-8 border p-7 shadow-lg duration-200 sm:max-w-[425px] sm:rounded-lg;
13
13
  }
14
14
 
15
15
  .dialog-close {
16
- @apply data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 disabled:pointer-events-none;
16
+ @apply data-[state=open]:bg-muted data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 disabled:pointer-events-none;
17
17
  }
18
18
 
19
19
  .dialog-header {
@@ -65,7 +65,7 @@ function DropdownMenuTrigger({ className, ...props }) {
65
65
  return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", className: (0, utils_1.cn)('flex items-center justify-center outline-hidden', className), ...props }));
66
66
  }
67
67
  function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
68
- return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Portal, { children: (0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: (0, utils_1.cn)('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-lg border shadow-md', className), ...props }) }));
68
+ return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Portal, { children: (0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: (0, utils_1.cn)('bg-popover text-popover-foreground motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-lg border shadow-md', className), ...props }) }));
69
69
  }
70
70
  function DropdownMenuGroup({ ...props }) {
71
71
  return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props }));
@@ -103,5 +103,5 @@ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
103
103
  return ((0, jsx_runtime_1.jsxs)(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: (0, utils_1.cn)('focus:bg-shadcn-100 data-[state=open]:bg-accent text-muted-foreground flex cursor-default items-center gap-3 px-3 py-2 text-sm font-medium outline-hidden select-none', className), ...props, children: [children, (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { className: "ml-auto h-4 w-4" })] }));
104
104
  }
105
105
  function DropdownMenuSubContent({ className, ...props }) {
106
- return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: (0, utils_1.cn)('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-lg', className), ...props }));
106
+ return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: (0, utils_1.cn)('bg-popover text-popover-foreground motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-md border p-1 shadow-lg', className), ...props }));
107
107
  }
@@ -47,5 +47,5 @@ function HoverCardTrigger({ ...props }) {
47
47
  return ((0, jsx_runtime_1.jsx)(HoverCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props }));
48
48
  }
49
49
  function HoverCardContent({ className, align = 'center', sideOffset = 4, ...props }) {
50
- return ((0, jsx_runtime_1.jsx)(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: (0, jsx_runtime_1.jsx)(HoverCardPrimitive.Content, { "data-slot": "hover-card-content", align: align, sideOffset: sideOffset, className: (0, utils_1.cn)('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 border-border z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden', className), ...props }) }));
50
+ return ((0, jsx_runtime_1.jsx)(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: (0, jsx_runtime_1.jsx)(HoverCardPrimitive.Content, { "data-slot": "hover-card-content", align: align, sideOffset: sideOffset, className: (0, utils_1.cn)('bg-popover text-popover-foreground motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 border-border z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden', className), ...props }) }));
51
51
  }
@@ -1,6 +1,6 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  export declare const inputAdornmentVariants: (props?: ({
3
- position?: "start" | "end" | null | undefined;
3
+ position?: "end" | "start" | null | undefined;
4
4
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
5
  export type InputAdornmentProps = React.ComponentProps<'span'> & VariantProps<typeof inputAdornmentVariants> & {
6
6
  position?: 'start' | 'end';
@@ -5,5 +5,5 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const button_1 = require("../button");
6
6
  const lucide_react_1 = require("lucide-react");
7
7
  function LoadingButton({ loading, disabled, children, ...props }) {
8
- return ((0, jsx_runtime_1.jsxs)(button_1.Button, { ...props, disabled: loading || disabled, children: [loading && (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), children] }));
8
+ return ((0, jsx_runtime_1.jsxs)(button_1.Button, { ...props, disabled: loading || disabled, children: [loading && (0, jsx_runtime_1.jsx)(lucide_react_1.Loader2, { className: "mr-2 h-4 w-4 motion-safe:animate-spin" }), children] }));
9
9
  }
@@ -142,7 +142,7 @@ exports.MultipleSelectContent = react_1.default.forwardRef(({ className, positio
142
142
  if (!open) {
143
143
  return null;
144
144
  }
145
- return ((0, jsx_runtime_1.jsx)("div", { className: "relative", children: (0, jsx_runtime_1.jsx)(cmdk_1.Command.List, { ref: ref, className: (0, utils_1.cn)('bg-popover text-popover-foreground animate-in absolute top-1 z-50 max-h-96 w-full min-w-32 overflow-x-hidden overflow-y-auto rounded-md border shadow-md outline-hidden', position === 'popper' &&
145
+ return ((0, jsx_runtime_1.jsx)("div", { className: "relative", children: (0, jsx_runtime_1.jsx)(cmdk_1.Command.List, { ref: ref, className: (0, utils_1.cn)('bg-popover text-popover-foreground motion-safe:animate-in absolute top-1 z-50 max-h-96 w-full min-w-32 overflow-x-hidden overflow-y-auto rounded-md border shadow-md outline-hidden', position === 'popper' &&
146
146
  'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), ...props, onMouseEnter: (e) => {
147
147
  onMouseEnter?.(e);
148
148
  setOnScrollbar(true);
@@ -52,7 +52,7 @@ function InputOTPGroup({ className, ...props }) {
52
52
  function InputOTPSlot({ index, className, ...props }) {
53
53
  const inputOTPContext = React.useContext(input_otp_1.OTPInputContext);
54
54
  const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
55
- return ((0, jsx_runtime_1.jsxs)("div", { "data-slot": "input-otp-slot", "data-active": isActive, className: (0, utils_1.cn)('border-input-border bg-background text-foreground', 'relative flex h-14 w-12 items-center justify-center border-y border-r text-2xl font-semibold shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md', 'data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:z-10 data-[active=true]:ring-2', className), ...props, children: [char, hasFakeCaret && ((0, jsx_runtime_1.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: (0, jsx_runtime_1.jsx)("div", { className: "animate-caret-blink bg-foreground h-6 w-px duration-1000" }) }))] }));
55
+ return ((0, jsx_runtime_1.jsxs)("div", { "data-slot": "input-otp-slot", "data-active": isActive, className: (0, utils_1.cn)('border-input-border bg-background text-foreground', 'relative flex h-14 w-12 items-center justify-center border-y border-r text-2xl font-semibold shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md', 'data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:z-10 data-[active=true]:ring-2', className), ...props, children: [char, hasFakeCaret && ((0, jsx_runtime_1.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: (0, jsx_runtime_1.jsx)("div", { className: "motion-safe:animate-caret-blink bg-foreground h-6 w-px duration-1000" }) }))] }));
56
56
  }
57
57
  function InputOTPSeparator({ ...props }) {
58
58
  return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: (0, jsx_runtime_1.jsx)(lucide_react_1.MinusIcon, {}) }));
@@ -20,5 +20,5 @@ function PaperCollapsibleTrigger({ className, children: _children, ...props }) {
20
20
  return ((0, jsx_runtime_1.jsx)(collapsible_1.CollapsibleTrigger, { "data-slot": "paper-collapsible-trigger", className: (0, utils_1.cn)('transition-all hover:underline [&[data-state=open]>svg]:rotate-180', className), ...props, children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { className: "text-foreground size-6 shrink-0 cursor-pointer transition-transform duration-200" }) }));
21
21
  }
22
22
  function PaperCollapsibleContent({ className, children, ...props }) {
23
- return ((0, jsx_runtime_1.jsxs)(collapsible_1.CollapsibleContent, { "data-slot": "paper-collapsible-content", className: (0, utils_1.cn)('data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden transition-all duration-200 ease-in-out', className), ...props, children: [(0, jsx_runtime_1.jsx)(separator_1.Separator, {}), children] }));
23
+ return ((0, jsx_runtime_1.jsxs)(collapsible_1.CollapsibleContent, { "data-slot": "paper-collapsible-content", className: (0, utils_1.cn)('motion-safe:data-[state=closed]:animate-collapsible-up motion-safe:data-[state=open]:animate-collapsible-down overflow-hidden transition-all duration-200 ease-in-out', className), ...props, children: [(0, jsx_runtime_1.jsx)(separator_1.Separator, {}), children] }));
24
24
  }
@@ -48,7 +48,7 @@ function PopoverTrigger({ ...props }) {
48
48
  return (0, jsx_runtime_1.jsx)(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
49
49
  }
50
50
  function PopoverContent({ className, align = 'center', sideOffset = 4, ...props }) {
51
- return ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Portal, { children: (0, jsx_runtime_1.jsx)(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: (0, utils_1.cn)('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 border-border z-50 w-72 rounded-md border p-4 shadow-md outline-hidden', className), ...props }) }));
51
+ return ((0, jsx_runtime_1.jsx)(PopoverPrimitive.Portal, { children: (0, jsx_runtime_1.jsx)(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: (0, utils_1.cn)('bg-popover text-popover-foreground motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 border-border z-50 w-72 rounded-md border p-4 shadow-md outline-hidden', className), ...props }) }));
52
52
  }
53
53
  function PopoverAnchor({ ...props }) {
54
54
  return (0, jsx_runtime_1.jsx)(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
@@ -32,7 +32,7 @@
32
32
 
33
33
  .select-content {
34
34
  @apply bg-popover text-popover-foreground relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md border shadow-md;
35
- @apply data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2;
35
+ @apply motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2;
36
36
  }
37
37
 
38
38
  .select-content-popper {
@@ -7,7 +7,7 @@ declare function SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimi
7
7
  declare function SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>): React.JSX.Element;
8
8
  declare function SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>): React.JSX.Element;
9
9
  declare const sheetVariants: (props?: ({
10
- side?: "top" | "right" | "bottom" | "left" | null | undefined;
10
+ side?: "bottom" | "left" | "right" | "top" | null | undefined;
11
11
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
12
  type SheetContentProps = React.ComponentProps<typeof SheetPrimitive.Content> & VariantProps<typeof sheetVariants>;
13
13
  declare function SheetContent({ side, className, children, onInteractOutside, ...props }: SheetContentProps): React.JSX.Element;
@@ -63,9 +63,9 @@ function SheetPortal({ ...props }) {
63
63
  return (0, jsx_runtime_1.jsx)(SheetPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
64
64
  }
65
65
  function SheetOverlay({ className, ...props }) {
66
- return ((0, jsx_runtime_1.jsx)(SheetPrimitive.Overlay, { "data-slot": "sheet-overlay", className: (0, utils_1.cn)('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80', className), ...props }));
66
+ return ((0, jsx_runtime_1.jsx)(SheetPrimitive.Overlay, { "data-slot": "sheet-overlay", className: (0, utils_1.cn)('motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80', className), ...props }));
67
67
  }
68
- const sheetVariants = (0, class_variance_authority_1.cva)('fixed z-50 gap-4 bg-background p-12 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', {
68
+ const sheetVariants = (0, class_variance_authority_1.cva)('fixed z-50 gap-4 bg-background p-12 shadow-lg transition ease-in-out motion-safe:data-[state=open]:animate-in motion-safe:data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500', {
69
69
  variants: {
70
70
  side: {
71
71
  top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',
@@ -1,5 +1,10 @@
1
1
  import React from 'react';
2
2
  type SidebarExpandButtonProps = {
3
+ /**
4
+ * Overrides the button's accessible name in BOTH states, and the visible
5
+ * tooltip copy in the collapsed state. Without it each state falls back to
6
+ * its own English default.
7
+ */
3
8
  tooltip?: string;
4
9
  };
5
10
  export declare const SidebarExpandButton: ({ tooltip }: SidebarExpandButtonProps) => React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-expand-button.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/sidebar/sidebar-expand-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,aAAa,wBAAwB,sBAqCxE,CAAA"}
1
+ {"version":3,"file":"sidebar-expand-button.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/sidebar/sidebar-expand-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAYzB,KAAK,wBAAwB,GAAG;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,aAAa,wBAAwB,sBA6CxE,CAAA"}
@@ -14,6 +14,6 @@ const tooltip_1 = require("../../ui/tooltip");
14
14
  const icon_button_1 = require("../icon-button");
15
15
  const SidebarExpandButton = ({ tooltip }) => {
16
16
  const { isCollapsed, toggleSidebar } = (0, sidebar_provider_1.useSidebar)();
17
- return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [!isCollapsed && ((0, jsx_runtime_1.jsx)("div", { "data-slot": "sidebar-expand-button", className: "border-border bg-card flex w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "absolute right-[-20px] bottom-4", children: (0, jsx_runtime_1.jsx)(icon_button_1.IconButton, { variant: "secondary", rounded: true, onClick: toggleSidebar, children: (0, jsx_runtime_1.jsx)(lucide_react_1.PanelLeftClose, { className: "text-shadcn-400" }) }) }) })), isCollapsed && ((0, jsx_runtime_1.jsx)(sidebar_components_1.SidebarFooter, { children: (0, jsx_runtime_1.jsx)(tooltip_1.TooltipProvider, { children: (0, jsx_runtime_1.jsxs)(tooltip_1.Tooltip, { children: [(0, jsx_runtime_1.jsx)(tooltip_1.TooltipTrigger, { className: "group/expand-button text-shadcn-400 hover:bg-accent rounded-sm bg-transparent p-2", onClick: toggleSidebar, children: (0, jsx_runtime_1.jsx)(lucide_react_1.PanelRightClose, { className: "group-hover/expand-button:text-white dark:text-white" }) }), (0, jsx_runtime_1.jsx)(tooltip_1.TooltipContent, { side: "right", children: tooltip || 'Expand' })] }) }) }))] }));
17
+ return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [!isCollapsed && ((0, jsx_runtime_1.jsx)("div", { "data-slot": "sidebar-expand-button", className: "border-border bg-card flex w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "absolute right-[-20px] bottom-4", children: (0, jsx_runtime_1.jsx)(icon_button_1.IconButton, { variant: "secondary", rounded: true, onClick: toggleSidebar, "aria-label": tooltip || 'Collapse sidebar', "aria-expanded": true, children: (0, jsx_runtime_1.jsx)(lucide_react_1.PanelLeftClose, { className: "text-shadcn-400" }) }) }) })), isCollapsed && ((0, jsx_runtime_1.jsx)(sidebar_components_1.SidebarFooter, { children: (0, jsx_runtime_1.jsx)(tooltip_1.TooltipProvider, { children: (0, jsx_runtime_1.jsxs)(tooltip_1.Tooltip, { children: [(0, jsx_runtime_1.jsx)(tooltip_1.TooltipTrigger, { className: "group/expand-button text-shadcn-400 hover:bg-accent rounded-sm bg-transparent p-2", onClick: toggleSidebar, "aria-label": tooltip || 'Expand sidebar', "aria-expanded": false, children: (0, jsx_runtime_1.jsx)(lucide_react_1.PanelRightClose, { className: "group-hover/expand-button:text-white dark:text-white" }) }), (0, jsx_runtime_1.jsx)(tooltip_1.TooltipContent, { side: "right", children: tooltip || 'Expand' })] }) }) }))] }));
18
18
  };
19
19
  exports.SidebarExpandButton = SidebarExpandButton;
@@ -46,7 +46,7 @@ function SidebarItemCollapsibleTrigger({ className, icon, title, children: _chil
46
46
  }
47
47
  function SidebarItemCollapsibleContent({ className, children, ...props }) {
48
48
  const { isCollapsed } = (0, sidebar_provider_1.useSidebar)();
49
- return ((0, jsx_runtime_1.jsx)(react_collapsible_1.CollapsibleContent, { "data-slot": "sidebar-item-collapsible-content", className: (0, utils_1.cn)('mt-1 flex flex-col gap-1', 'data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden transition-all duration-200 ease-in-out', {
49
+ return ((0, jsx_runtime_1.jsx)(react_collapsible_1.CollapsibleContent, { "data-slot": "sidebar-item-collapsible-content", className: (0, utils_1.cn)('mt-1 flex flex-col gap-1', 'motion-safe:data-[state=closed]:animate-collapsible-up motion-safe:data-[state=open]:animate-collapsible-down overflow-hidden transition-all duration-200 ease-in-out', {
50
50
  'items-center': isCollapsed
51
51
  }, className), ...props, children: isCollapsed ? (children) : ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-stretch gap-3", children: [(0, jsx_runtime_1.jsx)(separator_1.Separator, { className: "ml-5 h-auto", orientation: "vertical" }), (0, jsx_runtime_1.jsx)("div", { className: "flex w-full flex-col gap-1", children: children })] })) }));
52
52
  }
@@ -4,5 +4,5 @@ exports.Skeleton = Skeleton;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const utils_1 = require("../../../lib/utils");
6
6
  function Skeleton({ className, ...props }) {
7
- return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "skeleton", className: (0, utils_1.cn)('bg-muted animate-pulse rounded-md', className), ...props }));
7
+ return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "skeleton", className: (0, utils_1.cn)('bg-muted rounded-md motion-safe:animate-pulse', className), ...props }));
8
8
  }
@@ -1,4 +1,9 @@
1
1
  type ToasterProps = {
2
+ /**
3
+ * Forces the toast theme. Omit it inside a `ThemeProvider` to follow the
4
+ * resolved theme automatically; with no provider the fallback is `'system'`,
5
+ * leaving the light/dark call to sonner's own media query.
6
+ */
2
7
  theme?: 'light' | 'dark' | 'system';
3
8
  };
4
9
  export declare function Toaster({ theme }: ToasterProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"toaster.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/toast/toaster.tsx"],"names":[],"mappings":"AAIA,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAgB,EAAE,EAAE,YAAY,+BAiBzD"}
1
+ {"version":3,"file":"toaster.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/toast/toaster.tsx"],"names":[],"mappings":"AAMA,KAAK,YAAY,GAAG;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAqB9C"}
@@ -4,8 +4,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Toaster = Toaster;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const sonner_1 = require("sonner");
7
- function Toaster({ theme = 'system' }) {
8
- return ((0, jsx_runtime_1.jsx)(sonner_1.Toaster, { theme: theme, position: "bottom-right", visibleToasts: 3, duration: 10000, expand: false, closeButton: true, richColors: false, offset: 16, gap: 8, toastOptions: {
7
+ const theme_provider_1 = require("../../../theme/theme-provider");
8
+ function Toaster({ theme }) {
9
+ // Optional read: a Toaster mounted outside any ThemeProvider must still
10
+ // render, so this cannot go through `useTheme`, which throws.
11
+ const themeContext = (0, theme_provider_1.useOptionalTheme)();
12
+ return ((0, jsx_runtime_1.jsx)(sonner_1.Toaster, { theme: theme ?? themeContext?.resolvedTheme ?? 'system', position: "bottom-right", visibleToasts: 3, duration: 10000, expand: false, closeButton: true, richColors: false, offset: 16, gap: 8, toastOptions: {
9
13
  className: 'font-sans !text-sm !font-medium'
10
14
  } }));
11
15
  }
@@ -62,5 +62,5 @@ function TooltipTrigger({ ...props }) {
62
62
  return (0, jsx_runtime_1.jsx)(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
63
63
  }
64
64
  function TooltipContent({ className, sideOffset = 0, children, ...props }) {
65
- return ((0, jsx_runtime_1.jsx)(TooltipPrimitive.Portal, { children: (0, jsx_runtime_1.jsxs)(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: (0, utils_1.cn)('bg-shadcn-600 text-shadcn-400 animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 rounded-md px-3 py-1.5 text-sm shadow-md', className), ...props, children: [children, (0, jsx_runtime_1.jsx)(TooltipPrimitive.Arrow, { className: "bg-shadcn-600 fill-shadcn-600 z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })] }) }));
65
+ return ((0, jsx_runtime_1.jsx)(TooltipPrimitive.Portal, { children: (0, jsx_runtime_1.jsxs)(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: (0, utils_1.cn)('bg-shadcn-600 text-shadcn-400 motion-safe:animate-in fade-in-0 zoom-in-95 motion-safe:data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 rounded-md px-3 py-1.5 text-sm shadow-md', className), ...props, children: [children, (0, jsx_runtime_1.jsx)(TooltipPrimitive.Arrow, { className: "bg-shadcn-600 fill-shadcn-600 z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })] }) }));
66
66
  }
@@ -35,6 +35,12 @@ export type BlotterRowProps = {
35
35
  * used by inline rows.
36
36
  */
37
37
  stacked?: boolean;
38
+ /**
39
+ * Render a skeleton in the value slot and mark the row `aria-busy`. The label
40
+ * is known before the figure is, so it keeps rendering — a loading blotter
41
+ * still reads as the same set of rows. Default off.
42
+ */
43
+ loading?: boolean;
38
44
  };
39
- export declare function BlotterRow({ label, value, valueClassName, className, stacked }: BlotterRowProps): import("react").JSX.Element;
45
+ export declare function BlotterRow({ label, value, valueClassName, className, stacked, loading }: BlotterRowProps): import("react").JSX.Element;
40
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/blotter/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,+BAE5D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,cAAc,EACd,SAAS,EACT,OAAe,EAChB,EAAE,eAAe,+BAwCjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/blotter/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtC,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,YAAY,+BAE5D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;IAChB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,cAAc,EACd,SAAS,EACT,OAAe,EACf,OAAe,EAChB,EAAE,eAAe,+BAkDjB"}
@@ -3,14 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Blotter = Blotter;
4
4
  exports.BlotterRow = BlotterRow;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const skeleton_1 = require("../../components/ui/skeleton");
6
7
  const typography_1 = require("../../lib/typography");
7
8
  const utils_1 = require("../../lib/utils");
8
9
  function Blotter({ children, className }) {
9
10
  return (0, jsx_runtime_1.jsx)("dl", { className: (0, utils_1.cn)('divide-border divide-y', className), children: children });
10
11
  }
11
- function BlotterRow({ label, value, valueClassName, className, stacked = false }) {
12
+ function BlotterRow({ label, value, valueClassName, className, stacked = false, loading = false }) {
13
+ // The skeleton stands in for the value slot's own shape: a full-width prose
14
+ // line when stacked, the mono figure's width when inline.
15
+ const shownValue = loading ? ((0, jsx_runtime_1.jsx)(skeleton_1.Skeleton, { className: (0, utils_1.cn)('h-4', stacked ? 'w-full' : 'w-24') })) : (value);
12
16
  if (stacked) {
13
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)('hover:bg-body-surface space-y-1 px-2 py-2 transition-colors duration-150 ease-out', className), children: [(0, jsx_runtime_1.jsx)("dt", { className: typography_1.LABEL_VOICE_CLASS, children: label }), (0, jsx_runtime_1.jsx)("dd", { className: (0, utils_1.cn)('text-foreground text-sm break-words whitespace-pre-wrap', valueClassName), children: value })] }));
17
+ return ((0, jsx_runtime_1.jsxs)("div", { "aria-busy": loading || undefined, className: (0, utils_1.cn)('hover:bg-body-surface space-y-1 px-2 py-2 transition-colors duration-150 ease-out', className), children: [(0, jsx_runtime_1.jsx)("dt", { className: typography_1.LABEL_VOICE_CLASS, children: label }), (0, jsx_runtime_1.jsx)("dd", { className: (0, utils_1.cn)('text-foreground text-sm break-words whitespace-pre-wrap', valueClassName), children: shownValue })] }));
14
18
  }
15
- return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)('hover:bg-body-surface flex items-center justify-between gap-3 px-2 py-2 transition-colors duration-150 ease-out', className), children: [(0, jsx_runtime_1.jsx)("dt", { className: typography_1.LABEL_VOICE_CLASS, children: label }), (0, jsx_runtime_1.jsx)("dd", { className: (0, utils_1.cn)('font-mono text-sm font-medium tabular-nums', valueClassName), children: value })] }));
19
+ return ((0, jsx_runtime_1.jsxs)("div", { "aria-busy": loading || undefined, className: (0, utils_1.cn)('hover:bg-body-surface flex items-center justify-between gap-3 px-2 py-2 transition-colors duration-150 ease-out', className), children: [(0, jsx_runtime_1.jsx)("dt", { className: typography_1.LABEL_VOICE_CLASS, children: label }), (0, jsx_runtime_1.jsx)("dd", { className: (0, utils_1.cn)('font-mono text-sm font-medium tabular-nums', valueClassName), children: shownValue })] }));
16
20
  }
@@ -36,6 +36,9 @@ export interface AgingBucketsProps {
36
36
  showTotal?: boolean;
37
37
  /** Override the fixed pt-BR copy. Omitted fields keep their defaults. */
38
38
  labels?: AgingBucketsLabels;
39
+ /** Tint of the healthy (`current`) band: ambient green, or ink. Threaded in
40
+ * from `DelinquencyAging`; see the knob's doc there. Defaults to `success`. */
41
+ healthyTone?: 'success' | 'ink';
39
42
  className?: string;
40
43
  }
41
44
  /**
@@ -53,5 +56,5 @@ export declare function bucketBand(index: number, count: number): AgingBand;
53
56
  * grand total. Pure: the money-math third rail, unit-tested.
54
57
  */
55
58
  export declare function sumBucketTotals(buckets: AgingBucket[], scale: number): string | null;
56
- export declare function AgingBuckets({ buckets, currency, locale, showTotal, labels, className }: AgingBucketsProps): import("react").JSX.Element;
59
+ export declare function AgingBuckets({ buckets, currency, locale, showTotal, labels, healthyTone, className }: AgingBucketsProps): import("react").JSX.Element;
57
60
  //# sourceMappingURL=aging-buckets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aging-buckets.d.ts","sourceRoot":"","sources":["../../../src/domain/delinquency-aging/aging-buckets.tsx"],"names":[],"mappings":"AAyCA,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;AAElE;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1C,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,yEAAyE;IACzE,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAMlE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAiB,EACjB,MAAM,EACN,SAAS,EACV,EAAE,iBAAiB,+BAyGnB"}
1
+ {"version":3,"file":"aging-buckets.d.ts","sourceRoot":"","sources":["../../../src/domain/delinquency-aging/aging-buckets.tsx"],"names":[],"mappings":"AAyCA,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;AAElE;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1C,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,yEAAyE;IACzE,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B;oFACgF;IAChF,WAAW,CAAC,EAAE,SAAS,GAAG,KAAK,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA2BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAMlE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAiB,EACjB,MAAM,EACN,WAAuB,EACvB,SAAS,EACV,EAAE,iBAAiB,+BA+GnB"}
@@ -89,7 +89,7 @@ function sumBucketTotals(buckets, scale) {
89
89
  const total = (0, money_math_1.sumMinor)(buckets.map((b) => b.total), scale);
90
90
  return total === null ? null : (0, money_math_1.minorToDecimal)(total, scale);
91
91
  }
92
- function AgingBuckets({ buckets, currency, locale, showTotal = false, labels, className }) {
92
+ function AgingBuckets({ buckets, currency, locale, showTotal = false, labels, healthyTone = 'success', className }) {
93
93
  const countLabel = labels?.count ?? 'Itens';
94
94
  const totalLabel = labels?.total ?? 'Total';
95
95
  const grandTotalLabel = labels?.grandTotal ?? 'Total geral';
@@ -102,7 +102,12 @@ function AgingBuckets({ buckets, currency, locale, showTotal = false, labels, cl
102
102
  const grandTotal = showTotal ? sumBucketTotals(buckets, scale) : null;
103
103
  return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)('flex flex-col', className), children: [(0, jsx_runtime_1.jsx)("ul", { className: "flex flex-col", children: buckets.map((bucket, i) => {
104
104
  const band = bucketBand(i, buckets.length);
105
- const { Icon, tint, word } = BAND[band];
105
+ const { Icon, word } = BAND[band];
106
+ // `ink` retones ONLY the healthy band — the escalated bands keep their
107
+ // alert and credit-red tints, which are the whole point of the scale.
108
+ const tint = healthyTone === 'ink' && band === 'current'
109
+ ? 'text-foreground'
110
+ : BAND[band].tint;
106
111
  // Shallow merge: an unlisted band keeps its pt-BR default.
107
112
  const bandWord = labels?.bands?.[band] ?? word;
108
113
  return ((0, jsx_runtime_1.jsxs)("li", { className: "border-border flex items-center gap-3 border-b py-2.5 last:border-b-0", children: [(0, jsx_runtime_1.jsx)(Icon, { "aria-hidden": true, className: (0, utils_1.cn)('size-4 shrink-0', tint) }), (0, jsx_runtime_1.jsxs)("span", { className: "sr-only", children: [bandWord, ": "] }), (0, jsx_runtime_1.jsx)("span", { className: (0, utils_1.cn)(typography_1.LABEL_VOICE_CLASS, 'text-foreground min-w-0 flex-1 tracking-normal normal-case'), children: bucket.label }), (0, jsx_runtime_1.jsxs)("span", { className: "flex shrink-0 flex-col items-end leading-none", children: [(0, jsx_runtime_1.jsx)(figure_1.Figure, { size: "row", className: "text-foreground", children: (0, format_1.formatCount)(bucket.count, locale) }), (0, jsx_runtime_1.jsx)("span", { className: (0, utils_1.cn)(typography_1.LABEL_VOICE_CLASS, 'mt-1'), children: countLabel })] }), (0, jsx_runtime_1.jsxs)("span", { className: "flex w-32 shrink-0 flex-col items-end leading-none sm:w-40", children: [(0, jsx_runtime_1.jsx)(figure_1.Figure, { size: "row", className: (0, utils_1.cn)(band === 'overdue' && 'text-credit'), children: (0, jsx_runtime_1.jsx)(money_text_1.MoneyText, { amount: bucket.total, currency: currency, fractionDigits: scale, locale: locale, signColor: false }) }), (0, jsx_runtime_1.jsx)("span", { className: (0, utils_1.cn)(typography_1.LABEL_VOICE_CLASS, 'mt-1'), children: totalLabel })] })] }, `${bucket.label}-${i}`));