panelui-native 0.2.0 → 0.5.1

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 (106) hide show
  1. package/README.md +258 -0
  2. package/lib/module/components/accordion/index.js +312 -0
  3. package/lib/module/components/accordion/index.js.map +1 -0
  4. package/lib/module/components/alert/index.js +106 -13
  5. package/lib/module/components/alert/index.js.map +1 -1
  6. package/lib/module/components/avatar/index.js +58 -17
  7. package/lib/module/components/avatar/index.js.map +1 -1
  8. package/lib/module/components/badge/index.js +29 -8
  9. package/lib/module/components/badge/index.js.map +1 -1
  10. package/lib/module/components/button/index.js +87 -26
  11. package/lib/module/components/button/index.js.map +1 -1
  12. package/lib/module/components/checkbox/index.js +59 -18
  13. package/lib/module/components/checkbox/index.js.map +1 -1
  14. package/lib/module/components/empty-state/index.js +178 -0
  15. package/lib/module/components/empty-state/index.js.map +1 -0
  16. package/lib/module/components/frame/index.js +64 -13
  17. package/lib/module/components/frame/index.js.map +1 -1
  18. package/lib/module/components/input-group/index.js +132 -0
  19. package/lib/module/components/input-group/index.js.map +1 -0
  20. package/lib/module/components/label/index.js +117 -0
  21. package/lib/module/components/label/index.js.map +1 -0
  22. package/lib/module/components/progress/index.js +138 -0
  23. package/lib/module/components/progress/index.js.map +1 -0
  24. package/lib/module/components/steps/index.js +354 -0
  25. package/lib/module/components/steps/index.js.map +1 -0
  26. package/lib/module/components/tabs/index.js +9 -3
  27. package/lib/module/components/tabs/index.js.map +1 -1
  28. package/lib/module/components/timeline/index.js +633 -0
  29. package/lib/module/components/timeline/index.js.map +1 -0
  30. package/lib/module/components/toast/index.js +569 -0
  31. package/lib/module/components/toast/index.js.map +1 -0
  32. package/lib/module/components/toast/toast-store.js +81 -0
  33. package/lib/module/components/toast/toast-store.js.map +1 -0
  34. package/lib/module/components/typography/index.js +126 -0
  35. package/lib/module/components/typography/index.js.map +1 -0
  36. package/lib/module/icons/index.js +590 -8
  37. package/lib/module/icons/index.js.map +1 -1
  38. package/lib/module/index.js +11 -2
  39. package/lib/module/index.js.map +1 -1
  40. package/lib/module/providers/panel-ui-provider.js +2 -1
  41. package/lib/module/providers/panel-ui-provider.js.map +1 -1
  42. package/lib/module/theme/use-theme.js +90 -3
  43. package/lib/module/theme/use-theme.js.map +1 -1
  44. package/lib/typescript/src/components/accordion/index.d.ts +56 -0
  45. package/lib/typescript/src/components/accordion/index.d.ts.map +1 -0
  46. package/lib/typescript/src/components/alert/index.d.ts +56 -4
  47. package/lib/typescript/src/components/alert/index.d.ts.map +1 -1
  48. package/lib/typescript/src/components/avatar/index.d.ts +8 -1
  49. package/lib/typescript/src/components/avatar/index.d.ts.map +1 -1
  50. package/lib/typescript/src/components/badge/index.d.ts +38 -0
  51. package/lib/typescript/src/components/badge/index.d.ts.map +1 -1
  52. package/lib/typescript/src/components/button/index.d.ts +57 -0
  53. package/lib/typescript/src/components/button/index.d.ts.map +1 -1
  54. package/lib/typescript/src/components/checkbox/index.d.ts +50 -0
  55. package/lib/typescript/src/components/checkbox/index.d.ts.map +1 -1
  56. package/lib/typescript/src/components/empty-state/index.d.ts +73 -0
  57. package/lib/typescript/src/components/empty-state/index.d.ts.map +1 -0
  58. package/lib/typescript/src/components/frame/index.d.ts +39 -5
  59. package/lib/typescript/src/components/frame/index.d.ts.map +1 -1
  60. package/lib/typescript/src/components/input-group/index.d.ts +34 -0
  61. package/lib/typescript/src/components/input-group/index.d.ts.map +1 -0
  62. package/lib/typescript/src/components/label/index.d.ts +28 -0
  63. package/lib/typescript/src/components/label/index.d.ts.map +1 -0
  64. package/lib/typescript/src/components/progress/index.d.ts +132 -0
  65. package/lib/typescript/src/components/progress/index.d.ts.map +1 -0
  66. package/lib/typescript/src/components/steps/index.d.ts +62 -0
  67. package/lib/typescript/src/components/steps/index.d.ts.map +1 -0
  68. package/lib/typescript/src/components/tabs/index.d.ts.map +1 -1
  69. package/lib/typescript/src/components/timeline/index.d.ts +96 -0
  70. package/lib/typescript/src/components/timeline/index.d.ts.map +1 -0
  71. package/lib/typescript/src/components/toast/index.d.ts +176 -0
  72. package/lib/typescript/src/components/toast/index.d.ts.map +1 -0
  73. package/lib/typescript/src/components/toast/toast-store.d.ts +65 -0
  74. package/lib/typescript/src/components/toast/toast-store.d.ts.map +1 -0
  75. package/lib/typescript/src/components/typography/index.d.ts +77 -0
  76. package/lib/typescript/src/components/typography/index.d.ts.map +1 -0
  77. package/lib/typescript/src/icons/index.d.ts +60 -0
  78. package/lib/typescript/src/icons/index.d.ts.map +1 -1
  79. package/lib/typescript/src/index.d.ts +13 -4
  80. package/lib/typescript/src/index.d.ts.map +1 -1
  81. package/lib/typescript/src/providers/panel-ui-provider.d.ts.map +1 -1
  82. package/lib/typescript/src/theme/use-theme.d.ts +64 -4
  83. package/lib/typescript/src/theme/use-theme.d.ts.map +1 -1
  84. package/package.json +22 -4
  85. package/src/components/accordion/index.tsx +344 -0
  86. package/src/components/alert/index.tsx +102 -16
  87. package/src/components/avatar/index.tsx +68 -20
  88. package/src/components/badge/index.tsx +38 -9
  89. package/src/components/button/index.tsx +102 -19
  90. package/src/components/checkbox/index.tsx +64 -12
  91. package/src/components/empty-state/index.tsx +136 -0
  92. package/src/components/frame/index.tsx +101 -31
  93. package/src/components/input-group/index.tsx +164 -0
  94. package/src/components/label/index.tsx +128 -0
  95. package/src/components/progress/index.tsx +147 -0
  96. package/src/components/steps/index.tsx +343 -0
  97. package/src/components/tabs/index.tsx +10 -2
  98. package/src/components/timeline/index.tsx +456 -0
  99. package/src/components/toast/index.tsx +568 -0
  100. package/src/components/toast/toast-store.ts +120 -0
  101. package/src/components/typography/index.tsx +121 -0
  102. package/src/icons/index.tsx +423 -7
  103. package/src/index.ts +114 -4
  104. package/src/providers/panel-ui-provider.tsx +3 -0
  105. package/src/theme/use-theme.ts +119 -4
  106. package/theme.css +330 -7
