@corefoundry-labs/forge-ui 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +78 -0
  3. package/dist/components/layout/ThemeScope/ThemeScope.d.ts +11 -0
  4. package/dist/components/layout/ThemeScope/ThemeScope.d.ts.map +1 -0
  5. package/dist/components/layout/ThemeScope/ThemeScope.js +13 -0
  6. package/dist/components/layout/ThemeScope/index.d.ts +3 -0
  7. package/dist/components/layout/ThemeScope/index.d.ts.map +1 -0
  8. package/dist/components/layout/ThemeScope/index.js +1 -0
  9. package/dist/componentsV2/actions/ButtonV2/ButtonV2.d.ts +21 -0
  10. package/dist/componentsV2/actions/ButtonV2/ButtonV2.d.ts.map +1 -0
  11. package/dist/componentsV2/actions/ButtonV2/ButtonV2.js +17 -0
  12. package/dist/componentsV2/actions/ButtonV2/ButtonV2.module.css +158 -0
  13. package/dist/componentsV2/actions/ButtonV2/index.d.ts +3 -0
  14. package/dist/componentsV2/actions/ButtonV2/index.d.ts.map +1 -0
  15. package/dist/componentsV2/actions/ButtonV2/index.js +1 -0
  16. package/dist/componentsV2/data-display/AvatarV2/AvatarV2.d.ts +36 -0
  17. package/dist/componentsV2/data-display/AvatarV2/AvatarV2.d.ts.map +1 -0
  18. package/dist/componentsV2/data-display/AvatarV2/AvatarV2.js +23 -0
  19. package/dist/componentsV2/data-display/AvatarV2/AvatarV2.module.css +156 -0
  20. package/dist/componentsV2/data-display/AvatarV2/index.d.ts +3 -0
  21. package/dist/componentsV2/data-display/AvatarV2/index.d.ts.map +1 -0
  22. package/dist/componentsV2/data-display/AvatarV2/index.js +1 -0
  23. package/dist/componentsV2/feedback/AlertV2/AlertV2.d.ts +25 -0
  24. package/dist/componentsV2/feedback/AlertV2/AlertV2.d.ts.map +1 -0
  25. package/dist/componentsV2/feedback/AlertV2/AlertV2.js +16 -0
  26. package/dist/componentsV2/feedback/AlertV2/AlertV2.module.css +144 -0
  27. package/dist/componentsV2/feedback/AlertV2/index.d.ts +3 -0
  28. package/dist/componentsV2/feedback/AlertV2/index.d.ts.map +1 -0
  29. package/dist/componentsV2/feedback/AlertV2/index.js +1 -0
  30. package/dist/componentsV2/feedback/FeedbackStateV2/FeedbackStateV2.d.ts +13 -0
  31. package/dist/componentsV2/feedback/FeedbackStateV2/FeedbackStateV2.d.ts.map +1 -0
  32. package/dist/componentsV2/feedback/FeedbackStateV2/FeedbackStateV2.js +18 -0
  33. package/dist/componentsV2/feedback/FeedbackStateV2/FeedbackStateV2.module.css +102 -0
  34. package/dist/componentsV2/feedback/FeedbackStateV2/index.d.ts +3 -0
  35. package/dist/componentsV2/feedback/FeedbackStateV2/index.d.ts.map +1 -0
  36. package/dist/componentsV2/feedback/FeedbackStateV2/index.js +1 -0
  37. package/dist/componentsV2/feedback/ProgressV2/ProgressV2.d.ts +35 -0
  38. package/dist/componentsV2/feedback/ProgressV2/ProgressV2.d.ts.map +1 -0
  39. package/dist/componentsV2/feedback/ProgressV2/ProgressV2.js +15 -0
  40. package/dist/componentsV2/feedback/ProgressV2/ProgressV2.module.css +161 -0
  41. package/dist/componentsV2/feedback/ProgressV2/index.d.ts +3 -0
  42. package/dist/componentsV2/feedback/ProgressV2/index.d.ts.map +1 -0
  43. package/dist/componentsV2/feedback/ProgressV2/index.js +1 -0
  44. package/dist/componentsV2/feedback/SkeletonV2/SkeletonV2.d.ts +20 -0
  45. package/dist/componentsV2/feedback/SkeletonV2/SkeletonV2.d.ts.map +1 -0
  46. package/dist/componentsV2/feedback/SkeletonV2/SkeletonV2.js +8 -0
  47. package/dist/componentsV2/feedback/SkeletonV2/SkeletonV2.module.css +92 -0
  48. package/dist/componentsV2/feedback/SkeletonV2/index.d.ts +3 -0
  49. package/dist/componentsV2/feedback/SkeletonV2/index.d.ts.map +1 -0
  50. package/dist/componentsV2/feedback/SkeletonV2/index.js +1 -0
  51. package/dist/componentsV2/feedback/SnackbarV2/SnackbarV2.d.ts +35 -0
  52. package/dist/componentsV2/feedback/SnackbarV2/SnackbarV2.d.ts.map +1 -0
  53. package/dist/componentsV2/feedback/SnackbarV2/SnackbarV2.js +90 -0
  54. package/dist/componentsV2/feedback/SnackbarV2/SnackbarV2.module.css +162 -0
  55. package/dist/componentsV2/feedback/SnackbarV2/index.d.ts +3 -0
  56. package/dist/componentsV2/feedback/SnackbarV2/index.d.ts.map +1 -0
  57. package/dist/componentsV2/feedback/SnackbarV2/index.js +1 -0
  58. package/dist/componentsV2/forms/CheckboxV2/CheckboxV2.d.ts +10 -0
  59. package/dist/componentsV2/forms/CheckboxV2/CheckboxV2.d.ts.map +1 -0
  60. package/dist/componentsV2/forms/CheckboxV2/CheckboxV2.js +18 -0
  61. package/dist/componentsV2/forms/CheckboxV2/CheckboxV2.module.css +137 -0
  62. package/dist/componentsV2/forms/CheckboxV2/index.d.ts +3 -0
  63. package/dist/componentsV2/forms/CheckboxV2/index.d.ts.map +1 -0
  64. package/dist/componentsV2/forms/CheckboxV2/index.js +1 -0
  65. package/dist/componentsV2/forms/SelectV2/SelectV2.d.ts +10 -0
  66. package/dist/componentsV2/forms/SelectV2/SelectV2.d.ts.map +1 -0
  67. package/dist/componentsV2/forms/SelectV2/SelectV2.js +7 -0
  68. package/dist/componentsV2/forms/SelectV2/SelectV2.module.css +90 -0
  69. package/dist/componentsV2/forms/SelectV2/index.d.ts +3 -0
  70. package/dist/componentsV2/forms/SelectV2/index.d.ts.map +1 -0
  71. package/dist/componentsV2/forms/SelectV2/index.js +1 -0
  72. package/dist/componentsV2/forms/SwitchV2/SwitchV2.d.ts +8 -0
  73. package/dist/componentsV2/forms/SwitchV2/SwitchV2.d.ts.map +1 -0
  74. package/dist/componentsV2/forms/SwitchV2/SwitchV2.js +8 -0
  75. package/dist/componentsV2/forms/SwitchV2/SwitchV2.module.css +129 -0
  76. package/dist/componentsV2/forms/SwitchV2/index.d.ts +3 -0
  77. package/dist/componentsV2/forms/SwitchV2/index.d.ts.map +1 -0
  78. package/dist/componentsV2/forms/SwitchV2/index.js +1 -0
  79. package/dist/componentsV2/forms/TextInputV2/TextInputV2.d.ts +10 -0
  80. package/dist/componentsV2/forms/TextInputV2/TextInputV2.d.ts.map +1 -0
  81. package/dist/componentsV2/forms/TextInputV2/TextInputV2.js +7 -0
  82. package/dist/componentsV2/forms/TextInputV2/TextInputV2.module.css +64 -0
  83. package/dist/componentsV2/forms/TextInputV2/index.d.ts +3 -0
  84. package/dist/componentsV2/forms/TextInputV2/index.d.ts.map +1 -0
  85. package/dist/componentsV2/forms/TextInputV2/index.js +1 -0
  86. package/dist/componentsV2/forms/selectionControl.d.ts +14 -0
  87. package/dist/componentsV2/forms/selectionControl.d.ts.map +1 -0
  88. package/dist/componentsV2/forms/selectionControl.js +1 -0
  89. package/dist/componentsV2/navigation/TabsV2/TabsV2.d.ts +30 -0
  90. package/dist/componentsV2/navigation/TabsV2/TabsV2.d.ts.map +1 -0
  91. package/dist/componentsV2/navigation/TabsV2/TabsV2.js +54 -0
  92. package/dist/componentsV2/navigation/TabsV2/TabsV2.module.css +128 -0
  93. package/dist/componentsV2/navigation/TabsV2/index.d.ts +3 -0
  94. package/dist/componentsV2/navigation/TabsV2/index.d.ts.map +1 -0
  95. package/dist/componentsV2/navigation/TabsV2/index.js +1 -0
  96. package/dist/componentsV2/overlays/DialogV2/DialogV2.d.ts +22 -0
  97. package/dist/componentsV2/overlays/DialogV2/DialogV2.d.ts.map +1 -0
  98. package/dist/componentsV2/overlays/DialogV2/DialogV2.js +77 -0
  99. package/dist/componentsV2/overlays/DialogV2/DialogV2.module.css +91 -0
  100. package/dist/componentsV2/overlays/DialogV2/index.d.ts +3 -0
  101. package/dist/componentsV2/overlays/DialogV2/index.d.ts.map +1 -0
  102. package/dist/componentsV2/overlays/DialogV2/index.js +1 -0
  103. package/dist/componentsV2/overlays/DropdownMenuV2/DropdownMenuV2.d.ts +40 -0
  104. package/dist/componentsV2/overlays/DropdownMenuV2/DropdownMenuV2.d.ts.map +1 -0
  105. package/dist/componentsV2/overlays/DropdownMenuV2/DropdownMenuV2.js +115 -0
  106. package/dist/componentsV2/overlays/DropdownMenuV2/DropdownMenuV2.module.css +122 -0
  107. package/dist/componentsV2/overlays/DropdownMenuV2/index.d.ts +3 -0
  108. package/dist/componentsV2/overlays/DropdownMenuV2/index.d.ts.map +1 -0
  109. package/dist/componentsV2/overlays/DropdownMenuV2/index.js +1 -0
  110. package/dist/componentsV2/overlays/PopoverV2/PopoverV2.d.ts +46 -0
  111. package/dist/componentsV2/overlays/PopoverV2/PopoverV2.d.ts.map +1 -0
  112. package/dist/componentsV2/overlays/PopoverV2/PopoverV2.js +41 -0
  113. package/dist/componentsV2/overlays/PopoverV2/PopoverV2.module.css +63 -0
  114. package/dist/componentsV2/overlays/PopoverV2/index.d.ts +3 -0
  115. package/dist/componentsV2/overlays/PopoverV2/index.d.ts.map +1 -0
  116. package/dist/componentsV2/overlays/PopoverV2/index.js +1 -0
  117. package/dist/componentsV2/overlays/TooltipV2/TooltipV2.d.ts +18 -0
  118. package/dist/componentsV2/overlays/TooltipV2/TooltipV2.d.ts.map +1 -0
  119. package/dist/componentsV2/overlays/TooltipV2/TooltipV2.js +66 -0
  120. package/dist/componentsV2/overlays/TooltipV2/TooltipV2.module.css +69 -0
  121. package/dist/componentsV2/overlays/TooltipV2/index.d.ts +3 -0
  122. package/dist/componentsV2/overlays/TooltipV2/index.d.ts.map +1 -0
  123. package/dist/componentsV2/overlays/TooltipV2/index.js +1 -0
  124. package/dist/componentsV2/overlays/layer.d.ts +29 -0
  125. package/dist/componentsV2/overlays/layer.d.ts.map +1 -0
  126. package/dist/componentsV2/overlays/layer.js +224 -0
  127. package/dist/componentsV2/overlays/position.d.ts +32 -0
  128. package/dist/componentsV2/overlays/position.d.ts.map +1 -0
  129. package/dist/componentsV2/overlays/position.js +42 -0
  130. package/dist/componentsV2/status/BadgeV2/BadgeV2.d.ts +18 -0
  131. package/dist/componentsV2/status/BadgeV2/BadgeV2.d.ts.map +1 -0
  132. package/dist/componentsV2/status/BadgeV2/BadgeV2.js +7 -0
  133. package/dist/componentsV2/status/BadgeV2/BadgeV2.module.css +94 -0
  134. package/dist/componentsV2/status/BadgeV2/index.d.ts +3 -0
  135. package/dist/componentsV2/status/BadgeV2/index.d.ts.map +1 -0
  136. package/dist/componentsV2/status/BadgeV2/index.js +1 -0
  137. package/dist/componentsV2/surfaces/CardV2/CardV2.d.ts +28 -0
  138. package/dist/componentsV2/surfaces/CardV2/CardV2.d.ts.map +1 -0
  139. package/dist/componentsV2/surfaces/CardV2/CardV2.js +16 -0
  140. package/dist/componentsV2/surfaces/CardV2/CardV2.module.css +84 -0
  141. package/dist/componentsV2/surfaces/CardV2/index.d.ts +3 -0
  142. package/dist/componentsV2/surfaces/CardV2/index.d.ts.map +1 -0
  143. package/dist/componentsV2/surfaces/CardV2/index.js +1 -0
  144. package/dist/index.d.ts +38 -0
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +20 -0
  147. package/package.json +16 -5
