@charcuterie/ui 3.9.0 → 3.11.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.
- package/README.md +11 -0
- package/dist/Badge/Badge.d.ts +2 -37
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +15 -30
- package/dist/Badge/Badge.js.map +1 -1
- package/dist/Badge/useBadgeShape.d.ts +57 -0
- package/dist/Badge/useBadgeShape.d.ts.map +1 -0
- package/dist/Badge/useBadgeShape.js +35 -0
- package/dist/Badge/useBadgeShape.js.map +1 -0
- package/dist/BadgeButton/BadgeButton.d.ts +59 -0
- package/dist/BadgeButton/BadgeButton.d.ts.map +1 -0
- package/dist/BadgeButton/BadgeButton.js +64 -0
- package/dist/BadgeButton/BadgeButton.js.map +1 -0
- package/dist/Card/Card.d.ts +12 -1
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +14 -2
- package/dist/Card/Card.js.map +1 -1
- package/dist/Card/cardAccentEdge.d.ts +101 -0
- package/dist/Card/cardAccentEdge.d.ts.map +1 -0
- package/dist/Card/cardAccentEdge.js +92 -0
- package/dist/Card/cardAccentEdge.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/Badge/Badge.tsx +30 -113
- package/src/Badge/useBadgeShape.tsx +142 -0
- package/src/BadgeButton/BadgeButton.mdx +67 -0
- package/src/BadgeButton/BadgeButton.stories.tsx +199 -0
- package/src/BadgeButton/BadgeButton.test.tsx +164 -0
- package/src/BadgeButton/BadgeButton.tsx +129 -0
- package/src/Card/Card.mdx +21 -0
- package/src/Card/Card.stories.tsx +91 -0
- package/src/Card/Card.test.tsx +92 -1
- package/src/Card/Card.tsx +34 -0
- package/src/Card/cardAccentEdge.test.ts +105 -0
- package/src/Card/cardAccentEdge.ts +135 -0
- package/src/index.ts +4 -0
- package/src/sourceRules.test.ts +8 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A coloured bar down a card's leading edge — and the reason it is
|
|
3
|
+
* a pseudo-element rather than a border.
|
|
4
|
+
*
|
|
5
|
+
* Three apps had grown this shape independently and all three drew
|
|
6
|
+
* it as a straight border beside a rounded box, so the bar ran past
|
|
7
|
+
* the curve and stopped square while the card it belonged to was
|
|
8
|
+
* round. Folio put `border-inline-start` on a WRAPPER around the
|
|
9
|
+
* card; mail-sifter puts `borderInlineStartWidth: 4` on a
|
|
10
|
+
* `rounded-xl` anchor; spoolbuddy writes `rounded-lg border-l-3`.
|
|
11
|
+
* A border is painted on the border box, so none of them can follow
|
|
12
|
+
* a corner — the notch is not a bug in any one app, it is what that
|
|
13
|
+
* technique does.
|
|
14
|
+
*
|
|
15
|
+
* A pseudo-element overlays the card and takes
|
|
16
|
+
* `border-radius: inherit`, so the bar follows whatever radius the
|
|
17
|
+
* card already has and nobody states a radius twice.
|
|
18
|
+
*
|
|
19
|
+
* ⚠️ **The shadow goes on the pseudo-element, never on the card.**
|
|
20
|
+
* `Card` carries `shadow-low` from the elevation scale, and an app
|
|
21
|
+
* stylesheet is unlayered while Tailwind's utilities sit in
|
|
22
|
+
* `@layer utilities` — so a `box-shadow` written at the call site
|
|
23
|
+
* outranks the utility and takes the card's elevation away with it.
|
|
24
|
+
* That is not hypothetical; it is the version of this fix that was
|
|
25
|
+
* written first.
|
|
26
|
+
*
|
|
27
|
+
* ⚠️ **Not a 3px-wide pseudo-element with a rounded leading edge.**
|
|
28
|
+
* A `border-radius` of `0.5rem` on a 3px-wide box is clamped by the
|
|
29
|
+
* browser to fit, so it caps the bar instead of following the
|
|
30
|
+
* card's curve.
|
|
31
|
+
*
|
|
32
|
+
* ⚠️ **`box-shadow` has no logical form**, so the offset is
|
|
33
|
+
* physical and the `rtl:` variant is what carries the bar to the
|
|
34
|
+
* other side. A single `inset 3px` would put it on the left of an
|
|
35
|
+
* Arabic page, which is the trailing edge there.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* The custom property an explicit colour is threaded through.
|
|
39
|
+
*
|
|
40
|
+
* A property rather than an inline `box-shadow`, because the shadow
|
|
41
|
+
* string has to stay a COMPLETE literal in the source for Tailwind
|
|
42
|
+
* to generate it at all. One literal reading one variable covers
|
|
43
|
+
* every colour an app can compute; interpolating the colour into
|
|
44
|
+
* the class name would generate nothing, paint nothing, and report
|
|
45
|
+
* nothing.
|
|
46
|
+
*/
|
|
47
|
+
export const ACCENT_EDGE_COLOR_PROPERTY = "--charcuterie-accent-edge";
|
|
48
|
+
/**
|
|
49
|
+
* The overlay itself. Colour arrives separately.
|
|
50
|
+
*
|
|
51
|
+
* `pointer-events: none` is load-bearing rather than tidy: this box
|
|
52
|
+
* covers the whole card, including every link and button in it.
|
|
53
|
+
*/
|
|
54
|
+
export const ACCENT_EDGE_BASE_CLASS = "relative before:pointer-events-none before:absolute before:inset-0 before:rounded-[inherit] before:content-['']";
|
|
55
|
+
/**
|
|
56
|
+
* Ten indices, written out in full, for the reason
|
|
57
|
+
* `categoricalStyles.ts` opens with: Tailwind scans source text for
|
|
58
|
+
* COMPLETE class strings, so a template literal generates nothing
|
|
59
|
+
* at all and the bar renders invisible with no error and no failing
|
|
60
|
+
* test. `tailwindCandidates.test.ts` compiles every literal in this
|
|
61
|
+
* package through the real Tailwind, which is the something that
|
|
62
|
+
* checks.
|
|
63
|
+
*/
|
|
64
|
+
export const ACCENT_EDGE_CATEGORICAL_CLASS = {
|
|
65
|
+
1: "before:shadow-[inset_3px_0_0_var(--color-categorical-1-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-1-solid)]",
|
|
66
|
+
2: "before:shadow-[inset_3px_0_0_var(--color-categorical-2-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-2-solid)]",
|
|
67
|
+
3: "before:shadow-[inset_3px_0_0_var(--color-categorical-3-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-3-solid)]",
|
|
68
|
+
4: "before:shadow-[inset_3px_0_0_var(--color-categorical-4-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-4-solid)]",
|
|
69
|
+
5: "before:shadow-[inset_3px_0_0_var(--color-categorical-5-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-5-solid)]",
|
|
70
|
+
6: "before:shadow-[inset_3px_0_0_var(--color-categorical-6-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-6-solid)]",
|
|
71
|
+
7: "before:shadow-[inset_3px_0_0_var(--color-categorical-7-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-7-solid)]",
|
|
72
|
+
8: "before:shadow-[inset_3px_0_0_var(--color-categorical-8-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-8-solid)]",
|
|
73
|
+
9: "before:shadow-[inset_3px_0_0_var(--color-categorical-9-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-9-solid)]",
|
|
74
|
+
10: "before:shadow-[inset_3px_0_0_var(--color-categorical-10-solid)] rtl:before:shadow-[inset_-3px_0_0_var(--color-categorical-10-solid)]",
|
|
75
|
+
};
|
|
76
|
+
/** The same bar, reading the caller's own colour. */
|
|
77
|
+
export const ACCENT_EDGE_COLOR_CLASS = "before:shadow-[inset_3px_0_0_var(--charcuterie-accent-edge)] rtl:before:shadow-[inset_-3px_0_0_var(--charcuterie-accent-edge)]";
|
|
78
|
+
export const getAccentEdgeClassName = (accentEdge) => `${ACCENT_EDGE_BASE_CLASS} ${accentEdge.categorical == null
|
|
79
|
+
? ACCENT_EDGE_COLOR_CLASS
|
|
80
|
+
: ACCENT_EDGE_CATEGORICAL_CLASS[accentEdge.categorical]}`;
|
|
81
|
+
/**
|
|
82
|
+
* The inline style an explicit colour needs, and nothing when the
|
|
83
|
+
* colour came from an index.
|
|
84
|
+
*
|
|
85
|
+
* Returns `undefined` rather than `{}` so a card with a categorical
|
|
86
|
+
* edge and no `style` of its own renders no `style` attribute at
|
|
87
|
+
* all.
|
|
88
|
+
*/
|
|
89
|
+
export const getAccentEdgeStyle = (accentEdge) => accentEdge.color == null
|
|
90
|
+
? undefined
|
|
91
|
+
: { [ACCENT_EDGE_COLOR_PROPERTY]: accentEdge.color };
|
|
92
|
+
//# sourceMappingURL=cardAccentEdge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardAccentEdge.js","sourceRoot":"","sources":["../../src/Card/cardAccentEdge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAwBH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GACrC,2BAA2B,CAAA;AAE7B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,iHAAiH,CAAA;AAEnH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAGtC;IACF,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,CAAC,EAAE,oIAAoI;IACvI,EAAE,EAAE,sIAAsI;CAC3I,CAAA;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAClC,gIAAgI,CAAA;AAElI,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,UAA0B,EAClB,EAAE,CACV,GAAG,sBAAsB,IACvB,UAAU,CAAC,WAAW,IAAI,IAAI;IAC5B,CAAC,CAAC,uBAAuB;IACzB,CAAC,CAAC,6BAA6B,CAC3B,UAAU,CAAC,WAAW,CAE9B,EAAE,CAAA;AAEJ;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,UAA0B,EACU,EAAE,CACtC,UAAU,CAAC,KAAK,IAAI,IAAI;IACtB,CAAC,CAAC,SAAS;IACX,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -42,6 +42,9 @@ export type { AlertProps, AlertSize, } from "./Alert/Alert.tsx";
|
|
|
42
42
|
export { Alert } from "./Alert/Alert.tsx";
|
|
43
43
|
export type { BadgeProps } from "./Badge/Badge.tsx";
|
|
44
44
|
export { Badge } from "./Badge/Badge.tsx";
|
|
45
|
+
export type { BadgeShapeProps } from "./Badge/useBadgeShape.tsx";
|
|
46
|
+
export type { BadgeButtonProps } from "./BadgeButton/BadgeButton.tsx";
|
|
47
|
+
export { BadgeButton } from "./BadgeButton/BadgeButton.tsx";
|
|
45
48
|
export type { BoardMove, BoardProps, } from "./Board/Board.tsx";
|
|
46
49
|
export { Board } from "./Board/Board.tsx";
|
|
47
50
|
export type { BoardItem } from "./Board/BoardCard.tsx";
|
|
@@ -54,6 +57,7 @@ export type { ButtonLinkProps } from "./ButtonLink/ButtonLink.tsx";
|
|
|
54
57
|
export { ButtonLink } from "./ButtonLink/ButtonLink.tsx";
|
|
55
58
|
export type { CardPadding, CardProps, CardSurface, } from "./Card/Card.tsx";
|
|
56
59
|
export { Card } from "./Card/Card.tsx";
|
|
60
|
+
export type { CardAccentEdge } from "./Card/cardAccentEdge.ts";
|
|
57
61
|
export type { CheckboxProps } from "./Checkbox/Checkbox.tsx";
|
|
58
62
|
export { Checkbox } from "./Checkbox/Checkbox.tsx";
|
|
59
63
|
export type { ColorSchemeSwitcherProps } from "./ColorSchemeSwitcher/ColorSchemeSwitcher.tsx";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -36,6 +36,7 @@ export { chooseColumns, DEFAULT_MAX_AUTO_COLUMNS, DEFAULT_MAX_MANUAL_COLUMNS, DE
|
|
|
36
36
|
export { localStorageColumnPersistence, readStoredChoice, useAdaptiveColumns, viewportBlockSizeResolver, } from "./AdaptiveGrid/useAdaptiveColumns.js";
|
|
37
37
|
export { Alert } from "./Alert/Alert.js";
|
|
38
38
|
export { Badge } from "./Badge/Badge.js";
|
|
39
|
+
export { BadgeButton } from "./BadgeButton/BadgeButton.js";
|
|
39
40
|
export { Board } from "./Board/Board.js";
|
|
40
41
|
export { chooseDropIndex, chooseDropTarget, describeMove, getIsMoveMeaningful, toSettledIndex, } from "./Board/boardMove.js";
|
|
41
42
|
export { Button } from "./Button/Button.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA2B,CAAA;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAiC,CAAA;AAE9D,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,0BAA0B,EAC1B,iCAAiC,EACjC,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,iCAAiC,CAAA;AAKxC,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAK7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAmB,CAAA;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Badge/Badge.tsx
CHANGED
|
@@ -1,61 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CategoricalIndex,
|
|
3
|
-
IntentName,
|
|
4
|
-
} from "@charcuterie/tokens"
|
|
5
1
|
import type {
|
|
6
2
|
ComponentPropsWithRef,
|
|
7
3
|
ReactNode,
|
|
8
4
|
} from "react"
|
|
9
5
|
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import { BADGE_SIZE_CLASS } from "../controlStyles.ts"
|
|
13
|
-
import type { IntentAppearance } from "../intentStyles.ts"
|
|
14
|
-
import { INTENT_APPEARANCE_CLASS } from "../intentStyles.ts"
|
|
15
|
-
import { toClassName } from "../toClassName.ts"
|
|
16
|
-
import { useIsTextClipped } from "./useIsTextClipped.ts"
|
|
6
|
+
import type { BadgeShapeProps } from "./useBadgeShape.tsx"
|
|
7
|
+
import { useBadgeShape } from "./useBadgeShape.tsx"
|
|
17
8
|
|
|
18
|
-
export type BadgeProps = ComponentPropsWithRef<"span"> &
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* `@charcuterie/tokens` is the stable fallback for a row nobody
|
|
29
|
-
* has chosen a colour for yet.
|
|
30
|
-
*
|
|
31
|
-
* Mutually exclusive with `intent` **in the type**: a badge is one
|
|
32
|
-
* colour, and passing both is a question with no answer rather
|
|
33
|
-
* than a precedence rule to remember.
|
|
34
|
-
*/
|
|
35
|
-
categorical?: CategoricalIndex
|
|
36
|
-
children: ReactNode
|
|
37
|
-
icon?: ReactNode
|
|
38
|
-
intent?: IntentName
|
|
39
|
-
/**
|
|
40
|
-
* What happens when the label is wider than the space it is given.
|
|
41
|
-
*
|
|
42
|
-
* - `truncate` — one line, capped at the container, ellipsis. The
|
|
43
|
-
* default, because a status pill that changes its row's height
|
|
44
|
-
* when a message gets longer breaks the table it sits in.
|
|
45
|
-
* - `wrap` — the pill grows taller and shows everything. For the
|
|
46
|
-
* kiosk and any touch context, where the hover readout that
|
|
47
|
-
* `truncate` relies on does not exist.
|
|
48
|
-
*/
|
|
49
|
-
overflow?: "truncate" | "wrap"
|
|
50
|
-
size?: BadgeSize
|
|
51
|
-
/**
|
|
52
|
-
* The exclusivity, and it is deliberately the *only* thing this
|
|
53
|
-
* arm says. Both props stay declared above so `react-docgen` can
|
|
54
|
-
* see them and `storyControls.test.ts` can require a control for
|
|
55
|
-
* each; this arm's whole job is to refuse the case where both
|
|
56
|
-
* arrive with a value.
|
|
57
|
-
*/
|
|
58
|
-
} & ({ categorical?: never } | { intent?: never })
|
|
9
|
+
export type BadgeProps = ComponentPropsWithRef<"span"> &
|
|
10
|
+
BadgeShapeProps & {
|
|
11
|
+
/**
|
|
12
|
+
* The exclusivity, and it is deliberately the *only* thing this
|
|
13
|
+
* arm says. Both props stay declared on `BadgeShapeProps` so
|
|
14
|
+
* `react-docgen` can see them and `storyControls.test.ts` can
|
|
15
|
+
* require a control for each; this arm's whole job is to refuse
|
|
16
|
+
* the case where both arrive with a value.
|
|
17
|
+
*/
|
|
18
|
+
} & ({ categorical?: never } | { intent?: never })
|
|
59
19
|
|
|
60
20
|
/**
|
|
61
21
|
* Four repos, and rip-deck declares the **identical** `TONE_CLASS`
|
|
@@ -98,79 +58,36 @@ export type BadgeProps = ComponentPropsWithRef<"span"> & {
|
|
|
98
58
|
* `overflow` is what happens next.
|
|
99
59
|
*/
|
|
100
60
|
export const Badge = ({
|
|
101
|
-
appearance
|
|
61
|
+
appearance,
|
|
102
62
|
categorical,
|
|
103
63
|
children,
|
|
104
64
|
className,
|
|
105
65
|
icon,
|
|
106
|
-
intent
|
|
107
|
-
overflow
|
|
108
|
-
size
|
|
66
|
+
intent,
|
|
67
|
+
overflow,
|
|
68
|
+
size,
|
|
109
69
|
title,
|
|
110
70
|
...spanProps
|
|
111
71
|
}: BadgeProps): ReactNode => {
|
|
112
|
-
const
|
|
72
|
+
const shape = useBadgeShape({
|
|
73
|
+
appearance,
|
|
74
|
+
categorical,
|
|
75
|
+
children,
|
|
76
|
+
className,
|
|
77
|
+
icon,
|
|
78
|
+
intent,
|
|
79
|
+
overflow,
|
|
80
|
+
size,
|
|
81
|
+
title,
|
|
82
|
+
})
|
|
113
83
|
|
|
114
84
|
return (
|
|
115
85
|
<span
|
|
116
86
|
{...spanProps}
|
|
117
|
-
className={
|
|
118
|
-
|
|
119
|
-
// The cap. Without it every other rule here is decoration.
|
|
120
|
-
"max-w-full",
|
|
121
|
-
overflow === "wrap"
|
|
122
|
-
? // A stadium end-cap on a three-line box reads as a
|
|
123
|
-
// rendering fault rather than a badge, so the wrapping
|
|
124
|
-
// pill relaxes to a rounded rectangle.
|
|
125
|
-
"rounded-2xl"
|
|
126
|
-
: "rounded-full",
|
|
127
|
-
BADGE_SIZE_CLASS[size],
|
|
128
|
-
// A ternary rather than a merged map: the two are indexed
|
|
129
|
-
// by different keys, and `undefined` is the only honest
|
|
130
|
-
// discriminant once the type has already refused the case
|
|
131
|
-
// where both arrive.
|
|
132
|
-
categorical === undefined
|
|
133
|
-
? INTENT_APPEARANCE_CLASS[intent][appearance]
|
|
134
|
-
: CATEGORICAL_APPEARANCE_CLASS[categorical][
|
|
135
|
-
appearance
|
|
136
|
-
],
|
|
137
|
-
className,
|
|
138
|
-
)}
|
|
139
|
-
// Only when something is actually hidden. A tooltip on every
|
|
140
|
-
// short pill in a bay list is noise, and a `title` that
|
|
141
|
-
// duplicates fully-visible text is a screen-reader duplicate
|
|
142
|
-
// for no gain.
|
|
143
|
-
title={title ?? clippedText}
|
|
87
|
+
className={shape.className}
|
|
88
|
+
title={shape.title}
|
|
144
89
|
>
|
|
145
|
-
{
|
|
146
|
-
<span
|
|
147
|
-
aria-hidden="true"
|
|
148
|
-
className="contents shrink-0"
|
|
149
|
-
>
|
|
150
|
-
{icon}
|
|
151
|
-
</span>
|
|
152
|
-
) : null}
|
|
153
|
-
|
|
154
|
-
{/*
|
|
155
|
-
* The truncation happens here rather than on the pill so the
|
|
156
|
-
* border and the rounded end-cap stay outside the clip — an
|
|
157
|
-
* `overflow: hidden` on the pill itself squares off the end
|
|
158
|
-
* the ellipsis is nearest to.
|
|
159
|
-
*
|
|
160
|
-
* `min-w-0` because a flex item's automatic minimum size is
|
|
161
|
-
* its content, which would win against `max-w-full` on the
|
|
162
|
-
* parent and put the overflow back.
|
|
163
|
-
*/}
|
|
164
|
-
<span
|
|
165
|
-
className={
|
|
166
|
-
overflow === "wrap"
|
|
167
|
-
? "min-w-0"
|
|
168
|
-
: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap"
|
|
169
|
-
}
|
|
170
|
-
ref={labelRef}
|
|
171
|
-
>
|
|
172
|
-
{children}
|
|
173
|
-
</span>
|
|
90
|
+
{shape.content}
|
|
174
91
|
</span>
|
|
175
92
|
)
|
|
176
93
|
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CategoricalIndex,
|
|
3
|
+
IntentName,
|
|
4
|
+
} from "@charcuterie/tokens"
|
|
5
|
+
import type { ReactNode } from "react"
|
|
6
|
+
|
|
7
|
+
import { CATEGORICAL_APPEARANCE_CLASS } from "../categoricalStyles.ts"
|
|
8
|
+
import type { BadgeSize } from "../controlStyles.ts"
|
|
9
|
+
import { BADGE_SIZE_CLASS } from "../controlStyles.ts"
|
|
10
|
+
import type { IntentAppearance } from "../intentStyles.ts"
|
|
11
|
+
import { INTENT_APPEARANCE_CLASS } from "../intentStyles.ts"
|
|
12
|
+
import { toClassName } from "../toClassName.ts"
|
|
13
|
+
import { useIsTextClipped } from "./useIsTextClipped.ts"
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The visual half of a badge, shared by the two elements that wear
|
|
17
|
+
* it.
|
|
18
|
+
*
|
|
19
|
+
* `Badge` is a `<span>` and `BadgeButton` is a `<button>`, and the
|
|
20
|
+
* pill is supposed to be indistinguishable between them — so the
|
|
21
|
+
* class list, the icon slot, the truncation and the
|
|
22
|
+
* only-when-clipped `title` are computed **here**, once, exactly as
|
|
23
|
+
* `Button` and `ButtonLink` both call `getControlClassName`. A
|
|
24
|
+
* second copy of this arithmetic is how the two drift: the wrapping
|
|
25
|
+
* pill's `rounded-2xl` and the label's `min-w-0` are each one line,
|
|
26
|
+
* and each is load-bearing.
|
|
27
|
+
*/
|
|
28
|
+
export type BadgeShapeProps = {
|
|
29
|
+
appearance?: Exclude<IntentAppearance, "ghost">
|
|
30
|
+
/**
|
|
31
|
+
* A numbered, **non-semantic** colour: 1–10, no meaning attached.
|
|
32
|
+
*
|
|
33
|
+
* For a badge whose colour the user picked — a Docket label, a
|
|
34
|
+
* project, a chart series — where `intent` would be a lie.
|
|
35
|
+
* `getCategoricalIndex(key)` from `@charcuterie/tokens` is the
|
|
36
|
+
* stable fallback for a row nobody has chosen a colour for yet.
|
|
37
|
+
*
|
|
38
|
+
* Mutually exclusive with `intent` **in the type**: a badge is one
|
|
39
|
+
* colour, and passing both is a question with no answer rather
|
|
40
|
+
* than a precedence rule to remember.
|
|
41
|
+
*/
|
|
42
|
+
categorical?: CategoricalIndex
|
|
43
|
+
children: ReactNode
|
|
44
|
+
icon?: ReactNode
|
|
45
|
+
intent?: IntentName
|
|
46
|
+
/**
|
|
47
|
+
* What happens when the label is wider than the space it is given.
|
|
48
|
+
*
|
|
49
|
+
* - `truncate` — one line, capped at the container, ellipsis. The
|
|
50
|
+
* default, because a status pill that changes its row's height
|
|
51
|
+
* when a message gets longer breaks the table it sits in.
|
|
52
|
+
* - `wrap` — the pill grows taller and shows everything. For the
|
|
53
|
+
* kiosk and any touch context, where the hover readout that
|
|
54
|
+
* `truncate` relies on does not exist.
|
|
55
|
+
*/
|
|
56
|
+
overflow?: "truncate" | "wrap"
|
|
57
|
+
size?: BadgeSize
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const useBadgeShape = ({
|
|
61
|
+
appearance = "soft",
|
|
62
|
+
categorical,
|
|
63
|
+
children,
|
|
64
|
+
className,
|
|
65
|
+
icon,
|
|
66
|
+
intent = "neutral",
|
|
67
|
+
overflow = "truncate",
|
|
68
|
+
size = "md",
|
|
69
|
+
title,
|
|
70
|
+
}: BadgeShapeProps & {
|
|
71
|
+
className?: string
|
|
72
|
+
title?: string
|
|
73
|
+
}): {
|
|
74
|
+
className: string
|
|
75
|
+
content: ReactNode
|
|
76
|
+
title?: string
|
|
77
|
+
} => {
|
|
78
|
+
const [labelRef, clippedText] = useIsTextClipped()
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
className: toClassName(
|
|
82
|
+
"inline-flex shrink-0 items-center border font-medium",
|
|
83
|
+
// The cap. Without it every other rule here is decoration.
|
|
84
|
+
"max-w-full",
|
|
85
|
+
overflow === "wrap"
|
|
86
|
+
? // A stadium end-cap on a three-line box reads as a
|
|
87
|
+
// rendering fault rather than a badge, so the wrapping
|
|
88
|
+
// pill relaxes to a rounded rectangle.
|
|
89
|
+
"rounded-2xl"
|
|
90
|
+
: "rounded-full",
|
|
91
|
+
BADGE_SIZE_CLASS[size],
|
|
92
|
+
// A ternary rather than a merged map: the two are indexed
|
|
93
|
+
// by different keys, and `undefined` is the only honest
|
|
94
|
+
// discriminant once the type has already refused the case
|
|
95
|
+
// where both arrive.
|
|
96
|
+
categorical === undefined
|
|
97
|
+
? INTENT_APPEARANCE_CLASS[intent][appearance]
|
|
98
|
+
: CATEGORICAL_APPEARANCE_CLASS[categorical][
|
|
99
|
+
appearance
|
|
100
|
+
],
|
|
101
|
+
className,
|
|
102
|
+
),
|
|
103
|
+
content: (
|
|
104
|
+
<>
|
|
105
|
+
{icon ? (
|
|
106
|
+
<span
|
|
107
|
+
aria-hidden="true"
|
|
108
|
+
className="contents shrink-0"
|
|
109
|
+
>
|
|
110
|
+
{icon}
|
|
111
|
+
</span>
|
|
112
|
+
) : null}
|
|
113
|
+
|
|
114
|
+
{/*
|
|
115
|
+
* The truncation happens here rather than on the pill so the
|
|
116
|
+
* border and the rounded end-cap stay outside the clip — an
|
|
117
|
+
* `overflow: hidden` on the pill itself squares off the end
|
|
118
|
+
* the ellipsis is nearest to.
|
|
119
|
+
*
|
|
120
|
+
* `min-w-0` because a flex item's automatic minimum size is
|
|
121
|
+
* its content, which would win against `max-w-full` on the
|
|
122
|
+
* parent and put the overflow back.
|
|
123
|
+
*/}
|
|
124
|
+
<span
|
|
125
|
+
className={
|
|
126
|
+
overflow === "wrap"
|
|
127
|
+
? "min-w-0"
|
|
128
|
+
: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap"
|
|
129
|
+
}
|
|
130
|
+
ref={labelRef}
|
|
131
|
+
>
|
|
132
|
+
{children}
|
|
133
|
+
</span>
|
|
134
|
+
</>
|
|
135
|
+
),
|
|
136
|
+
// Only when something is actually hidden. A tooltip on every
|
|
137
|
+
// short pill in a bay list is noise, and a `title` that
|
|
138
|
+
// duplicates fully-visible text is a screen-reader duplicate
|
|
139
|
+
// for no gain.
|
|
140
|
+
title: title ?? clippedText,
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Canvas, Controls, Meta } from "@storybook/addon-docs/blocks";
|
|
2
|
+
|
|
3
|
+
import * as BadgeButtonStories from "./BadgeButton.stories";
|
|
4
|
+
|
|
5
|
+
<Meta of={BadgeButtonStories} />
|
|
6
|
+
|
|
7
|
+
# BadgeButton
|
|
8
|
+
|
|
9
|
+
**A badge you can press.** It takes `Badge`'s visual props and paints identically to it —
|
|
10
|
+
and it is a real `<button>`.
|
|
11
|
+
|
|
12
|
+
QueuePilot is where this came from. Its poster tiles carry per-entry settings as *tags*: a
|
|
13
|
+
default entry says nothing, and every tag you do see is a deviation worth reading. Each one
|
|
14
|
+
opens the panel that changes it, so each one is pressable — and all six were spelled
|
|
15
|
+
`<button className="badge tagbtn …">`, a hand-painted pill in app CSS, because the library
|
|
16
|
+
had no way to make `Badge` pressable. The same shape turns up on a start-point chip, a
|
|
17
|
+
group chip and a pool's Exclude chip.
|
|
18
|
+
|
|
19
|
+
<Canvas of={BadgeButtonStories.Default} />
|
|
20
|
+
|
|
21
|
+
## Props
|
|
22
|
+
|
|
23
|
+
<Controls />
|
|
24
|
+
|
|
25
|
+
## It is the same pill, not a copy of it
|
|
26
|
+
|
|
27
|
+
`Badge` and `BadgeButton` both build their pill through `useBadgeShape`, so the class list,
|
|
28
|
+
the icon slot, the truncation and the only-when-clipped `title` are read once rather than
|
|
29
|
+
duplicated. `BadgeButton.test.tsx` then compares the two elements' **computed** styles in
|
|
30
|
+
the real browser, which is the version of that claim a refactor cannot quietly break.
|
|
31
|
+
|
|
32
|
+
<Canvas of={BadgeButtonStories.BesideABadge} />
|
|
33
|
+
|
|
34
|
+
<Canvas of={BadgeButtonStories.AllVariants} />
|
|
35
|
+
|
|
36
|
+
## What the element buys, and none of it is paint
|
|
37
|
+
|
|
38
|
+
Focus, the tab order, Enter **and** Space, `:disabled`, form participation, and a `button`
|
|
39
|
+
role a screen reader announces as pressable. A `<span onClick>` has none of them, and
|
|
40
|
+
`getByRole("button", { name })` — what every test and every agent driving the app matches
|
|
41
|
+
on — finds nothing at all.
|
|
42
|
+
|
|
43
|
+
<Canvas of={BadgeButtonStories.AllStates} />
|
|
44
|
+
|
|
45
|
+
## Why not `asChild`, and why not `Badge` growing an `onClick`
|
|
46
|
+
|
|
47
|
+
This library has no polymorphism pattern and has not needed one. Adding `asChild` here would
|
|
48
|
+
make every future component answer "can it be something else?" instead of "what is it?",
|
|
49
|
+
and the precedent already exists in the other direction: `ButtonLink` is a sibling of
|
|
50
|
+
`Button` for exactly this reason.
|
|
51
|
+
|
|
52
|
+
An element type that changes as a **side effect** of passing a handler is worse. Forget the
|
|
53
|
+
handler and the control silently ships as a `<span>` — not focusable, not in the tab order,
|
|
54
|
+
invisible to `getByRole`, with no error anywhere. `onClick` is required here instead, so a
|
|
55
|
+
pill nobody can press is a `Badge` by construction.
|
|
56
|
+
|
|
57
|
+
## Two defaults worth knowing
|
|
58
|
+
|
|
59
|
+
**`type="button"`.** These chips sit inside forms — QueuePilot's entry sheet is one — and
|
|
60
|
+
the platform's default of `submit` would make a "change the start point" chip save the whole
|
|
61
|
+
dialog. It is overridable, because a badge-shaped submit is a real thing.
|
|
62
|
+
|
|
63
|
+
**`ghost` is excluded**, inherited from `Badge`: a pill that paints nothing until hovered
|
|
64
|
+
has no pill left, and a control that only advertises itself on hover cannot be found by
|
|
65
|
+
touch.
|
|
66
|
+
|
|
67
|
+
<Canvas of={BadgeButtonStories.InATileFooter} />
|