@@ -1,33 +1,52 @@
1
1
  "use strict";
2
2
 
3
+ /**
4
+ * Alert — a status message with an optional leading status icon.
5
+ *
6
+ * Adapted from: heroui-inc/heroui-native src/components/alert/alert.tsx
7
+ * (Indicator / Content / Title / Description anatomy, status-driven icon and
8
+ * title colour), restyled with Coss UI tokens.
9
+ *
10
+ * The `variant` prop name is kept from PanelUI v0.2 rather than renamed to
11
+ * HeroUI's `status`, so existing code keeps working.
12
+ */
3
13
  import { createContext, forwardRef, useContext } from 'react';
4
14
  import { View } from 'react-native';
5
15
  import { tv } from 'tailwind-variants';
16
+ import { useCSSVariable } from 'uniwind';
6
17
  import { cn } from "../../utils/cn.js";
7
18
  import { Text } from "../../primitives/text.js";
8
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ import { AlertTriangleIcon, CheckCircleIcon, InfoIcon } from "../../icons/index.js";
20
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
9
21
  const alertVariants = tv({
10
22
  slots: {
11
- root: 'w-full gap-0.5 rounded-xl border px-3.5 py-3',
12
- title: 'text-sm font-medium text-card-foreground',
23
+ root: 'w-full flex-row gap-3 rounded-xl border px-3.5 py-3',
24
+ indicator: 'pt-px',
25
+ content: 'flex-1 gap-0.5',
26
+ title: 'text-sm font-medium',
13
27
  description: 'text-sm text-muted-foreground'
14
28
  },
15
29
  variants: {
16
30
  variant: {
17
31
  default: {
18
- root: 'border-border bg-surface'
32
+ root: 'border-border bg-surface',
33
+ title: 'text-card-foreground'
19
34
  },
20
35
  info: {
21
- root: 'border-info/32 bg-info/10 dark:bg-info/[0.06]'
36
+ root: 'border-info/32 bg-info-soft',
37
+ title: 'text-info-foreground'
22
38
  },
23
39
  success: {
24
- root: 'border-success/32 bg-success/10 dark:bg-success/[0.06]'
40
+ root: 'border-success/32 bg-success-soft',
41
+ title: 'text-success-foreground'
25
42
  },
26
43
  warning: {
27
- root: 'border-warning/32 bg-warning/10 dark:bg-warning/[0.06]'
44
+ root: 'border-warning/32 bg-warning-soft',
45
+ title: 'text-warning-foreground'
28
46
  },
29
47
  destructive: {
30
- root: 'border-destructive/32 bg-destructive/10 dark:bg-destructive/[0.06]'
48
+ root: 'border-destructive/32 bg-destructive-soft',
49
+ title: 'text-destructive-foreground'
31
50
  }
32
51
  }
33
52
  },
@@ -36,6 +55,22 @@ const alertVariants = tv({
36
55
  }
37
56
  });
38
57
  const AlertContext = /*#__PURE__*/createContext('default');
58
+
59
+ /** CSS variable each variant's indicator icon takes its colour from. */
60
+ const INDICATOR_COLOR_VAR = {
61
+ default: '--color-muted-foreground',
62
+ info: '--color-info-foreground',
63
+ success: '--color-success-foreground',
64
+ warning: '--color-warning-foreground',
65
+ destructive: '--color-destructive-foreground'
66
+ };
67
+ const INDICATOR_ICON = {
68
+ default: InfoIcon,
69
+ info: InfoIcon,
70
+ success: CheckCircleIcon,
71
+ warning: AlertTriangleIcon,
72
+ destructive: AlertTriangleIcon
73
+ };
39
74
  const AlertRoot = /*#__PURE__*/forwardRef(({
40
75
  className,
41
76
  variant = 'default',
@@ -44,7 +79,9 @@ const AlertRoot = /*#__PURE__*/forwardRef(({
44
79
  ...props
45
80
  }, ref) => {
46
81
  const {
47
- root
82
+ root,
83
+ indicator,
84
+ content
48
85
  } = alertVariants({
49
86
  variant
50
87
  });
@@ -57,13 +94,12 @@ const AlertRoot = /*#__PURE__*/forwardRef(({
57
94
  className
58
95
  }),
59
96
  ...props,
60
- children: icon ? /*#__PURE__*/_jsxs(View, {
61
- className: "flex-row items-start gap-3",
97
+ children: icon ? /*#__PURE__*/_jsxs(_Fragment, {
62
98
  children: [/*#__PURE__*/_jsx(View, {
63
- className: "mt-0.5",
99
+ className: indicator(),
64
100
  children: icon
65
101
  }), /*#__PURE__*/_jsx(View, {
66
- className: "flex-1 gap-1",
102
+ className: content(),
67
103
  children: children
68
104
  })]
69
105
  }) : children
@@ -71,6 +107,59 @@ const AlertRoot = /*#__PURE__*/forwardRef(({
71
107
  });
72
108
  });
73
109
  AlertRoot.displayName = 'Alert';
110
+ /**
111
+ * Leading status icon. Resolves both the icon and its colour from the parent
112
+ * Alert's variant, so it follows the active theme.
113
+ */
114
+ const AlertIndicator = /*#__PURE__*/forwardRef(({
115
+ className,
116
+ iconProps,
117
+ children,
118
+ ...props
119
+ }, ref) => {
120
+ const variant = useContext(AlertContext);
121
+ const {
122
+ indicator
123
+ } = alertVariants({
124
+ variant
125
+ });
126
+ const themeColor = useCSSVariable(INDICATOR_COLOR_VAR[variant]);
127
+ const Icon = INDICATOR_ICON[variant];
128
+ const color = iconProps?.color ?? (typeof themeColor === 'string' ? themeColor : undefined);
129
+ return /*#__PURE__*/_jsx(View, {
130
+ ref: ref,
131
+ className: indicator({
132
+ className
133
+ }),
134
+ ...props,
135
+ children: children ?? /*#__PURE__*/_jsx(Icon, {
136
+ size: iconProps?.size ?? 18,
137
+ color: color
138
+ })
139
+ });
140
+ });
141
+ AlertIndicator.displayName = 'Alert.Indicator';
142
+
143
+ /** Flex-1 wrapper for Alert.Title and Alert.Description. */
144
+ const AlertContent = /*#__PURE__*/forwardRef(({
145
+ className,
146
+ ...props
147
+ }, ref) => {
148
+ const variant = useContext(AlertContext);
149
+ const {
150
+ content
151
+ } = alertVariants({
152
+ variant
153
+ });
154
+ return /*#__PURE__*/_jsx(View, {
155
+ ref: ref,
156
+ className: content({
157
+ className
158
+ }),
159
+ ...props
160
+ });
161
+ });
162
+ AlertContent.displayName = 'Alert.Content';
74
163
  const AlertTitle = /*#__PURE__*/forwardRef(({
75
164
  className,
76
165
  ...props
@@ -106,6 +195,10 @@ const AlertDescription = /*#__PURE__*/forwardRef(({
106
195
  });
107
196
  AlertDescription.displayName = 'Alert.Description';
108
197
  export const Alert = Object.assign(AlertRoot, {
198
+ /** @optional Status icon rendered as the leading visual element. */
199
+ Indicator: AlertIndicator,
200
+ /** @optional Wrapper for title and description. */
201
+ Content: AlertContent,
109
202
  Title: AlertTitle,
110
203
  Description: AlertDescription
111
204
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","forwardRef","useContext","View","tv","cn","Text","jsx","_jsx","jsxs","_jsxs","alertVariants","slots","root","title","description","variants","variant","default","info","success","warning","destructive","defaultVariants","AlertContext","AlertRoot","className","icon","children","props","ref","Provider","value","accessibilityRole","displayName","AlertTitle","AlertDescription","Alert","Object","assign","Title","Description"],"sourceRoot":"../../../../src","sources":["components/alert/index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createContext","forwardRef","useContext","View","tv","useCSSVariable","cn","Text","AlertTriangleIcon","CheckCircleIcon","InfoIcon","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","alertVariants","slots","root","indicator","content","title","description","variants","variant","default","info","success","warning","destructive","defaultVariants","AlertContext","INDICATOR_COLOR_VAR","INDICATOR_ICON","AlertRoot","className","icon","children","props","ref","Provider","value","accessibilityRole","displayName","AlertIndicator","iconProps","themeColor","Icon","color","undefined","size","AlertContent","AlertTitle","AlertDescription","Alert","Object","assign","Indicator","Content","Title","Description"],"sourceRoot":"../../../../src","sources":["components/alert/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,8 @@ import { forwardRef, useState } from 'react';
4
4
  import { Image, View } from 'react-native';
5
5
  import { tv } from 'tailwind-variants';
6
6
  import { Text } from "../../primitives/text.js";
7
- import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { cn } from "../../utils/cn.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
9
  const avatarVariants = tv({
9
10
  slots: {
10
11
  root: 'items-center justify-center overflow-hidden rounded-full border border-border bg-muted',
@@ -35,12 +36,13 @@ const avatarVariants = tv({
35
36
  size: 'md'
36
37
  }
37
38
  });
38
- export const Avatar = /*#__PURE__*/forwardRef(({
39
+ const AvatarRoot = /*#__PURE__*/forwardRef(({
39
40
  className,
40
41
  size,
41
42
  source,
42
43
  fallback,
43
44
  imageProps,
45
+ children,
44
46
  ...props
45
47
  }, ref) => {
46
48
  const [errored, setErrored] = useState(false);
@@ -52,23 +54,62 @@ export const Avatar = /*#__PURE__*/forwardRef(({
52
54
  size
53
55
  });
54
56
  const showImage = !!source && !errored;
55
- return /*#__PURE__*/_jsx(View, {
57
+ const face = showImage ? /*#__PURE__*/_jsx(Image, {
58
+ source: source,
59
+ onError: () => setErrored(true),
60
+ className: image(),
61
+ ...imageProps
62
+ }) : /*#__PURE__*/_jsx(Text, {
63
+ className: fallbackSlot(),
64
+ children: fallback ?? '?'
65
+ });
66
+
67
+ // The plain avatar is a single clipped node.
68
+ if (!children) {
69
+ return /*#__PURE__*/_jsx(View, {
70
+ ref: ref,
71
+ accessibilityRole: "image",
72
+ className: root({
73
+ className
74
+ }),
75
+ ...props,
76
+ children: face
77
+ });
78
+ }
79
+
80
+ // With an overlay it needs two: the face keeps overflow-hidden to round
81
+ // the image, which would otherwise cut a corner badge in half, so the
82
+ // overlay hangs off an unclipped wrapper around it.
83
+ return /*#__PURE__*/_jsxs(View, {
56
84
  ref: ref,
57
- accessibilityRole: "image",
58
- className: root({
59
- className
60
- }),
85
+ className: cn('self-start', className),
61
86
  ...props,
62
- children: showImage ? /*#__PURE__*/_jsx(Image, {
63
- source: source,
64
- onError: () => setErrored(true),
65
- className: image(),
66
- ...imageProps
67
- }) : /*#__PURE__*/_jsx(Text, {
68
- className: fallbackSlot(),
69
- children: fallback ?? '?'
70
- })
87
+ children: [/*#__PURE__*/_jsx(View, {
88
+ accessibilityRole: "image",
89
+ className: root(),
90
+ children: face
91
+ }), children]
71
92
  });
72
93
  });
73
- Avatar.displayName = 'Avatar';
94
+ AvatarRoot.displayName = 'Avatar';
95
+ /**
96
+ * Overlay pinned to the avatar's top-right — an unread count, a presence dot.
97
+ *
98
+ * The ring is `border-background` so the badge separates from the image
99
+ * whatever surface the avatar sits on.
100
+ */
101
+ const AvatarBadge = /*#__PURE__*/forwardRef(({
102
+ className,
103
+ children,
104
+ ...props
105
+ }, ref) => /*#__PURE__*/_jsx(View, {
106
+ ref: ref,
107
+ className: cn('absolute -right-1 -top-1 rounded-full border-2 border-background', className),
108
+ ...props,
109
+ children: children
110
+ }));
111
+ AvatarBadge.displayName = 'Avatar.Badge';
112
+ export const Avatar = Object.assign(AvatarRoot, {
113
+ Badge: AvatarBadge
114
+ });
74
115
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useState","Image","View","tv","Text","jsx","_jsx","avatarVariants","slots","root","image","fallback","variants","size","sm","md","lg","xl","defaultVariants","Avatar","className","source","imageProps","props","ref","errored","setErrored","fallbackSlot","showImage","accessibilityRole","children","onError","displayName"],"sourceRoot":"../../../../src","sources":["components/avatar/index.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,QAAQ,QAAQ,OAAO;AAC5C,SACEC,KAAK,EACLC,IAAI,QAIC,cAAc;AACrB,SAASC,EAAE,QAA2B,mBAAmB;AACzD,SAASC,IAAI,QAAQ,0BAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE7C,MAAMC,cAAc,GAAGJ,EAAE,CAAC;EACxBK,KAAK,EAAE;IACLC,IAAI,EAAE,wFAAwF;IAC9FC,KAAK,EAAE,gCAAgC;IACvCC,QAAQ,EAAE;EACZ,CAAC;EACDC,QAAQ,EAAE;IACRC,IAAI,EAAE;MACJC,EAAE,EAAE;QAAEL,IAAI,EAAE,SAAS;QAAEE,QAAQ,EAAE;MAAU,CAAC;MAC5CI,EAAE,EAAE;QAAEN,IAAI,EAAE,WAAW;QAAEE,QAAQ,EAAE;MAAU,CAAC;MAC9CK,EAAE,EAAE;QAAEP,IAAI,EAAE,WAAW;QAAEE,QAAQ,EAAE;MAAU,CAAC;MAC9CM,EAAE,EAAE;QAAER,IAAI,EAAE,WAAW;QAAEE,QAAQ,EAAE;MAAW;IAChD;EACF,CAAC;EACDO,eAAe,EAAE;IACfL,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAWF,OAAO,MAAMM,MAAM,gBAAGpB,UAAU,CAC9B,CAAC;EAAEqB,SAAS;EAAEP,IAAI;EAAEQ,MAAM;EAAEV,QAAQ;EAAEW,UAAU;EAAE,GAAGC;AAAM,CAAC,EAAEC,GAAG,KAAK;EACpE,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAG1B,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM;IAAES,IAAI;IAAEC,KAAK;IAAEC,QAAQ,EAAEgB;EAAa,CAAC,GAAGpB,cAAc,CAAC;IAAEM;EAAK,CAAC,CAAC;EACxE,MAAMe,SAAS,GAAG,CAAC,CAACP,MAAM,IAAI,CAACI,OAAO;EAEtC,oBACEnB,IAAA,CAACJ,IAAI;IACHsB,GAAG,EAAEA,GAAI;IACTK,iBAAiB,EAAC,OAAO;IACzBT,SAAS,EAAEX,IAAI,CAAC;MAAEW;IAAU,CAAC,CAAE;IAAA,GAC3BG,KAAK;IAAAO,QAAA,EAERF,SAAS,gBACRtB,IAAA,CAACL,KAAK;MACJoB,MAAM,EAAEA,MAAO;MACfU,OAAO,EAAEA,CAAA,KAAML,UAAU,CAAC,IAAI,CAAE;MAChCN,SAAS,EAAEV,KAAK,CAAC,CAAE;MAAA,GACfY;IAAU,CACf,CAAC,gBAEFhB,IAAA,CAACF,IAAI;MAACgB,SAAS,EAAEO,YAAY,CAAC,CAAE;MAAAG,QAAA,EAAEnB,QAAQ,IAAI;IAAG,CAAO;EACzD,CACG,CAAC;AAEX,CACF,CAAC;AAEDQ,MAAM,CAACa,WAAW,GAAG,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useState","Image","View","tv","Text","cn","jsx","_jsx","jsxs","_jsxs","avatarVariants","slots","root","image","fallback","variants","size","sm","md","lg","xl","defaultVariants","AvatarRoot","className","source","imageProps","children","props","ref","errored","setErrored","fallbackSlot","showImage","face","onError","accessibilityRole","displayName","AvatarBadge","Avatar","Object","assign","Badge"],"sourceRoot":"../../../../src","sources":["components/avatar/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,17 @@ const badgeVariants = tv({
11
11
  label: 'text-xs font-medium'
12
12
  },
13
13
  variants: {
14
+ shape: {
15
+ default: {},
16
+ /** A bare status dot, no label. */
17
+ dot: {
18
+ root: 'h-2 w-2 rounded-full px-0 py-0'
19
+ },
20
+ /** Circular, for a count sitting over an avatar or an icon. */
21
+ count: {
22
+ root: 'h-5 min-w-5 rounded-full px-1.5 py-0'
23
+ }
24
+ },
14
25
  variant: {
15
26
  default: {
16
27
  root: 'bg-primary',
@@ -29,48 +40,58 @@ const badgeVariants = tv({
29
40
  label: 'text-white'
30
41
  },
31
42
  success: {
32
- root: 'bg-success/8 dark:bg-success/16',
43
+ root: 'bg-success-subtle',
33
44
  label: 'text-success-foreground'
34
45
  },
35
46
  warning: {
36
- root: 'bg-warning/8 dark:bg-warning/16',
47
+ root: 'bg-warning-subtle',
37
48
  label: 'text-warning-foreground'
38
49
  },
39
50
  info: {
40
- root: 'bg-info/8 dark:bg-info/16',
51
+ root: 'bg-info-subtle',
41
52
  label: 'text-info-foreground'
42
53
  }
43
54
  }
44
55
  },
45
56
  defaultVariants: {
46
- variant: 'default'
57
+ variant: 'default',
58
+ shape: 'default'
47
59
  }
48
60
  });
61
+
62
+ /** Counts past this render as "99+" so the badge keeps its shape. */
63
+ const MAX_COUNT = 99;
49
64
  export const Badge = /*#__PURE__*/forwardRef(({
50
65
  children,
51
66
  className,
52
67
  labelClassName,
53
68
  variant,
69
+ shape,
70
+ count,
54
71
  ...props
55
72
  }, ref) => {
73
+ const resolvedShape = shape ?? (count !== undefined ? 'count' : 'default');
56
74
  const {
57
75
  root,
58
76
  label
59
77
  } = badgeVariants({
60
- variant
78
+ variant,
79
+ shape: resolvedShape
61
80
  });
81
+ const content = count !== undefined ? `${Math.min(count, MAX_COUNT)}${count > MAX_COUNT ? '+' : ''}` : children;
62
82
  return /*#__PURE__*/_jsx(View, {
63
83
  ref: ref,
84
+ accessibilityLabel: count !== undefined ? `${count} unread` : undefined,
64
85
  className: root({
65
86
  className
66
87
  }),
67
88
  ...props,
68
- children: typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
89
+ children: resolvedShape === 'dot' ? null : typeof content === 'string' ? /*#__PURE__*/_jsx(Text, {
69
90
  className: label({
70
91
  className: labelClassName
71
92
  }),
72
- children: children
73
- }) : children
93
+ children: content
94
+ }) : content
74
95
  });
75
96
  });
76
97
  Badge.displayName = 'Badge';
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","View","tv","Text","jsx","_jsx","badgeVariants","slots","root","label","variants","variant","default","secondary","outline","destructive","success","warning","info","defaultVariants","Badge","children","className","labelClassName","props","ref","displayName"],"sourceRoot":"../../../../src","sources":["components/badge/index.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAwB,OAAO;AAClD,SAASC,IAAI,QAAwB,cAAc;AACnD,SAASC,EAAE,QAA2B,mBAAmB;AACzD,SAASC,IAAI,QAAQ,0BAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE7C,MAAMC,aAAa,GAAGJ,EAAE,CAAC;EACvBK,KAAK,EAAE;IACLC,IAAI,EAAE,wGAAwG;IAC9GC,KAAK,EAAE;EACT,CAAC;EACDC,QAAQ,EAAE;IACRC,OAAO,EAAE;MACPC,OAAO,EAAE;QAAEJ,IAAI,EAAE,YAAY;QAAEC,KAAK,EAAE;MAA0B,CAAC;MACjEI,SAAS,EAAE;QAAEL,IAAI,EAAE,cAAc;QAAEC,KAAK,EAAE;MAA4B,CAAC;MACvEK,OAAO,EAAE;QAAEN,IAAI,EAAE,8BAA8B;QAAEC,KAAK,EAAE;MAAkB,CAAC;MAC3EM,WAAW,EAAE;QAAEP,IAAI,EAAE,gBAAgB;QAAEC,KAAK,EAAE;MAAa,CAAC;MAC5DO,OAAO,EAAE;QAAER,IAAI,EAAE,iCAAiC;QAAEC,KAAK,EAAE;MAA0B,CAAC;MACtFQ,OAAO,EAAE;QAAET,IAAI,EAAE,iCAAiC;QAAEC,KAAK,EAAE;MAA0B,CAAC;MACtFS,IAAI,EAAE;QAAEV,IAAI,EAAE,2BAA2B;QAAEC,KAAK,EAAE;MAAuB;IAC3E;EACF,CAAC;EACDU,eAAe,EAAE;IACfR,OAAO,EAAE;EACX;AACF,CAAC,CAAC;AAUF,OAAO,MAAMS,KAAK,gBAAGpB,UAAU,CAC7B,CAAC;EAAEqB,QAAQ;EAAEC,SAAS;EAAEC,cAAc;EAAEZ,OAAO;EAAE,GAAGa;AAAM,CAAC,EAAEC,GAAG,KAAK;EACnE,MAAM;IAAEjB,IAAI;IAAEC;EAAM,CAAC,GAAGH,aAAa,CAAC;IAAEK;EAAQ,CAAC,CAAC;EAElD,oBACEN,IAAA,CAACJ,IAAI;IAACwB,GAAG,EAAEA,GAAI;IAACH,SAAS,EAAEd,IAAI,CAAC;MAAEc;IAAU,CAAC,CAAE;IAAA,GAAKE,KAAK;IAAAH,QAAA,EACtD,OAAOA,QAAQ,KAAK,QAAQ,gBAC3BhB,IAAA,CAACF,IAAI;MAACmB,SAAS,EAAEb,KAAK,CAAC;QAAEa,SAAS,EAAEC;MAAe,CAAC,CAAE;MAAAF,QAAA,EAAEA;IAAQ,CAAO,CAAC,GAExEA;EACD,CACG,CAAC;AAEX,CACF,CAAC;AAEDD,KAAK,CAACM,WAAW,GAAG,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","View","tv","Text","jsx","_jsx","badgeVariants","slots","root","label","variants","shape","default","dot","count","variant","secondary","outline","destructive","success","warning","info","defaultVariants","MAX_COUNT","Badge","children","className","labelClassName","props","ref","resolvedShape","undefined","content","Math","min","accessibilityLabel","displayName"],"sourceRoot":"../../../../src","sources":["components/badge/index.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAwB,OAAO;AAClD,SAASC,IAAI,QAAwB,cAAc;AACnD,SAASC,EAAE,QAA2B,mBAAmB;AACzD,SAASC,IAAI,QAAQ,0BAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE7C,MAAMC,aAAa,GAAGJ,EAAE,CAAC;EACvBK,KAAK,EAAE;IACLC,IAAI,EAAE,wGAAwG;IAC9GC,KAAK,EAAE;EACT,CAAC;EACDC,QAAQ,EAAE;IACRC,KAAK,EAAE;MACLC,OAAO,EAAE,CAAC,CAAC;MACX;MACAC,GAAG,EAAE;QAAEL,IAAI,EAAE;MAAiC,CAAC;MAC/C;MACAM,KAAK,EAAE;QAAEN,IAAI,EAAE;MAAuC;IACxD,CAAC;IACDO,OAAO,EAAE;MACPH,OAAO,EAAE;QAAEJ,IAAI,EAAE,YAAY;QAAEC,KAAK,EAAE;MAA0B,CAAC;MACjEO,SAAS,EAAE;QAAER,IAAI,EAAE,cAAc;QAAEC,KAAK,EAAE;MAA4B,CAAC;MACvEQ,OAAO,EAAE;QAAET,IAAI,EAAE,8BAA8B;QAAEC,KAAK,EAAE;MAAkB,CAAC;MAC3ES,WAAW,EAAE;QAAEV,IAAI,EAAE,gBAAgB;QAAEC,KAAK,EAAE;MAAa,CAAC;MAC5DU,OAAO,EAAE;QAAEX,IAAI,EAAE,mBAAmB;QAAEC,KAAK,EAAE;MAA0B,CAAC;MACxEW,OAAO,EAAE;QAAEZ,IAAI,EAAE,mBAAmB;QAAEC,KAAK,EAAE;MAA0B,CAAC;MACxEY,IAAI,EAAE;QAAEb,IAAI,EAAE,gBAAgB;QAAEC,KAAK,EAAE;MAAuB;IAChE;EACF,CAAC;EACDa,eAAe,EAAE;IACfP,OAAO,EAAE,SAAS;IAClBJ,KAAK,EAAE;EACT;AACF,CAAC,CAAC;;AAEF;AACA,MAAMY,SAAS,GAAG,EAAE;AAepB,OAAO,MAAMC,KAAK,gBAAGxB,UAAU,CAC7B,CAAC;EAAEyB,QAAQ;EAAEC,SAAS;EAAEC,cAAc;EAAEZ,OAAO;EAAEJ,KAAK;EAAEG,KAAK;EAAE,GAAGc;AAAM,CAAC,EAAEC,GAAG,KAAK;EACjF,MAAMC,aAAa,GAAGnB,KAAK,KAAKG,KAAK,KAAKiB,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;EAC1E,MAAM;IAAEvB,IAAI;IAAEC;EAAM,CAAC,GAAGH,aAAa,CAAC;IAAES,OAAO;IAAEJ,KAAK,EAAEmB;EAAc,CAAC,CAAC;EAExE,MAAME,OAAO,GACXlB,KAAK,KAAKiB,SAAS,GACf,GAAGE,IAAI,CAACC,GAAG,CAACpB,KAAK,EAAES,SAAS,CAAC,GAAGT,KAAK,GAAGS,SAAS,GAAG,GAAG,GAAG,EAAE,EAAE,GAC9DE,QAAQ;EAEd,oBACEpB,IAAA,CAACJ,IAAI;IACH4B,GAAG,EAAEA,GAAI;IACTM,kBAAkB,EAChBrB,KAAK,KAAKiB,SAAS,GAAG,GAAGjB,KAAK,SAAS,GAAGiB,SAC3C;IACDL,SAAS,EAAElB,IAAI,CAAC;MAAEkB;IAAU,CAAC,CAAE;IAAA,GAC3BE,KAAK;IAAAH,QAAA,EAERK,aAAa,KAAK,KAAK,GAAG,IAAI,GAAG,OAAOE,OAAO,KAAK,QAAQ,gBAC3D3B,IAAA,CAACF,IAAI;MAACuB,SAAS,EAAEjB,KAAK,CAAC;QAAEiB,SAAS,EAAEC;MAAe,CAAC,CAAE;MAAAF,QAAA,EAAEO;IAAO,CAAO,CAAC,GAEvEA;EACD,CACG,CAAC;AAEX,CACF,CAAC;AAEDR,KAAK,CAACY,WAAW,GAAG,OAAO","ignoreList":[]}
@@ -1,36 +1,51 @@
1
1
  "use strict";
2
2
 
3
- import { forwardRef, isValidElement } from 'react';
3
+ import { forwardRef } from 'react';
4
4
  import { tv } from 'tailwind-variants';
5
+ import { useCSSVariable } from 'uniwind';
5
6
  import { AnimatedPressable } from "../../primitives/animated-pressable.js";
6
7
  import { Text } from "../../primitives/text.js";
7
- import { jsx as _jsx } from "react/jsx-runtime";
8
+ import { IconColorProvider } from "../../icons/index.js";
9
+ import { Spinner } from "../spinner/index.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
11
  const buttonVariants = tv({
9
12
  slots: {
10
13
  root: 'flex-row items-center justify-center gap-2 rounded-lg border border-transparent',
11
- label: 'font-medium'
14
+ label: 'font-medium',
15
+ spinner: ''
12
16
  },
13
17
  variants: {
14
18
  variant: {
15
19
  primary: {
16
20
  root: 'border-primary bg-primary shadow-sm',
17
- label: 'text-primary-foreground'
21
+ label: 'text-primary-foreground',
22
+ spinner: 'border-primary-foreground/32 border-t-primary-foreground'
18
23
  },
19
24
  secondary: {
20
25
  root: 'bg-secondary',
21
- label: 'text-secondary-foreground'
26
+ label: 'text-secondary-foreground',
27
+ spinner: 'border-secondary-foreground/24 border-t-secondary-foreground'
22
28
  },
23
29
  outline: {
24
30
  root: 'border-input bg-popover shadow-sm',
25
- label: 'text-foreground'
31
+ label: 'text-foreground',
32
+ spinner: 'border-muted border-t-foreground'
26
33
  },
27
34
  ghost: {
28
35
  root: 'bg-transparent',
29
- label: 'text-foreground'
36
+ label: 'text-foreground',
37
+ spinner: 'border-muted border-t-foreground'
30
38
  },
31
39
  destructive: {
32
40
  root: 'border-destructive bg-destructive shadow-sm',
33
- label: 'text-white'
41
+ label: 'text-white',
42
+ spinner: 'border-white/32 border-t-white'
43
+ },
44
+ /** Neutral surface for third-party sign-in, sized for a full-width stack. */
45
+ social: {
46
+ root: 'border-input bg-card shadow-sm',
47
+ label: 'text-foreground',
48
+ spinner: 'border-muted border-t-foreground'
34
49
  }
35
50
  },
36
51
  size: {
@@ -50,6 +65,11 @@ const buttonVariants = tv({
50
65
  root: 'h-11 w-11 px-0'
51
66
  }
52
67
  },
68
+ fullWidth: {
69
+ true: {
70
+ root: 'w-full'
71
+ }
72
+ },
53
73
  disabled: {
54
74
  true: {
55
75
  root: 'opacity-[0.64]'
@@ -61,40 +81,81 @@ const buttonVariants = tv({
61
81
  size: 'md'
62
82
  }
63
83
  });
84
+ const SPINNER_SIZE = {
85
+ sm: 'sm',
86
+ md: 'sm',
87
+ lg: 'md',
88
+ icon: 'sm'
89
+ };
90
+
91
+ /**
92
+ * The theme token each variant's content reads against. Icons in the content
93
+ * slots inherit the resolved value, so they follow the theme automatically.
94
+ *
95
+ * `destructive` is absent on purpose: its background is a saturated red in
96
+ * every theme, so its content is always white rather than a themed token.
97
+ */
98
+ const CONTENT_COLOR_VAR = {
99
+ primary: '--color-primary-foreground',
100
+ secondary: '--color-secondary-foreground',
101
+ outline: '--color-foreground',
102
+ ghost: '--color-foreground',
103
+ social: '--color-foreground'
104
+ };
64
105
  export const Button = /*#__PURE__*/forwardRef(({
65
106
  children,
66
107
  className,
67
108
  labelClassName,
68
109
  variant,
69
110
  size,
111
+ fullWidth,
70
112
  disabled,
113
+ loading = false,
114
+ startContent,
115
+ endContent,
71
116
  ...props
72
117
  }, ref) => {
118
+ const isDisabled = disabled || loading;
73
119
  const {
74
120
  root,
75
- label
121
+ label,
122
+ spinner
76
123
  } = buttonVariants({
77
124
  variant,
78
125
  size,
79
- disabled: !!disabled
126
+ fullWidth,
127
+ disabled: isDisabled
80
128
  });
81
- return /*#__PURE__*/_jsx(AnimatedPressable, {
82
- ref: ref,
83
- accessibilityRole: "button",
84
- accessibilityState: {
85
- disabled: !!disabled
86
- },
87
- disabled: disabled,
88
- className: root({
89
- className
90
- }),
91
- ...props,
92
- children: typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
93
- className: label({
94
- className: labelClassName
129
+
130
+ // Icons in the content slots inherit this, so they stay legible when the
131
+ // theme inverts the button's background. Without it every caller has to
132
+ // hardcode a hex that is wrong in one theme or the other.
133
+ const themedColor = useCSSVariable(CONTENT_COLOR_VAR[variant === 'destructive' ? 'primary' : variant ?? 'primary']);
134
+ const contentColor = variant === 'destructive' ? '#ffffff' : typeof themedColor === 'string' ? themedColor : undefined;
135
+ return /*#__PURE__*/_jsx(IconColorProvider, {
136
+ color: contentColor,
137
+ children: /*#__PURE__*/_jsxs(AnimatedPressable, {
138
+ ref: ref,
139
+ accessibilityRole: "button",
140
+ accessibilityState: {
141
+ disabled: isDisabled,
142
+ busy: loading
143
+ },
144
+ disabled: isDisabled,
145
+ className: root({
146
+ className
95
147
  }),
96
- children: children
97
- }) : /*#__PURE__*/isValidElement(children) ? children : children
148
+ ...props,
149
+ children: [loading ? /*#__PURE__*/_jsx(Spinner, {
150
+ size: SPINNER_SIZE[size ?? 'md'],
151
+ className: spinner()
152
+ }) : startContent, typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
153
+ className: label({
154
+ className: labelClassName
155
+ }),
156
+ children: children
157
+ }) : children, endContent]
158
+ })
98
159
  });
99
160
  });
100
161
  Button.displayName = 'Button';
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","isValidElement","tv","AnimatedPressable","Text","jsx","_jsx","buttonVariants","slots","root","label","variants","variant","primary","secondary","outline","ghost","destructive","size","sm","md","lg","icon","disabled","true","defaultVariants","Button","children","className","labelClassName","props","ref","accessibilityRole","accessibilityState","displayName"],"sourceRoot":"../../../../src","sources":["components/button/index.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,cAAc,QAAwB,OAAO;AAElE,SAASC,EAAE,QAA2B,mBAAmB;AACzD,SACEC,iBAAiB,QAEZ,wCAAqC;AAC5C,SAASC,IAAI,QAAQ,0BAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE7C,MAAMC,cAAc,GAAGL,EAAE,CAAC;EACxBM,KAAK,EAAE;IACLC,IAAI,EAAE,iFAAiF;IACvFC,KAAK,EAAE;EACT,CAAC;EACDC,QAAQ,EAAE;IACRC,OAAO,EAAE;MACPC,OAAO,EAAE;QACPJ,IAAI,EAAE,qCAAqC;QAC3CC,KAAK,EAAE;MACT,CAAC;MACDI,SAAS,EAAE;QACTL,IAAI,EAAE,cAAc;QACpBC,KAAK,EAAE;MACT,CAAC;MACDK,OAAO,EAAE;QACPN,IAAI,EAAE,mCAAmC;QACzCC,KAAK,EAAE;MACT,CAAC;MACDM,KAAK,EAAE;QACLP,IAAI,EAAE,gBAAgB;QACtBC,KAAK,EAAE;MACT,CAAC;MACDO,WAAW,EAAE;QACXR,IAAI,EAAE,6CAA6C;QACnDC,KAAK,EAAE;MACT;IACF,CAAC;IACDQ,IAAI,EAAE;MACJC,EAAE,EAAE;QAAEV,IAAI,EAAE,oBAAoB;QAAEC,KAAK,EAAE;MAAU,CAAC;MACpDU,EAAE,EAAE;QAAEX,IAAI,EAAE,WAAW;QAAEC,KAAK,EAAE;MAAY,CAAC;MAC7CW,EAAE,EAAE;QAAEZ,IAAI,EAAE,WAAW;QAAEC,KAAK,EAAE;MAAU,CAAC;MAC3CY,IAAI,EAAE;QAAEb,IAAI,EAAE;MAAiB;IACjC,CAAC;IACDc,QAAQ,EAAE;MACRC,IAAI,EAAE;QAAEf,IAAI,EAAE;MAAiB;IACjC;EACF,CAAC;EACDgB,eAAe,EAAE;IACfb,OAAO,EAAE,SAAS;IAClBM,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAaF,OAAO,MAAMQ,MAAM,gBAAG1B,UAAU,CAC9B,CACE;EAAE2B,QAAQ;EAAEC,SAAS;EAAEC,cAAc;EAAEjB,OAAO;EAAEM,IAAI;EAAEK,QAAQ;EAAE,GAAGO;AAAM,CAAC,EAC1EC,GAAG,KACA;EACH,MAAM;IAAEtB,IAAI;IAAEC;EAAM,CAAC,GAAGH,cAAc,CAAC;IAAEK,OAAO;IAAEM,IAAI;IAAEK,QAAQ,EAAE,CAAC,CAACA;EAAS,CAAC,CAAC;EAE/E,oBACEjB,IAAA,CAACH,iBAAiB;IAChB4B,GAAG,EAAEA,GAAI;IACTC,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAE;MAAEV,QAAQ,EAAE,CAAC,CAACA;IAAS,CAAE;IAC7CA,QAAQ,EAAEA,QAAS;IACnBK,SAAS,EAAEnB,IAAI,CAAC;MAAEmB;IAAU,CAAC,CAAE;IAAA,GAC3BE,KAAK;IAAAH,QAAA,EAER,OAAOA,QAAQ,KAAK,QAAQ,gBAC3BrB,IAAA,CAACF,IAAI;MAACwB,SAAS,EAAElB,KAAK,CAAC;QAAEkB,SAAS,EAAEC;MAAe,CAAC,CAAE;MAAAF,QAAA,EAAEA;IAAQ,CAAO,CAAC,GACtE,aAAA1B,cAAc,CAAC0B,QAAQ,CAAC,GAC1BA,QAAQ,GAERA;EACD,CACgB,CAAC;AAExB,CACF,CAAC;AAEDD,MAAM,CAACQ,WAAW,GAAG,QAAQ","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","tv","useCSSVariable","AnimatedPressable","Text","IconColorProvider","Spinner","jsx","_jsx","jsxs","_jsxs","buttonVariants","slots","root","label","spinner","variants","variant","primary","secondary","outline","ghost","destructive","social","size","sm","md","lg","icon","fullWidth","true","disabled","defaultVariants","SPINNER_SIZE","CONTENT_COLOR_VAR","Button","children","className","labelClassName","loading","startContent","endContent","props","ref","isDisabled","themedColor","contentColor","undefined","color","accessibilityRole","accessibilityState","busy","displayName"],"sourceRoot":"../../../../src","sources":["components/button/index.tsx"],"mappings":"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","ignoreList":[]}