@@ -0,0 +1,156 @@
1
+ .avatar {
2
+ position: relative;
3
+ display: inline-flex;
4
+ flex: none;
5
+ align-items: center;
6
+ justify-content: center;
7
+ box-sizing: border-box;
8
+ width: var(--avatar-size);
9
+ height: var(--avatar-size);
10
+ border-radius: 50%;
11
+ font-family: inherit;
12
+ font-weight: var(--cf-v2-avatar-font-weight);
13
+ line-height: normal;
14
+ vertical-align: middle;
15
+ }
16
+
17
+ .sm {
18
+ --avatar-size: var(--cf-v2-avatar-size-sm);
19
+ font-size: var(--cf-v2-avatar-font-size-sm);
20
+ }
21
+
22
+ .md {
23
+ --avatar-size: var(--cf-v2-avatar-size-md);
24
+ font-size: var(--cf-v2-avatar-font-size-md);
25
+ }
26
+
27
+ .lg {
28
+ --avatar-size: var(--cf-v2-avatar-size-lg);
29
+ font-size: var(--cf-v2-avatar-font-size-lg);
30
+ }
31
+
32
+ .circle {
33
+ border-radius: 50%;
34
+ }
35
+
36
+ .rounded {
37
+ border-radius: var(--cf-v2-avatar-rounded-radius);
38
+ }
39
+
40
+ .surface {
41
+ position: absolute;
42
+ inset: 0;
43
+ display: flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ overflow: hidden;
47
+ border-radius: inherit;
48
+ background: var(--cf-v2-primary-container);
49
+ color: var(--cf-v2-on-primary-container);
50
+ }
51
+
52
+ .initials {
53
+ white-space: nowrap;
54
+ }
55
+
56
+ .glyph {
57
+ width: 62%;
58
+ height: 62%;
59
+ }
60
+
61
+ .image {
62
+ position: absolute;
63
+ inset: 0;
64
+ width: 100%;
65
+ height: 100%;
66
+ object-fit: cover;
67
+ opacity: 0;
68
+ }
69
+
70
+ .visible {
71
+ opacity: 1;
72
+ }
73
+
74
+ .status {
75
+ position: absolute;
76
+ inset-block-end: 0;
77
+ inset-inline-end: 0;
78
+ box-sizing: border-box;
79
+ width: var(--cf-v2-avatar-status-size);
80
+ height: var(--cf-v2-avatar-status-size);
81
+ border: var(--cf-v2-avatar-status-border-width) solid var(--cf-v2-surface);
82
+ border-radius: 50%;
83
+ }
84
+
85
+ .neutral {
86
+ background: var(--cf-v2-outline);
87
+ }
88
+
89
+ .success {
90
+ background: var(--cf-v2-success);
91
+ }
92
+
93
+ .warning {
94
+ background: var(--cf-v2-warning);
95
+ }
96
+
97
+ .error {
98
+ background: var(--cf-v2-error);
99
+ }
100
+
101
+ .group {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ max-width: 100%;
105
+ }
106
+
107
+ .group > * {
108
+ outline: var(--cf-v2-avatar-group-border-width) solid var(--cf-v2-surface);
109
+ }
110
+
111
+ .group > * + * {
112
+ margin-inline-start: calc(-1 * var(--avatar-group-overlap));
113
+ }
114
+
115
+ .group-sm {
116
+ --avatar-group-overlap: var(--cf-v2-avatar-group-overlap-sm);
117
+ }
118
+
119
+ .group-md {
120
+ --avatar-group-overlap: var(--cf-v2-avatar-group-overlap-md);
121
+ }
122
+
123
+ .group-lg {
124
+ --avatar-group-overlap: var(--cf-v2-avatar-group-overlap-lg);
125
+ }
126
+
127
+ .count {
128
+ background: var(--cf-v2-surface-container-hover);
129
+ color: var(--cf-v2-on-surface);
130
+ }
131
+
132
+ .group-sm .count {
133
+ font-size: var(--cf-v2-avatar-count-font-size-sm);
134
+ }
135
+
136
+ .group-md .count {
137
+ font-size: var(--cf-v2-avatar-count-font-size-md);
138
+ }
139
+
140
+ .group-lg .count {
141
+ font-size: var(--cf-v2-avatar-count-font-size-lg);
142
+ }
143
+
144
+ @media (forced-colors: active) {
145
+ .surface,
146
+ .count {
147
+ box-sizing: border-box;
148
+ border: thin solid CanvasText;
149
+ }
150
+
151
+ .status {
152
+ border-color: Canvas;
153
+ background: CanvasText;
154
+ forced-color-adjust: none;
155
+ }
156
+ }
@@ -0,0 +1,3 @@
1
+ export { AvatarGroupV2, AvatarV2 } from './AvatarV2';
2
+ export type { AvatarGroupV2Props, AvatarV2Props, AvatarV2Shape, AvatarV2Size, AvatarV2StatusTone } from './AvatarV2';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/componentsV2/data-display/AvatarV2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export { AvatarGroupV2, AvatarV2 } from './AvatarV2';
@@ -0,0 +1,25 @@
1
+ import '@corefoundry-labs/forge-tokens/theme-v2/tokens.css';
2
+ import { type HTMLAttributes, type MouseEventHandler, type ReactNode } from 'react';
3
+ export type AlertV2Tone = 'info' | 'success' | 'warning' | 'error' | 'neutral';
4
+ export type AlertV2Variant = 'soft' | 'solid' | 'outline';
5
+ type AlertV2Base = Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'children'> & {
6
+ tone?: AlertV2Tone;
7
+ variant?: AlertV2Variant;
8
+ title?: ReactNode;
9
+ description?: ReactNode;
10
+ children?: ReactNode;
11
+ icon?: ReactNode;
12
+ actions?: ReactNode;
13
+ onDismiss?: MouseEventHandler<HTMLButtonElement>;
14
+ dismissLabel?: string;
15
+ };
16
+ export type AlertV2Props = AlertV2Base & ({
17
+ title: ReactNode;
18
+ } | {
19
+ description: ReactNode;
20
+ } | {
21
+ children: ReactNode;
22
+ });
23
+ export declare const AlertV2: import("react").ForwardRefExoticComponent<AlertV2Props & import("react").RefAttributes<HTMLDivElement>>;
24
+ export {};
25
+ //# sourceMappingURL=AlertV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertV2.d.ts","sourceRoot":"","sources":["../../../../src/componentsV2/feedback/AlertV2/AlertV2.tsx"],"names":[],"mappings":"AAAA,OAAO,oDAAoD,CAAC;AAE5D,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhG,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D,KAAK,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IAC9E,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,GACpC,CAAC;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,WAAW,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAUhF,eAAO,MAAM,OAAO,yGA6ClB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import '@corefoundry-labs/forge-tokens/theme-v2/tokens.css';
3
+ import { Check, Close } from '@corefoundry-labs/forge-icons';
4
+ import { forwardRef } from 'react';
5
+ import styles from './AlertV2.module.css';
6
+ const glyphs = {
7
+ info: 'i',
8
+ success: _jsx(Check, {}),
9
+ warning: '!',
10
+ error: '×',
11
+ neutral: '•',
12
+ };
13
+ export const AlertV2 = forwardRef(function AlertV2({ tone = 'info', variant = 'soft', title, description, children, icon, actions, onDismiss, dismissLabel = 'Close', role = tone === 'error' ? 'alert' : 'status', className, ...props }, ref) {
14
+ const body = description ?? children;
15
+ return (_jsxs("div", { ...props, ref: ref, role: role, "data-tone": tone, "data-variant": variant, className: [styles.alert, styles[tone], styles[variant], className].filter(Boolean).join(' '), children: [icon !== null && (_jsx("span", { className: styles.icon, "aria-hidden": "true", children: icon ?? glyphs[tone] })), _jsxs("div", { className: styles.content, children: [title != null && _jsx("div", { className: styles.title, children: title }), body != null && _jsx("div", { className: styles.description, children: body }), actions != null && _jsx("div", { className: styles.actions, children: actions })] }), onDismiss && (_jsx("button", { type: "button", className: styles.dismiss, "aria-label": dismissLabel, onClick: onDismiss, children: _jsx(Close, { "aria-hidden": "true" }) }))] }));
16
+ });
@@ -0,0 +1,144 @@
1
+ .alert {
2
+ display: flex;
3
+ align-items: flex-start;
4
+ gap: var(--cf-v2-alert-gap);
5
+ box-sizing: border-box;
6
+ width: 100%;
7
+ padding: var(--cf-v2-alert-padding);
8
+ border-radius: var(--cf-v2-alert-radius);
9
+ font-family: inherit;
10
+ line-height: normal;
11
+ }
12
+
13
+ .info {
14
+ --alert-fill: var(--cf-v2-info);
15
+ --alert-on: var(--cf-v2-on-info);
16
+ --alert-border: var(--cf-v2-info);
17
+ }
18
+
19
+ .success {
20
+ --alert-fill: var(--cf-v2-success);
21
+ --alert-on: var(--cf-v2-on-success);
22
+ --alert-border: var(--cf-v2-success);
23
+ }
24
+
25
+ .warning {
26
+ --alert-fill: var(--cf-v2-warning);
27
+ --alert-on: var(--cf-v2-on-warning);
28
+ --alert-border: var(--cf-v2-warning);
29
+ }
30
+
31
+ .error {
32
+ --alert-fill: var(--cf-v2-error);
33
+ --alert-on: var(--cf-v2-on-error);
34
+ --alert-border: var(--cf-v2-error);
35
+ }
36
+
37
+ .neutral {
38
+ --alert-fill: var(--cf-v2-surface-container);
39
+ --alert-on: var(--cf-v2-on-surface);
40
+ --alert-border: var(--cf-v2-outline);
41
+ }
42
+
43
+ .soft {
44
+ background: var(--cf-v2-surface-container);
45
+ color: var(--cf-v2-on-surface);
46
+ }
47
+
48
+ .solid {
49
+ background: var(--alert-fill);
50
+ color: var(--alert-on);
51
+ }
52
+
53
+ .outline {
54
+ border: var(--cf-v2-alert-border-width) solid var(--alert-border);
55
+ background: var(--cf-v2-surface);
56
+ color: var(--cf-v2-on-surface);
57
+ }
58
+
59
+ .icon {
60
+ display: inline-flex;
61
+ flex: none;
62
+ align-items: center;
63
+ justify-content: center;
64
+ width: var(--cf-v2-alert-icon-size);
65
+ height: var(--cf-v2-alert-icon-size);
66
+ border-radius: var(--cf-v2-alert-icon-radius);
67
+ background: var(--alert-fill);
68
+ color: var(--alert-on);
69
+ font-size: var(--cf-v2-alert-icon-font-size);
70
+ font-weight: var(--cf-v2-alert-icon-font-weight);
71
+ }
72
+
73
+ .icon svg {
74
+ width: var(--cf-v2-alert-icon-font-size);
75
+ height: var(--cf-v2-alert-icon-font-size);
76
+ }
77
+
78
+ .solid .icon {
79
+ background: var(--alert-on);
80
+ color: var(--alert-fill);
81
+ }
82
+
83
+ .content {
84
+ display: flex;
85
+ flex: 1;
86
+ flex-direction: column;
87
+ gap: var(--cf-v2-alert-content-gap);
88
+ min-width: 0;
89
+ overflow-wrap: anywhere;
90
+ }
91
+
92
+ .title {
93
+ font-size: var(--cf-v2-alert-title-font-size);
94
+ font-weight: var(--cf-v2-alert-title-font-weight);
95
+ }
96
+
97
+ .description {
98
+ color: color-mix(in srgb, currentColor calc(var(--cf-v2-alert-description-opacity) * 100%), transparent);
99
+ font-size: var(--cf-v2-alert-description-font-size);
100
+ }
101
+
102
+ .actions {
103
+ display: flex;
104
+ flex-wrap: wrap;
105
+ align-items: center;
106
+ gap: var(--cf-v2-alert-actions-gap);
107
+ }
108
+
109
+ .dismiss {
110
+ display: inline-flex;
111
+ flex: none;
112
+ align-items: center;
113
+ justify-content: center;
114
+ width: var(--cf-v2-alert-dismiss-size);
115
+ height: var(--cf-v2-alert-dismiss-size);
116
+ margin: 0;
117
+ padding: 0;
118
+ border: 0;
119
+ border-radius: var(--cf-v2-alert-dismiss-radius);
120
+ background: transparent;
121
+ color: inherit;
122
+ cursor: pointer;
123
+ }
124
+
125
+ .dismiss svg {
126
+ width: var(--cf-v2-alert-dismiss-icon-size);
127
+ height: var(--cf-v2-alert-dismiss-icon-size);
128
+ }
129
+
130
+ .dismiss:hover {
131
+ background: color-mix(in srgb, currentColor calc(var(--cf-v2-alert-dismiss-hover-opacity) * 100%), transparent);
132
+ }
133
+
134
+ .dismiss:focus-visible {
135
+ outline: var(--cf-v2-alert-focus-width) solid currentColor;
136
+ outline-offset: calc(-1 * var(--cf-v2-alert-focus-width));
137
+ }
138
+
139
+ @media (forced-colors: active) {
140
+ .alert,
141
+ .icon {
142
+ border: thin solid CanvasText;
143
+ }
144
+ }
@@ -0,0 +1,3 @@
1
+ export { AlertV2 } from './AlertV2';
2
+ export type { AlertV2Props, AlertV2Tone, AlertV2Variant } from './AlertV2';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/componentsV2/feedback/AlertV2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export { AlertV2 } from './AlertV2';
@@ -0,0 +1,13 @@
1
+ import '@corefoundry-labs/forge-tokens/theme-v2/tokens.css';
2
+ import { type HTMLAttributes, type ReactNode } from 'react';
3
+ export type FeedbackStateV2Kind = 'loading' | 'empty' | 'error' | 'readOnly';
4
+ export interface FeedbackStateV2Props extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'aria-busy' | 'aria-describedby' | 'aria-labelledby'> {
5
+ state: FeedbackStateV2Kind;
6
+ title: string;
7
+ description?: ReactNode;
8
+ icon?: ReactNode;
9
+ actions?: ReactNode;
10
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
11
+ }
12
+ export declare const FeedbackStateV2: import("react").ForwardRefExoticComponent<FeedbackStateV2Props & import("react").RefAttributes<HTMLDivElement>>;
13
+ //# sourceMappingURL=FeedbackStateV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeedbackStateV2.d.ts","sourceRoot":"","sources":["../../../../src/componentsV2/feedback/FeedbackStateV2/FeedbackStateV2.tsx"],"names":[],"mappings":"AAAA,OAAO,oDAAoD,CAAC;AAC5D,OAAO,EAAqB,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG/E,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE7E,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,cAAc,CAAC,cAAc,CAAC,EAC9B,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,kBAAkB,GAAG,iBAAiB,CAC3E;IACC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,eAAe,iHAkD1B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import '@corefoundry-labs/forge-tokens/theme-v2/tokens.css';
3
+ import { forwardRef, useId } from 'react';
4
+ import styles from './FeedbackStateV2.module.css';
5
+ export const FeedbackStateV2 = forwardRef(function FeedbackStateV2({ state, title, description, icon, actions, headingLevel = 3, className, ...props }, ref) {
6
+ const id = `forge-feedback-state-v2-${useId().replace(/:/g, '')}`;
7
+ const titleId = `${id}-title`;
8
+ const hasDescription = description != null && typeof description !== 'boolean';
9
+ const hasIcon = icon != null && typeof icon !== 'boolean';
10
+ const hasActions = actions != null && typeof actions !== 'boolean';
11
+ const descriptionId = hasDescription ? `${id}-description` : undefined;
12
+ const role = state === 'loading' ? 'status' : state === 'error' ? 'alert' : 'region';
13
+ const hasMarker = state === 'loading' || hasIcon;
14
+ const Heading = `h${headingLevel}`;
15
+ return (_jsxs("div", { ...props, ref: ref, role: role, "aria-labelledby": titleId, "aria-describedby": descriptionId, "data-state": state, className: [styles.panel, styles[state], hasMarker && styles.hasMarker, className]
16
+ .filter(Boolean)
17
+ .join(' '), children: [state === 'loading' ? (_jsx("span", { className: styles.spinner, "data-feedback-spinner": true, "aria-hidden": "true" })) : (hasIcon && (_jsx("span", { className: styles.icon, "aria-hidden": "true", children: icon }))), _jsxs("div", { className: styles.content, children: [_jsx(Heading, { id: titleId, className: styles.heading, children: title }), hasDescription && _jsx("div", { id: descriptionId, className: styles.description, children: description }), hasActions && _jsx("div", { className: styles.actions, children: actions })] })] }));
18
+ });
@@ -0,0 +1,102 @@
1
+ .panel {
2
+ box-sizing: border-box;
3
+ display: grid;
4
+ grid-template-columns: minmax(0, 1fr);
5
+ gap: var(--cf-v2-feedback-state-gap);
6
+ min-width: 0;
7
+ padding: var(--cf-v2-feedback-state-padding);
8
+ border: var(--cf-v2-feedback-state-border-width) solid var(--cf-v2-outline-variant);
9
+ border-radius: var(--cf-v2-feedback-state-radius);
10
+ background: var(--cf-v2-surface);
11
+ color: var(--cf-v2-on-surface);
12
+ }
13
+
14
+ .hasMarker {
15
+ grid-template-columns: var(--cf-v2-feedback-state-marker-size) minmax(0, 1fr);
16
+ }
17
+
18
+ .content {
19
+ display: grid;
20
+ min-width: 0;
21
+ gap: var(--cf-v2-feedback-state-content-gap);
22
+ grid-column: 1 / -1;
23
+ }
24
+
25
+ .hasMarker > .content {
26
+ grid-column: 2;
27
+ }
28
+
29
+ .heading,
30
+ .description {
31
+ margin: 0;
32
+ overflow-wrap: anywhere;
33
+ }
34
+
35
+ .heading {
36
+ color: var(--cf-v2-on-surface);
37
+ font-size: var(--cf-v2-feedback-state-title-font-size);
38
+ }
39
+
40
+ .icon,
41
+ .spinner {
42
+ box-sizing: border-box;
43
+ display: grid;
44
+ width: var(--cf-v2-feedback-state-marker-size);
45
+ height: var(--cf-v2-feedback-state-marker-size);
46
+ flex: 0 0 auto;
47
+ place-items: center;
48
+ color: var(--cf-v2-primary);
49
+ }
50
+
51
+ .icon :global(svg) {
52
+ width: 100%;
53
+ height: 100%;
54
+ }
55
+
56
+ .spinner {
57
+ border: var(--cf-v2-feedback-state-spinner-width) solid var(--cf-v2-outline-variant);
58
+ border-top-color: var(--cf-v2-primary);
59
+ border-radius: 50%;
60
+ animation: feedback-state-spin var(--cf-v2-feedback-state-spinner-duration) linear infinite;
61
+ }
62
+
63
+ .actions {
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ gap: var(--cf-v2-feedback-state-content-gap);
67
+ margin-top: var(--cf-v2-feedback-state-actions-offset);
68
+ min-width: 0;
69
+ }
70
+
71
+ .actions > * {
72
+ max-width: 100%;
73
+ }
74
+
75
+ .empty {
76
+ border-style: dashed;
77
+ }
78
+
79
+ .error {
80
+ border-color: var(--cf-v2-error);
81
+ background: color-mix(in srgb, var(--cf-v2-error) var(--cf-v2-feedback-state-error-tint), var(--cf-v2-surface));
82
+ }
83
+
84
+ .readOnly {
85
+ border-color: var(--cf-v2-warning);
86
+ }
87
+
88
+ .loading {
89
+ border-style: dashed;
90
+ }
91
+
92
+ @keyframes feedback-state-spin {
93
+ to {
94
+ transform: rotate(360deg);
95
+ }
96
+ }
97
+
98
+ @media (prefers-reduced-motion: reduce) {
99
+ .spinner {
100
+ animation: none;
101
+ }
102
+ }
@@ -0,0 +1,3 @@
1
+ export { FeedbackStateV2 } from './FeedbackStateV2';
2
+ export type { FeedbackStateV2Kind, FeedbackStateV2Props } from './FeedbackStateV2';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/componentsV2/feedback/FeedbackStateV2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export { FeedbackStateV2 } from './FeedbackStateV2';
@@ -0,0 +1,35 @@
1
+ import '@corefoundry-labs/forge-tokens/theme-v2/tokens.css';
2
+ import { type HTMLAttributes, type ReactNode } from 'react';
3
+ export type ProgressV2Shape = 'linear' | 'circular';
4
+ export type ProgressV2Status = 'normal' | 'success' | 'error';
5
+ type ProgressV2Base = Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-valuenow' | 'aria-valuemin' | 'aria-valuemax'> & {
6
+ shape?: ProgressV2Shape;
7
+ status?: ProgressV2Status;
8
+ valueLabel?: ReactNode;
9
+ };
10
+ type ProgressV2Name = {
11
+ label: string;
12
+ 'aria-label'?: undefined;
13
+ 'aria-labelledby'?: undefined;
14
+ } | {
15
+ label?: undefined;
16
+ 'aria-label': string;
17
+ 'aria-labelledby'?: undefined;
18
+ } | {
19
+ label?: undefined;
20
+ 'aria-label'?: undefined;
21
+ 'aria-labelledby': string;
22
+ };
23
+ type ProgressV2Value = {
24
+ value: number;
25
+ max?: number;
26
+ indeterminate?: false;
27
+ } | {
28
+ indeterminate: true;
29
+ value?: undefined;
30
+ max?: undefined;
31
+ };
32
+ export type ProgressV2Props = ProgressV2Base & ProgressV2Name & ProgressV2Value;
33
+ export declare const ProgressV2: import("react").ForwardRefExoticComponent<ProgressV2Props & import("react").RefAttributes<HTMLDivElement>>;
34
+ export {};
35
+ //# sourceMappingURL=ProgressV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressV2.d.ts","sourceRoot":"","sources":["../../../../src/componentsV2/feedback/ProgressV2/ProgressV2.tsx"],"names":[],"mappings":"AAAA,OAAO,oDAAoD,CAAC;AAC5D,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGxE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,KAAK,cAAc,GAAG,IAAI,CACxB,cAAc,CAAC,cAAc,CAAC,EAC9B,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,eAAe,GAAG,eAAe,CAC7G,GAAG;IACF,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,KAAK,cAAc,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,SAAS,CAAC;IAAC,iBAAiB,CAAC,EAAE,SAAS,CAAA;CAAE,GAC1E;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,SAAS,CAAA;CAAE,GAC1E;IAAE,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,YAAY,CAAC,EAAE,SAAS,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,KAAK,eAAe,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,KAAK,CAAA;CAAE,GACtD;IAAE,aAAa,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,CAAC;AAKhF,eAAO,MAAM,UAAU,4GAyErB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import '@corefoundry-labs/forge-tokens/theme-v2/tokens.css';
3
+ import { forwardRef } from 'react';
4
+ import styles from './ProgressV2.module.css';
5
+ const center = 35;
6
+ const radius = 31.5;
7
+ export const ProgressV2 = forwardRef(function ProgressV2({ shape = 'linear', status = 'normal', value, max = 100, indeterminate = false, label, valueLabel, className, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy, ...props }, ref) {
8
+ const limit = max > 0 ? max : 100;
9
+ const current = Math.min(Math.max(Number.isFinite(value) ? value : 0, 0), limit);
10
+ const percent = (current / limit) * 100;
11
+ const circular = shape === 'circular';
12
+ const fallback = indeterminate ? (circular ? '…' : 'Ongoing') : `${Math.round(percent)}%`;
13
+ const text = valueLabel === undefined ? fallback : valueLabel;
14
+ return (_jsx("div", { ...props, ref: ref, role: "progressbar", "aria-label": label ?? ariaLabel, "aria-labelledby": labelledBy, "aria-valuenow": indeterminate ? undefined : current, "aria-valuemin": indeterminate ? undefined : 0, "aria-valuemax": indeterminate ? undefined : limit, "data-shape": shape, "data-status": status, "data-indeterminate": indeterminate || undefined, className: [styles.progress, styles[shape], styles[status], className].filter(Boolean).join(' '), children: circular ? (_jsxs(_Fragment, { children: [_jsxs("svg", { className: styles.ring, viewBox: "0 0 70 70", "aria-hidden": "true", children: [_jsx("circle", { className: styles.ringTrack, cx: center, cy: center, r: radius }), (indeterminate || percent > 0) && (_jsx("circle", { className: [styles.ringArc, indeterminate && styles.spin].filter(Boolean).join(' '), cx: center, cy: center, r: radius, pathLength: 100, strokeDasharray: `${indeterminate ? 25 : percent} 100` }))] }), text != null && _jsx("span", { className: styles.ringValue, children: text })] })) : (_jsxs(_Fragment, { children: [(label != null || text != null) && (_jsxs("div", { className: styles.header, children: [label != null && _jsx("span", { className: styles.label, children: label }), text != null && _jsx("span", { className: styles.value, children: text })] })), _jsx("div", { className: styles.track, children: _jsx("div", { className: [styles.fill, indeterminate && styles.moving].filter(Boolean).join(' '), style: indeterminate ? undefined : { width: `${percent}%` } }) })] })) }));
15
+ });