Skip to content

Commit e218a45

Browse files
Merge pull request #152 from linked-planet/dev
fixed linter warnings, button has new discovery style, fixed calendar…
2 parents 87ed53a + 9d8152e commit e218a45

20 files changed

+718
-565
lines changed

biome.json

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/1.7.0/schema.json",
2+
"$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
33
"formatter": {
44
"enabled": true,
55
"formatWithErrors": true,
@@ -9,7 +9,7 @@
99
"lineWidth": 80,
1010
"attributePosition": "auto"
1111
},
12-
"organizeImports": { "enabled": true },
12+
"assist": { "actions": { "source": { "organizeImports": "on" } } },
1313
"css": {
1414
"formatter": {
1515
"enabled": true
@@ -24,19 +24,32 @@
2424
},
2525
"correctness": {
2626
"noUnusedImports": "warn"
27+
},
28+
"style": {
29+
"noParameterAssign": "error",
30+
"useAsConstAssertion": "error",
31+
"useDefaultParameterLast": "error",
32+
"useEnumInitializers": "error",
33+
"useSelfClosingElements": "error",
34+
"useSingleVarDeclarator": "error",
35+
"noUnusedTemplateLiteral": "error",
36+
"useNumberNamespace": "error",
37+
"noInferrableTypes": "error",
38+
"noUselessElse": "error"
2739
}
2840
},
29-
"ignore": [
30-
"node_modules",
31-
"dist",
32-
"build",
33-
"coverage",
34-
"public",
35-
"out",
36-
"tmp",
37-
"temp",
38-
"vendor",
39-
"generated"
41+
"includes": [
42+
"**",
43+
"!**/node_modules",
44+
"!**/dist",
45+
"!**/build",
46+
"!**/coverage",
47+
"!**/public",
48+
"!**/out",
49+
"!**/tmp",
50+
"!**/temp",
51+
"!**/vendor",
52+
"!**/generated"
4053
]
4154
},
4255
"javascript": {

library/src/components/Blanket.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ export function Blanket({
2323
className,
2424
)}
2525
role={role ?? "presentation"}
26-
aria-label={ariaLabel ?? "blanket"}
2726
{...props}
2827
>
29-
{/* biome-ignore lint/a11y/useKeyWithClickEvents: <explanation> */}
28+
{/** biome-ignore lint/a11y/noStaticElementInteractions: <explanation> */}
29+
{/** biome-ignore lint/a11y/useKeyWithClickEvents: <explanation> */}
3030
<div
3131
onClick={(e) => {
3232
// this is necessary for the click to propagate to the blanket anywhere inside the children

library/src/components/Breadcrumbs.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,23 @@ function Ellipsis({
9898
}) {
9999
return (
100100
<span className="flex gap-1 pl-0 pr-1">
101-
<span
101+
<button
102+
type="button"
102103
onClick={onClick}
103104
onKeyUp={(e) => {
104105
if (e.key === "Enter") {
105106
onClick?.()
106107
}
107108
}}
108109
title={ellipsisLabel}
109-
aria-label={ellipsisLabel}
110110
className={twMerge(
111-
"cursor-pointer pr-1 hover:underline",
111+
"cursor-pointer pr-1 hover:underline appearance-none",
112112
className,
113113
)}
114114
style={style}
115115
>
116116
...
117-
</span>
117+
</button>
118118
/
119119
</span>
120120
)

library/src/components/Button.tsx

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@ export type ButtonAppearance =
2020
| "danger"
2121
| "success"
2222
| "information"
23+
| "discovery"
2324

2425
type ButtonVariantProps = VariantProps<typeof buttonVariants>
2526
const buttonVariants = cva(
26-
"focus-visible:outline-selected-bold relative box-border flex shrink-0 cursor-pointer items-center justify-center gap-1 rounded-sm border-2 border-transparent px-2 py-1 outline-none outline-2 outline-offset-4 focus-visible:outline-solid",
27+
"focus-visible:outline-selected-bold relative box-border flex transition-colors duration-200 shrink-0 cursor-pointer items-center justify-center gap-1 rounded-sm border-2 border-transparent px-2 py-1 outline-none outline-2 outline-offset-4 focus-visible:outline-solid",
2728
{
2829
variants: {
2930
appearance: {
3031
// those entries are undefined, they just establish the variant for the compoundVariants
31-
default: undefined,
32+
default:
33+
"bg-neutral hover:bg-neutral-hovered active:bg-neutral-pressed text-text",
3234
primary: undefined,
3335

3436
subtle: undefined,
@@ -41,12 +43,13 @@ const buttonVariants = cva(
4143
success: undefined,
4244

4345
information: undefined,
46+
discovery: undefined,
4447
},
4548
disabled: {
4649
true: "disabled:bg-disabled disabled:text-disabled-text disabled:cursor-not-allowed",
4750
},
4851
selected: {
49-
true: "bg-selected active:bg-selected hover:bg-selected text-selected-text-inverse cursor-pointer",
52+
true: "bg-selected hover:bg-selected-bold active:bg-selected-pressed text-selected-text-inverse hover:text-selected-text active:text-selected-text-inverse cursor-pointer",
5053
},
5154
inverted: {
5255
true: undefined,
@@ -61,13 +64,21 @@ const buttonVariants = cva(
6164
disabled: true,
6265
className: "disabled:border-border disabled:bg-transparent",
6366
},
64-
{
67+
/*{
6568
inverted: false,
6669
appearance: "default",
6770
disabled: false,
6871
className:
6972
"bg-neutral hover:bg-neutral-hovered active:bg-neutral-pressed text-text",
70-
},
73+
},*/
74+
/*{
75+
inverted: false,
76+
appearance: "default",
77+
disabled: false,
78+
selected: true,
79+
className:
80+
"bg-selected active:bg-selected hover:bg-selected text-selected-text-inverse cursor-pointer",
81+
},*/
7182
{
7283
inverted: false,
7384
appearance: "primary",
@@ -124,6 +135,13 @@ const buttonVariants = cva(
124135
className:
125136
"bg-information-bold hover:bg-information-bold-hovered active:bg-information-bold-pressed text-text-inverse",
126137
},
138+
{
139+
inverted: false,
140+
appearance: "discovery",
141+
disabled: false,
142+
className:
143+
"bg-discovery-bold hover:bg-discovery-bold-hovered active:bg-discovery-bold-pressed text-text-inverse",
144+
},
127145
{
128146
inverted: true,
129147
appearance: "default",
@@ -170,6 +188,14 @@ const buttonVariants = cva(
170188
"border-information-bold text-information-text border-solid",
171189
),
172190
},
191+
{
192+
inverted: true,
193+
appearance: "discovery",
194+
className: cx(
195+
"bg-discovery hover:bg-discovery-hovered active:bg-discovery-pressed",
196+
"border-discovery-bold text-discovery-text border-solid",
197+
),
198+
},
173199
],
174200
defaultVariants: {
175201
appearance: "default",
@@ -317,6 +343,7 @@ const loadingSpinnerClassNames = cva(null, {
317343
danger: "border-t-text-inverse border-2",
318344
success: "border-t-text-inverse border-2",
319345
information: "border-t-text-inverse border-2",
346+
discovery: "border-t-text-inverse border-2",
320347
},
321348
loading: {
322349
false: "opacity-0",

library/src/components/Calendar.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,11 @@ type CalendarBaseRangeProps = PropsBase &
8989
secondarySelected?: DateRange
9090
}
9191

92-
const buttonStyles =
93-
"focus-visible:ring-0 focus-visible:outline-selected-bold focus-visible:outline-2 focus-visible:outline-offset-2 border-none cursor-pointer disabled:cursor-not-allowed hover:bg-surface-hovered p-1 rounded-xs z-10 inline-flex place-content-center-safe disabled:text-text-disabled disabled:hover:bg-transparent"
92+
const buttonStyles = twJoin(
93+
"border-none cursor-pointer p-1 rounded-xs z-10 inline-flex place-content-center-safe",
94+
"hover:bg-surface-hovered hover:text-text disabled:hover:bg-transparent disabled:hover:text-text-disabled disabled:cursor-not-allowed disabled:text-text-disabled",
95+
"focus-visible:ring-0 focus-visible:outline-selected-bold focus-visible:outline-2 focus-visible:outline-offset-2",
96+
)
9497
const captionStyles =
9598
"flex justify-center items-center w-full pb-2 relative top-2"
9699
const captionLabelStyles = "text-text text-sm font-bold flex justify-center"
@@ -309,10 +312,11 @@ export function CalendarBase(
309312
modifiersClassNames={{
310313
hidden: "bg-neutral hover:bg-neutral-hovered active:bg-neutral-hovered text-text",
311314
disabled:
312-
"text-disabled-text cursor-not-allowed hover:bg-transparent bg-surface",
315+
"text-disabled-text cursor-not-allowed hover:bg-transparent bg-surface disabled:text-text-disabled disabled:hover:bg-transparent disabled:cursor-not-allowed",
313316
secondarySelected:
314-
"bg-surface-overlay-hovered data-[disabled=true]:bg-surface",
315-
selected: "bg-selected text-selected-text-inverse font-bold",
317+
"bg-surface-overlay-hovered data-[disabled=true]:bg-surface text-text after:border-text",
318+
selected:
319+
"bg-selected text-selected-text-inverse hover:text-selected-text font-bold after:border-selected-text-inverse hover:after:border-selected-text",
316320
}}
317321
disabled={disabled || disabledDates}
318322
onDayClick={!disabled && onDayClick ? onDayClick : undefined}
@@ -672,7 +676,7 @@ export function Calendar<FormData extends FieldValues>(
672676
)
673677

674678
const _month = useMemo(() => {
675-
let ret = undefined
679+
let ret
676680
if (month) {
677681
ret = dayjs()
678682
.month(month - 1)

library/src/components/Checkbox.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,6 @@ const CheckboxI = (
194194
<label
195195
htmlFor={id}
196196
aria-disabled={disabled}
197-
aria-required={required}
198197
aria-invalid={invalid}
199198
className={twMerge(labelStyles, labelClassName)}
200199
style={labelStyle}

library/src/components/Flag.tsx

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -152,24 +152,17 @@ export function FlagIcon({
152152
}
153153
case "warning": {
154154
return (
155-
<p aria-label="Warning" className={iconStyle}>
155+
<p className={iconStyle}>
156156
<span className="absolute -left-0.5 top-0.5">!</span>
157157
</p>
158158
)
159159
}
160160
case "information": {
161-
return (
162-
<span aria-label="Info" className={iconStyle}>
163-
i
164-
</span>
165-
)
161+
return <span className={iconStyle}>i</span>
166162
}
167163
case "error": {
168164
return (
169-
<div
170-
aria-label="Error"
171-
className="relative size-4 flex items-center justify-center z-0"
172-
>
165+
<div className="relative size-4 flex items-center justify-center z-0">
173166
<span className={iconStyle} />
174167
<span className="font-extrabold text-text-inverse z-1">
175168
!
@@ -178,11 +171,7 @@ export function FlagIcon({
178171
)
179172
}
180173
case "discovery": {
181-
return (
182-
<span aria-label="Discovery" className={iconStyle}>
183-
?
184-
</span>
185-
)
174+
return <span className={iconStyle}>?</span>
186175
}
187176
default:
188177
assertUnreachable(appearance)
@@ -240,7 +229,7 @@ export function Flag({
240229
{actions?.map((action, i) => (
241230
<>
242231
<a
243-
key={`action${i}`}
232+
key={`action${action.href}`}
244233
className={`inline-block cursor-pointer text-sm ${type !== "bold" ? "text-link" : "text-blue-200"}`}
245234
onClick={action.onClick}
246235
href={action.href}
@@ -249,7 +238,7 @@ export function Flag({
249238
{action.content}
250239
</a>
251240
<span
252-
key={`actionspacer${i}`}
241+
key={`actionspacer${action.href}`}
253242
className={`${type === "inverted" ? "bg-text-subtlest" : "bg-blue-300"} mx-1.5 inline-block h-0.5 w-0.5 rounded-full align-middle last:hidden`}
254243
/>
255244
</>

library/src/components/HighlightedText.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useMemo } from "react"
1+
import { useMemo, useId } from "react"
22
import { twMerge } from "tailwind-merge"
33
export function HighlightedText({
44
text,
@@ -17,6 +17,7 @@ export function HighlightedText({
1717
containerElement?: React.ElementType
1818
caseSensitive?: boolean
1919
}) {
20+
const id = useId()
2021
const parts = useMemo(() => {
2122
const highlights = Array.isArray(highlightedText)
2223
? highlightedText.map((it) => it.trim()).filter(Boolean)
@@ -31,7 +32,7 @@ export function HighlightedText({
3132
if (delimiterRegex.test(it)) {
3233
acc.push(
3334
<span
34-
key={i}
35+
key={`highlight-${id}-${i}`}
3536
className={twMerge(
3637
"bg-selected-bold text-text-inverse p-0 m-0",
3738
highlightClassName,
@@ -45,7 +46,7 @@ export function HighlightedText({
4546
acc.push(it)
4647
return acc
4748
}, [] as React.ReactNode[])
48-
}, [text, highlightClassName, highlightedText, caseSensitive])
49+
}, [text, highlightClassName, highlightedText, caseSensitive, id])
4950

5051
const ContainerElement = containerElement || "p"
5152

library/src/components/Modal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ function Container({
8787
<RDialog.Overlay
8888
className={blanketStyles}
8989
role="presentation"
90-
id="blanket"
90+
id={`blanket-${id}`}
9191
/>
9292
) : (
9393
<div className={blanketStyles} />

library/src/components/Popover.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ function Root({
233233
export type AnchorProps = RPo.PopoverAnchorProps
234234
const Anchor = RPo.Anchor
235235

236-
type CloseProps = RPo.PopoverCloseProps
237236
const Close = RPo.Close
238237

239238
export const Popover = {

library/src/components/SectionMessage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ export const SectionMessage = forwardRef(
8585
)}
8686
{children}
8787
<div>
88-
{actions?.map((action, i) => (
88+
{actions?.map((action) => (
8989
<>
9090
<a
91-
key={`action${i}`}
91+
key={`action${action.href}`}
9292
className="inline-block cursor-pointer text-sm"
9393
onClick={action.onClick}
9494
href={action.href}
@@ -97,7 +97,7 @@ export const SectionMessage = forwardRef(
9797
{action.content}
9898
</a>
9999
<span
100-
key={`actionspacer${i}`}
100+
key={`actionspacer${action.href}`}
101101
className="bg-text-subtlest mx-1.5 inline-block h-0.5 w-0.5 rounded-full align-middle last:hidden"
102102
/>
103103
</>

library/src/components/SlideOpen.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ export function SlideOpen({
3636
style={containerStyle}
3737
data-open={open}
3838
ref={ref}
39-
aria-label={ariaLabel}
40-
aria-expanded={ariaExpanded ?? open}
4139
tabIndex={tabIndex}
4240
{...props}
4341
>

0 commit comments

Comments
 (0)