From ad643889d48d1c348e7842f004ae032d2d1cc7e6 Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Mon, 29 Apr 2024 14:33:04 -0400 Subject: [PATCH 01/21] Add new props to `FormControl.Label` --- .../FormControl/FormControl.features.stories.tsx | 15 +++++++++++++++ .../react/src/FormControl/_FormControlLabel.tsx | 8 +++++++- .../react/src/internal/components/InputLabel.tsx | 6 +++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/react/src/FormControl/FormControl.features.stories.tsx b/packages/react/src/FormControl/FormControl.features.stories.tsx index 07bb3fecb8d..0ee1dce71ef 100644 --- a/packages/react/src/FormControl/FormControl.features.stories.tsx +++ b/packages/react/src/FormControl/FormControl.features.stories.tsx @@ -306,3 +306,18 @@ export const DisabledInputs = () => ( ) + +export const CustomRequired = () => ( + + + Form Input Label + This is form field with a custom required indicator + + + + Form Input Label + This is form field without a required indicator + + + +) diff --git a/packages/react/src/FormControl/_FormControlLabel.tsx b/packages/react/src/FormControl/_FormControlLabel.tsx index 62c346d8ff8..e38dc573a36 100644 --- a/packages/react/src/FormControl/_FormControlLabel.tsx +++ b/packages/react/src/FormControl/_FormControlLabel.tsx @@ -8,12 +8,14 @@ export type Props = { * Whether the label should be visually hidden */ visuallyHidden?: boolean + requiredText?: string + requiredIndicator?: boolean id?: string } & SxProp const FormControlLabel: React.FC< React.PropsWithChildren<{htmlFor?: string} & React.ComponentProps & Props> -> = ({as, children, htmlFor, id, visuallyHidden, sx, ...props}) => { +> = ({as, children, htmlFor, id, visuallyHidden, requiredIndicator = true, requiredText = '*', sx, ...props}) => { const {disabled, id: formControlId, required} = useFormControlContext() /** @@ -26,6 +28,8 @@ const FormControlLabel: React.FC< id, visuallyHidden, required, + requiredText, + requiredIndicator, disabled, sx, ...props, @@ -36,6 +40,8 @@ const FormControlLabel: React.FC< visuallyHidden, htmlFor: htmlFor || formControlId, required, + requiredText, + requiredIndicator, disabled, sx, ...props, diff --git a/packages/react/src/internal/components/InputLabel.tsx b/packages/react/src/internal/components/InputLabel.tsx index 68ac9e129c6..258437a0ba7 100644 --- a/packages/react/src/internal/components/InputLabel.tsx +++ b/packages/react/src/internal/components/InputLabel.tsx @@ -6,6 +6,8 @@ import VisuallyHidden from '../../_VisuallyHidden' type BaseProps = SxProp & { disabled?: boolean required?: boolean + requiredText?: string + requiredIndicator?: boolean visuallyHidden?: boolean id?: string } @@ -28,6 +30,8 @@ const InputLabel: React.FC> = ({ htmlFor, id, required, + requiredText, + requiredIndicator, visuallyHidden, sx, as = 'label', @@ -55,7 +59,7 @@ const InputLabel: React.FC> = ({ {required ? ( {children} - * + {requiredIndicator && {requiredText}} ) : ( children From 3ab4b1e4ae70f2efe4dccd3a9275fdf0f232275e Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Mon, 29 Apr 2024 16:59:55 -0400 Subject: [PATCH 02/21] Add conditional --- packages/react/src/internal/components/InputLabel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/internal/components/InputLabel.tsx b/packages/react/src/internal/components/InputLabel.tsx index 258437a0ba7..6a07b835a7d 100644 --- a/packages/react/src/internal/components/InputLabel.tsx +++ b/packages/react/src/internal/components/InputLabel.tsx @@ -59,7 +59,7 @@ const InputLabel: React.FC> = ({ {required ? ( {children} - {requiredIndicator && {requiredText}} + {requiredText && {requiredText}} ) : ( children From 413ac1e3465765a0afb114f369d46cbf21ff78df Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Tue, 30 Apr 2024 10:38:11 -0400 Subject: [PATCH 03/21] Add changeset --- .changeset/stupid-suns-cheat.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/stupid-suns-cheat.md diff --git a/.changeset/stupid-suns-cheat.md b/.changeset/stupid-suns-cheat.md new file mode 100644 index 00000000000..3f936571554 --- /dev/null +++ b/.changeset/stupid-suns-cheat.md @@ -0,0 +1,5 @@ +--- +'@primer/react': patch +--- + +FormControl: Adds new props to `FormControl.Label`, `requiredText` and `requiredIndicator` From add9be358b2062a7da22e570994e3970705edf49 Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Wed, 1 May 2024 09:24:31 -0400 Subject: [PATCH 04/21] Update docs json --- packages/react/src/FormControl/FormControl.docs.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/react/src/FormControl/FormControl.docs.json b/packages/react/src/FormControl/FormControl.docs.json index a4c737b98b6..e4cfaef4c28 100644 --- a/packages/react/src/FormControl/FormControl.docs.json +++ b/packages/react/src/FormControl/FormControl.docs.json @@ -56,6 +56,18 @@ "defaultValue": "'label'", "description": "The label element can be changed to a 'legend' when it's being used to label a fieldset, or a 'span' when it's being used to label an element that is not a form input. For example: when using a FormControl to render a labeled SegementedControl, the label should be a 'span'" }, + { + "name": "requiredText", + "type": "string", + "defaultValue": "*", + "description": "The text to display when the field is required" + }, + { + "name": "requiredIndicator", + "type": "boolean", + "defaultValue": "true", + "description": "Whether to show or hide the required text in the accessibility tree, but still visually show the required text." + }, { "name": "sx", "type": "SystemStyleObject" From fc84578605bb11e795b0107e7a443ee3dd9685ea Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Wed, 1 May 2024 09:37:00 -0400 Subject: [PATCH 05/21] Add more examples --- packages/react/src/FormControl/FormControl.docs.json | 2 +- .../src/FormControl/FormControl.features.stories.tsx | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/react/src/FormControl/FormControl.docs.json b/packages/react/src/FormControl/FormControl.docs.json index e4cfaef4c28..ee9745bf7dc 100644 --- a/packages/react/src/FormControl/FormControl.docs.json +++ b/packages/react/src/FormControl/FormControl.docs.json @@ -59,7 +59,7 @@ { "name": "requiredText", "type": "string", - "defaultValue": "*", + "defaultValue": "'*'", "description": "The text to display when the field is required" }, { diff --git a/packages/react/src/FormControl/FormControl.features.stories.tsx b/packages/react/src/FormControl/FormControl.features.stories.tsx index 0ee1dce71ef..750f25d3c74 100644 --- a/packages/react/src/FormControl/FormControl.features.stories.tsx +++ b/packages/react/src/FormControl/FormControl.features.stories.tsx @@ -316,6 +316,15 @@ export const CustomRequired = () => ( Form Input Label + + This is form field with a required indicator that is hidden in the accessibility tree + + + + + + Form Input Label + This is form field without a required indicator From 78d70332f0981a7df8267d468be3d34c24dec996 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 May 2024 14:40:37 -0500 Subject: [PATCH 06/21] chore(deps-dev): bump ejs from 3.1.9 to 3.1.10 (#4549) Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10. - [Release notes](https://github.com/mde/ejs/releases) - [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10) --- updated-dependencies: - dependency-name: ejs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66fe23780f3..1bff63ded85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -534,7 +534,7 @@ "version": "0.0.0", "dependencies": { "@primer/octicons-react": "^18.2.0", - "@primer/react": "36.16.0", + "@primer/react": "36.17.0", "next": "^14.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -26950,9 +26950,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -62135,7 +62135,7 @@ }, "packages/react": { "name": "@primer/react", - "version": "36.16.0", + "version": "36.17.0", "license": "MIT", "dependencies": { "@github/combobox-nav": "^2.1.5", From 5ee837cb6f4719d22798fc93bb6a2f2e4ba48b88 Mon Sep 17 00:00:00 2001 From: Lukas Oppermann Date: Fri, 3 May 2024 22:08:38 +0200 Subject: [PATCH 07/21] BranchName: Add style for span and add v8 tokens (#4556) * add style for branchName as span adn add v8 tokens * added changeset * Update thin-ligers-turn.md * test(vrt): update snapshots * use not a instead of matching for span --------- Co-authored-by: Siddharth Kshetrapal Co-authored-by: lukasoppermann --- .changeset/thin-ligers-turn.md | 5 +++++ ...me-Default-dark-colorblind-focus-linux.png | Bin 7088 -> 9044 bytes ...anchName-Default-dark-colorblind-linux.png | Bin 6359 -> 8332 bytes ...chName-Default-dark-dimmed-focus-linux.png | Bin 7098 -> 8980 bytes .../BranchName-Default-dark-dimmed-linux.png | Bin 6342 -> 8218 bytes .../BranchName-Default-dark-focus-linux.png | Bin 7088 -> 9044 bytes ...Default-dark-high-contrast-focus-linux.png | Bin 7098 -> 9127 bytes ...hName-Default-dark-high-contrast-linux.png | Bin 6391 -> 8438 bytes .../BranchName-Default-dark-linux.png | Bin 6359 -> 8332 bytes ...me-Default-dark-tritanopia-focus-linux.png | Bin 7088 -> 9044 bytes ...anchName-Default-dark-tritanopia-linux.png | Bin 6359 -> 8332 bytes ...e-Default-light-colorblind-focus-linux.png | Bin 6721 -> 8754 bytes ...nchName-Default-light-colorblind-linux.png | Bin 6289 -> 8257 bytes .../BranchName-Default-light-focus-linux.png | Bin 6721 -> 8754 bytes ...efault-light-high-contrast-focus-linux.png | Bin 6748 -> 8838 bytes ...Name-Default-light-high-contrast-linux.png | Bin 6331 -> 8358 bytes .../BranchName-Default-light-linux.png | Bin 6289 -> 8257 bytes ...e-Default-light-tritanopia-focus-linux.png | Bin 6721 -> 8754 bytes ...nchName-Default-light-tritanopia-linux.png | Bin 6289 -> 8257 bytes .../src/BranchName/BranchName.stories.tsx | 8 +++++++- packages/react/src/BranchName/BranchName.tsx | 14 ++++++++------ 21 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 .changeset/thin-ligers-turn.md diff --git a/.changeset/thin-ligers-turn.md b/.changeset/thin-ligers-turn.md new file mode 100644 index 00000000000..75d28e96077 --- /dev/null +++ b/.changeset/thin-ligers-turn.md @@ -0,0 +1,5 @@ +--- +'@primer/react': patch +--- + +BranchName: Fixing text color when rendered as span diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-colorblind-focus-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-colorblind-focus-linux.png index 8811cb8ad314b53f7fb5e0308b1c436396dd822c..1f43f565228b3703dab3b46c7373843c37b6a603 100644 GIT binary patch literal 9044 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 literal 7088 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 K&)IwGtN#JvOlX|| literal 6359 zcmeI0dr(tX9>-&47wNRn(GH+IqN|mTB50#fAP;SE&}|oX>$a;#h{Bo(A&C$mguHx= zLoEYsv;`xOXq}p|1Xvp(Mj(N;fHp71^2mdP6ih%u0tw`u+`a5>XJ`NI=zsa+o-=cP zzjM#;_dWCboOAExKj-GW`TC~UArQ!$hYw|c0)ebu1|P_}--9DxY)>YD-5T;IIUhhe zl<{*ANG$ts_JO}vw=7Je1*a+b{YwUaoeW#`__kHs&^L@zP;t!*nK-94sO{I5fxTHv|m$R%r1F4BD?pb>Nf0I z295;%V&SWi+%jc_36J9OVQO6a3L4Lq-~z7Wb&Qx3y_>*@HlJSjI120`bYB<(?7|{y zz;@kwFm%XU+h*5*9*3T+g+TUybt4=CIk)-1s`G&hiC}x-H%=f}W|Yx!J-EAfGwQnX zg-6kb$N8uZL8Df9T%X?7UL@3H*4!QjSDs3~2Rk4=+T5jZ;0Q(JoGMqf=qQ>usNr(z z5kg&NnyiST5H#XylEG+{f5`e_hDmTS_pq)D2&GDmHGr#mW7Y5;KYqEcep1*i!6#vj zrv&Y`>w`m97-Dr_aO{MLnq1WQMliPxt==oXu3BJIkZiCosk?xYBgh|fGqfg8H~gQK zp!d|0`Rj|!Kb=8tKY;`1=2mESmI1$(Kom7TH zXPOc$4 z_^I$HhL>;7hu5trJoZ`xayV)d34@vQgWrm0!u9ZZnvyr|(jn6W0g{r9mb&}lW{ihH zo}!|Vai9$yoC}bB(!le>DkHnWb4XYa{E4D;KK)SW8ZoO9#_4}|A_Bh?&incD7?fKG zs+rmBIylPZaU$T@LJ-6{$1p` zs6IlPvhO4o+o1P+qb5&nBpWGGqGXYeLh%CaO^O6CT`V@`{)=#&?HyI?yx#S|qYG!& zaF;F6Rx;0S;c$-aY7zq9H_2HnJH_lp(VoR;xNT&k1Cs?NZ0S4GQ9YVv9%^F|Is$!v zQ!em4ZDRYUHtuMI!y=yj-s2BvmJr=_BIS3fjQQj-RmNNfd}I%_c$7l0uAsUycm(UX z+@t~}ndfja{G)iYq=&>|G$8@){Rdzc@PbySb^z_td!|%5Htvdo;R1@v0EUA`>IrVq z3P{}aJepdIb)Cm4OQ`fJ%vrUrY|?;O^f(!{iT>xKWAa~u(vM0lYLqs|S~GQPP=KXc zxFoK5_98D;B*I3|{~BbaSa*F?fbG(Ghq`5)u0eqfNs6u;gqzKYC+yPhySOwbeCaO= z5GDQ7+TtkhN4kIi#FU_WSadv9HQcEBig0dCj~U5;|IWmAzuy^W6FUaZ8d{(xkba8 zvmnn7#!Ea8t`dcK+f~!Vc#sT=jEG?kx6qynv5fJ@hKEd7J&&6N_o#)wei-z9=Qo{9 zRdJo?2&Zy>F~P-(0jQlE4rc}7GuxrQm171S?aHoIJnc2y#K^tzJ@Y1yGClaXwA9)P zc!yocnaF^sTqdQTNns6UnfyC3@LHlrr}N)IUE@pKF(y4a@c|sjM!T2IYU zYOwad3vYS8v=ycuRxZbaFK#(lHG^1|6}jXkm0tZyu)6#BE*#Z>_!Y!ij=epj&QhqP z^8fkI&POG-|BwGactLf~kxu16^Q4;09s5_c-t&*GA6Zw2hZ}Fatb^#)A9bM>Udat2 zBx^|45ClNr{?;pasDMHR6e^%l0lnfc{SanCmKc&p={94j;_T?)c#3g?|C9qRNs0 diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-dimmed-focus-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-dimmed-focus-linux.png index 0a96ed5f783fe92f2671b15abda1b4750e08d441..84d26e997ccba471b040700473dd65590b201447 100644 GIT binary patch literal 8980 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 TS7bo2K!}sUCz_7^c;(*!gldHG literal 7098 zcmeHL`BRg38c%C69#wiu2NAlpD>@RXr4hsFRgkqBXb6D-i3$QH0#XcMLP*hBSnUG4 zb*2pA2#6xQ2|*f?NH7VCf~`$BLnLVkazzqDfRKY6WM4Zw(?4Km_NV;t&NK5pKJRmX zp7*^GdnS6@7Vj+(2xME#$rIl~ARAV}2eN4+xN>t(KsG4e%KtX{7=$hLS%5%xUWqwz zG`^@#ucEP3Bh1@pXCL;-}1%ljJgA9dr>hNOPCW1+}_A1e$G54Zm-3>9${~eP2Wx^q9YIVMgY_>Zaa?>P&ZIZV^t!{U5$)JEtJ=^?7Zun|7wIn zAm1Ok<_j*p{l9I*4isNXpV_}r+n!s3YER{~NQ)QfTAi-8O5!UoD=*iTLj3?}VOTt0 z-Fa8!y6(p#e-6I2@-G!|-J!2Ef(IN9XOh40vrTvE0GnbE@^iZ9e)9J5VPz|MvUR6j zlP{h58;wS5$BRYd?a3Ig)GKk>zZc=C+EGSZ6>a(!9D$h7E`yMVH#)FKT~C!cZ6=+R z*lk@~g;|E5U^yE~jU)^fU5`|JJ=R=aYePC_e)V@8ASnfl}lO`~{vrBHT(W(hVa zi zzupwFegnxXItFTiZ5PreZhG!oxLwW2FQC5OEgvVzQ!&ZBOKnlf6j%~Zu*1ywc9%*h z8;=O&&-?Keicp}rhfm%CYp;|x&_AKvF3|s;ghpd7k&&u3HNK;%NeFBB0E|}x9W^92 z+>?)<|8!qpJ~zR;N*zb=CM8V|4gWQ2Ld_r zgJj>U!9*dj5ej7jz^UKFdmGjppirnsI0%=&)g}^&6ao?vjV7%Ilt>4Kul4+R&F1}@ zLlbeAS(5zELj+z4vZhA7VD-rkKsHi9a0GgYLlVvZvNd>T00BCAz+JOY) z(c3xI>hf`JX5!KQ4Nj?$=|JU8O)aP%;9RR)YSbLwvl_jS}t76@N$|0{(u_#@pn z^0HMJ1t(?{&rTQ}kL{A01p-fa-!)n!rAogf=4SwONd`Q#g@IU%YE}rm(9OdMy2*mk zpaIn|7_u<?A=WopdTX{qz1LIdYo4?xHuOjnQBIRJ4hLFyA?RMoWwt^6kz9AK9V zJ9ojf+5rrwUgxkE5{u4Pc)IQY2vqp<@$qXHGUJmo2U)u9VK$XEH7~&wkeZ4{J2UI? z_wbixaX+l#GsoM8UwW(US+H>XH6Y{)=@Ah8P^=K_@Z~0fEMt}A#SabzD-?v4-o+5( zV~K2%+gf6lAZ4pBKIE`>+9thpU1}N<7UAUUrr3`ZCVjGQ7K4k2S{y5LYvL^Or3WPr zh9Bai8#^;p zWxFG&!Zf8PAQp=O;0#unH(5T7Q5v6Fz^ZqxJGlkU-T($j-&4UgnRn2#7>)BHss8>7 zMr5&8=E`nGu1kLidmjV~6Cy z`2jeCKn8>e4`(|=EKFdhBw_H*M*t9V-{KE1xojR7&YSIzX0-ZSoLvCG?w+TIEZmth z{av}3wHyy#?ZQ%AKY#2OGV(Rj=Wy&T6v`yBI`zQ6Da@_w%vgpMlV@L-#a8k^0KO zVm6Mq&JvgvM51wCVnlc$FMj1sTAQnuqcN#yORfr++r56=S1Jm9gF ztQBHXa2*tt4iE~3WD13to_?plzkmL}^Fa3R4?1x!n_O;^gIi4`;u3a_9|@eR|XrgfD&P4G+HK-f+9boeb_W zaCZiGPjs_^n;_kzfqN)&&x!5{+5K$*ahHL+4BTblE`$Ha|B^=61}uK_gPMcTb70Cr OV!l3ef_?1lwf_J-(GSA_ diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-dimmed-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-dimmed-linux.png index 9153b0967b3b676af080250cfcf98ecf2b3f5106..d794c3a9a12d27c5c2a869b6941300e02dc855a8 100644 GIT binary patch literal 8218 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 P0U?eBA8kDH%dh_g+tR*u literal 6342 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 literal 7088 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 literal 6391 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 KeTsdur2fC7BiTa$ diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-linux.png index 8ca43277629ba1d6e2b2311d7d566ea77964e506..0e4658786de38b94b0384f74dafbced4ec0e448d 100644 GIT binary patch literal 8332 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 K&)IwGtN#JvOlX|| literal 6359 zcmeI0dr(tX9>-&47wNRn(GH+IqN|mTB50#fAP;SE&}|oX>$a;#h{Bo(A&C$mguHx= zLoEYsv;`xOXq}p|1Xvp(Mj(N;fHp71^2mdP6ih%u0tw`u+`a5>XJ`NI=zsa+o-=cP zzjM#;_dWCboOAExKj-GW`TC~UArQ!$hYw|c0)ebu1|P_}--9DxY)>YD-5T;IIUhhe zl<{*ANG$ts_JO}vw=7Je1*a+b{YwUaoeW#`__kHs&^L@zP;t!*nK-94sO{I5fxTHv|m$R%r1F4BD?pb>Nf0I z295;%V&SWi+%jc_36J9OVQO6a3L4Lq-~z7Wb&Qx3y_>*@HlJSjI120`bYB<(?7|{y zz;@kwFm%XU+h*5*9*3T+g+TUybt4=CIk)-1s`G&hiC}x-H%=f}W|Yx!J-EAfGwQnX zg-6kb$N8uZL8Df9T%X?7UL@3H*4!QjSDs3~2Rk4=+T5jZ;0Q(JoGMqf=qQ>usNr(z z5kg&NnyiST5H#XylEG+{f5`e_hDmTS_pq)D2&GDmHGr#mW7Y5;KYqEcep1*i!6#vj zrv&Y`>w`m97-Dr_aO{MLnq1WQMliPxt==oXu3BJIkZiCosk?xYBgh|fGqfg8H~gQK zp!d|0`Rj|!Kb=8tKY;`1=2mESmI1$(Kom7TH zXPOc$4 z_^I$HhL>;7hu5trJoZ`xayV)d34@vQgWrm0!u9ZZnvyr|(jn6W0g{r9mb&}lW{ihH zo}!|Vai9$yoC}bB(!le>DkHnWb4XYa{E4D;KK)SW8ZoO9#_4}|A_Bh?&incD7?fKG zs+rmBIylPZaU$T@LJ-6{$1p` zs6IlPvhO4o+o1P+qb5&nBpWGGqGXYeLh%CaO^O6CT`V@`{)=#&?HyI?yx#S|qYG!& zaF;F6Rx;0S;c$-aY7zq9H_2HnJH_lp(VoR;xNT&k1Cs?NZ0S4GQ9YVv9%^F|Is$!v zQ!em4ZDRYUHtuMI!y=yj-s2BvmJr=_BIS3fjQQj-RmNNfd}I%_c$7l0uAsUycm(UX z+@t~}ndfja{G)iYq=&>|G$8@){Rdzc@PbySb^z_td!|%5Htvdo;R1@v0EUA`>IrVq z3P{}aJepdIb)Cm4OQ`fJ%vrUrY|?;O^f(!{iT>xKWAa~u(vM0lYLqs|S~GQPP=KXc zxFoK5_98D;B*I3|{~BbaSa*F?fbG(Ghq`5)u0eqfNs6u;gqzKYC+yPhySOwbeCaO= z5GDQ7+TtkhN4kIi#FU_WSadv9HQcEBig0dCj~U5;|IWmAzuy^W6FUaZ8d{(xkba8 zvmnn7#!Ea8t`dcK+f~!Vc#sT=jEG?kx6qynv5fJ@hKEd7J&&6N_o#)wei-z9=Qo{9 zRdJo?2&Zy>F~P-(0jQlE4rc}7GuxrQm171S?aHoIJnc2y#K^tzJ@Y1yGClaXwA9)P zc!yocnaF^sTqdQTNns6UnfyC3@LHlrr}N)IUE@pKF(y4a@c|sjM!T2IYU zYOwad3vYS8v=ycuRxZbaFK#(lHG^1|6}jXkm0tZyu)6#BE*#Z>_!Y!ij=epj&QhqP z^8fkI&POG-|BwGactLf~kxu16^Q4;09s5_c-t&*GA6Zw2hZ}Fatb^#)A9bM>Udat2 zBx^|45ClNr{?;pasDMHR6e^%l0lnfc{SanCmKc&p={94j;_T?)c#3g?|C9qRNs0 diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-tritanopia-focus-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-dark-tritanopia-focus-linux.png index 8811cb8ad314b53f7fb5e0308b1c436396dd822c..1f43f565228b3703dab3b46c7373843c37b6a603 100644 GIT binary patch literal 9044 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 literal 7088 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 K&)IwGtN#JvOlX|| literal 6359 zcmeI0dr(tX9>-&47wNRn(GH+IqN|mTB50#fAP;SE&}|oX>$a;#h{Bo(A&C$mguHx= zLoEYsv;`xOXq}p|1Xvp(Mj(N;fHp71^2mdP6ih%u0tw`u+`a5>XJ`NI=zsa+o-=cP zzjM#;_dWCboOAExKj-GW`TC~UArQ!$hYw|c0)ebu1|P_}--9DxY)>YD-5T;IIUhhe zl<{*ANG$ts_JO}vw=7Je1*a+b{YwUaoeW#`__kHs&^L@zP;t!*nK-94sO{I5fxTHv|m$R%r1F4BD?pb>Nf0I z295;%V&SWi+%jc_36J9OVQO6a3L4Lq-~z7Wb&Qx3y_>*@HlJSjI120`bYB<(?7|{y zz;@kwFm%XU+h*5*9*3T+g+TUybt4=CIk)-1s`G&hiC}x-H%=f}W|Yx!J-EAfGwQnX zg-6kb$N8uZL8Df9T%X?7UL@3H*4!QjSDs3~2Rk4=+T5jZ;0Q(JoGMqf=qQ>usNr(z z5kg&NnyiST5H#XylEG+{f5`e_hDmTS_pq)D2&GDmHGr#mW7Y5;KYqEcep1*i!6#vj zrv&Y`>w`m97-Dr_aO{MLnq1WQMliPxt==oXu3BJIkZiCosk?xYBgh|fGqfg8H~gQK zp!d|0`Rj|!Kb=8tKY;`1=2mESmI1$(Kom7TH zXPOc$4 z_^I$HhL>;7hu5trJoZ`xayV)d34@vQgWrm0!u9ZZnvyr|(jn6W0g{r9mb&}lW{ihH zo}!|Vai9$yoC}bB(!le>DkHnWb4XYa{E4D;KK)SW8ZoO9#_4}|A_Bh?&incD7?fKG zs+rmBIylPZaU$T@LJ-6{$1p` zs6IlPvhO4o+o1P+qb5&nBpWGGqGXYeLh%CaO^O6CT`V@`{)=#&?HyI?yx#S|qYG!& zaF;F6Rx;0S;c$-aY7zq9H_2HnJH_lp(VoR;xNT&k1Cs?NZ0S4GQ9YVv9%^F|Is$!v zQ!em4ZDRYUHtuMI!y=yj-s2BvmJr=_BIS3fjQQj-RmNNfd}I%_c$7l0uAsUycm(UX z+@t~}ndfja{G)iYq=&>|G$8@){Rdzc@PbySb^z_td!|%5Htvdo;R1@v0EUA`>IrVq z3P{}aJepdIb)Cm4OQ`fJ%vrUrY|?;O^f(!{iT>xKWAa~u(vM0lYLqs|S~GQPP=KXc zxFoK5_98D;B*I3|{~BbaSa*F?fbG(Ghq`5)u0eqfNs6u;gqzKYC+yPhySOwbeCaO= z5GDQ7+TtkhN4kIi#FU_WSadv9HQcEBig0dCj~U5;|IWmAzuy^W6FUaZ8d{(xkba8 zvmnn7#!Ea8t`dcK+f~!Vc#sT=jEG?kx6qynv5fJ@hKEd7J&&6N_o#)wei-z9=Qo{9 zRdJo?2&Zy>F~P-(0jQlE4rc}7GuxrQm171S?aHoIJnc2y#K^tzJ@Y1yGClaXwA9)P zc!yocnaF^sTqdQTNns6UnfyC3@LHlrr}N)IUE@pKF(y4a@c|sjM!T2IYU zYOwad3vYS8v=ycuRxZbaFK#(lHG^1|6}jXkm0tZyu)6#BE*#Z>_!Y!ij=epj&QhqP z^8fkI&POG-|BwGactLf~kxu16^Q4;09s5_c-t&*GA6Zw2hZ}Fatb^#)A9bM>Udat2 zBx^|45ClNr{?;pasDMHR6e^%l0lnfc{SanCmKc&p={94j;_T?)c#3g?|C9qRNs0 diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-colorblind-focus-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-colorblind-focus-linux.png index 2883c76e5a12161a582e569606751a4bf9993619..d23d83f9bf7f9b613c614f1ae49eb2ea60e48779 100644 GIT binary patch literal 8754 zcmeHNX;f3!_K&sJS{3Z0tpf_RL}`nFf`E*vRl(FDwkn8#QG*~dL8YXMhLv@kc<-?d>~afzLA3PXXV9o^m&jfk0n^ zp!@fpNG?=LqJ9laEK(1sJ@1|P_TH^^E+_sD`YQd)wC|c%Dc$c^U0nD1{{2ymZ!N06 zy1sT?S^KL)1+pS_mZq&|$c1NCAS%AB`S|OvesS&lAoJs`>o#%@Zzr5MneL@KaQ>SA zPtTuxKkdrXJfR%bn#^231xGQNs*S2ST@?s$bM2=BZ!GWy^~3B(mw`a{zuapHlvb>| z3cSBQ*tr}8`fl%a8=&yX-+-lnj@`Y#5*T&;Ltmiq8TkJk(vp5Dz(baT8tEYBVl*Qc zRN}he=jUG^Q(mRJ;*4{f6FT=2{Zg+Ug)Gc;6ndf}vp)oZnw`qJF4dk+6Z|nhJE392 za4ztKmE6msF@(}r>Hx-~uFWc7`C-l1(o8f_ zTzh3OwfjsgK^pOxrT`fXVs>nQ|Q1j;5L4ot2YUfS!FT*6bNoa7g)J%$P%@<*<*> z4W>B0(0o}8Fx|&kyJu8gKk*dI&af+^1xctcVw;UTKyMM>e!@}1}6g9zaQ$^~!iXNw#yYe|~<08)=S;>3tL$=A*dOWI&8 z>od>v%ddr~Cb*C@wL8>aalFv?%59jMa%Wo%=T+fuRLuNo_6pe<0$fUUvi7K*zOBe& z*HsH0pz%|%zzEfKX^i;on+GSYsknU(WNdWM_H2pq1kME==7*i_t~@QuhYqC=GnsKe z6;pM;RB4QIRjs}`Kj^}6{Sk~}3OmAa7M98s&#K($ZWDF+JKpqhBXGVY~&L%mlgM{3ze%tO~2M;<+g5^Tjy+v$?tA_qt# z+{xV8R5uL?R6uM;1wNNu>jt=Po`#dyVF$Iqdu39s!kT&N9yqur9>F!tzcemHh3N-m zO7d~|9w$X8WoI@s+uXQGSrL3KZJL&^B7TF7@oSJ?jFFC1Ti6yM3*8)BM1);-B%)v9ew#C< zKC~=bj0`W!5H)gU9@|kaz8-1Axg*0YNc^0!FeQ{=mA#3C#GMuL7q+w6JnMW~gbSm> zw@8_}BdqpHLvh>jDuJxBr#y>gQxr?|i96Mru$!tFJr`W})Y%e3*{X9424wI||H;oS zIwkAvR12y-Rg$(x2=G4Xlr*{i20%Rmw`5y$*PzA0Ty@ zhTXpA*3Vq8DDkt54N_LEt-!o0XdN(fv$k&_Ukp!dFNG3T=Ebs%+Zdh+LKco5OuLHE zlKYBj5!0fZSd{Liv~of@fo?!pZn`J39cN2c_ae_2_yH*G>(xo8IxHjjw-Cbk{$D@U z^N*02cbF-hvXr^#JJT1@X3+-#9Sh%m%*W2edd0Iw72fymJ4vdi`W18|aaE~kdaS1*UYkd1KO#V!^3&x#-Zz(# z9>)jk4LxOYt9&PJKECFw*jV;PXB+Y^JM>)S4q$c0jTZsvSSATfHO@^z32;c``A3n1 z-)yecjUbxN-#}OZUbR6qASwX9g zri4QScZ3yAS=n1EPr#^Xt`Go%&g$VqUu+A>@&;`=K`xa^{eIQF|4dak z1jz;8w8hPFZC3p0iSMVGZhOKvzQH7aBAc6DZ?%YD&0j3Hn5Q$8u^atTlAF-8C+n07 z4-4f9pFf;&mlNX}2j&wJ666`K+&;k&K<3%%4VOD%BzH&Kh0%aqu!5=X5YOb=t{o1I znQFJL=Cwgm0ts@2t>Khb5J@ib{Tnc*;o35DjKp>`T70E$I4^_%wr7}rZH&=EiC12A zZS*)dc#QKx6kOjwAjY=E)~TMT<+t0L?twkWAC<;S5_^@CUBD!L2iACv_Ey8mtDPHn zlFdei>%YJ*rGL3CE5L6$r-n{f{}U1xyPEq)NJuV#mo7+YV@Hvz;BLZ>*eLOmvM@P3A08c)ccg5yU|-@-o?Hi_qSO`FGg;SK$6)-!WATr!`#J z`mo$t@OIN1Uyb5XRZhb0+#g#AUHj&b0=Pb>>AeWR`cd`TR5oQ6sw*qmcw53_(ZZ{> z;V+{70iI~>cjY~VGrM^G2}q&Q4^Zy224K0ilHX>uYdJe7rB@B^Oft}MRCYfNmkC0A zjDY|SK8Cz^<-&YyVUc-q1(`K{A$v{It*z7wPD^g=#KK}gf%s_4j4Fb6Y#Ikl+2`kN zYUJna@rpr7m>M*;@$h-BQjN6GFts{KpO3{0Z? zf5y!HyplFiJ3nRll+&@k>FY?`Xknwi1089Sppm{wnf`WY(}=cEt3}Hhcr4DQ$!rp% z6h&!Q8Gy7lyx4+EH$5Y|_FUXe>6JqT(cSVL$)hEk_aOX*0U4}$snkd9Y;r-gWgepK zM-V#pOm_a+CKPtNQyg>a>nZViJ4|a$6qJyv6(J|wa~sMc23jn)L2(|)Gi66fdC;&h zC}Cf=j|qB)C2WmpsgWV$GG>h`PXL!570FJWl zdOoX;pc0#!IFUJ6eiet6Qxswwy?Ya^{%zyXm23}EYzSS+`!n$1oQs8SilWuV5+4(5 zPLHWnN8uIs@cNl@nn^Zm?H!MW0uwJ9;VqtQ8YKr;1IlN_Q@^qMz`_jsR|7Vok;>a~u$Y z(2}oc3w-peBFAoae;2vMH7O>2t!7zN=XseEfTKR68UQP=%8xu-)~v<#JE%6>zF*kjn$MAbShJ{<^ANCeqokN!ap*CXJXl^V=@s9?TDM4E+e0UGEl+dflsdNN*^Y#nNj>jCCl~!n>et zQ2&fc)+_e$?wB}PyOCqo4e!8*Yk2cV#>anX`z6ah##_ymMYN=^6}&iyP%)z8v;s3R z&Ff#x`tFnUj<@$s4QcQYonU5WMm{I7FGHP(1USqn_;7R~-Q|A{I3HQQ^lsx9^B`VzyE z*sneN1w9%uB19n~O1~OD-(BSUK}e1Ag=h=VW(?jqvrV@eOHduz=drGVo)ZfVGSfc=TKbf0 z=bdy2vatfS^Q;sG)QBQG_d=e;YJyL0sN~W(YI~q=-UH0s2PsMYTKiH}nG^1;wgciO zrTeJ56Cy3hWD7H)F!+M?@bjTsH$ql~%cWB;Lbc-}U1<95#r*zSdE4F4_{Gq{hw=Xz zI{f#C3x6d*S)%e^p5QDA`LCXNElF%iVt?t7bV*^B6lO_b{_{(PC3{)2mnC~yvX}qx z4syv|EV+yS1$R->&HoPgFQ9+%Ux0sqv%aL&|C3sM-)y-vO5N-ieqIioq=29Yj_!Z@ I{n_jP0O4I0j{pDw literal 6721 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 literal 6289 zcmeHLZB!Fy7LHpfu2e$78d?e076^;zB4rn=6oQ06U=$08 z7U>otgpbgAiX4}ZG*Ad3fv~u2s7#oJ3Lz#W;lmjygaF|y3?w`3p3^`5*RB6D=e+No zdC$G?z30wzpF8swe;68cVE;S&aX8$8;0xz2;c&05VgtADb!_F{Z{1Qcv4?&s=q#>f z=8o5$Y#{PaP7U>)Uqr!C%K7edk~a;g247ZynEfy!@L-7f*hA{Nlxv_WPed{!p1Jau?~icv9@2 zlGuR^8&cF}A42!~4n%=Evro8YV=0Gl1-o`5x)8Db0Unb$*4$n{Ozi!2Ha73G$706W zy*s-HhdX-V->>0tfB5`MYaH&@(STj$fP80c&i|PPsaGMq4=WoUnBzo)&I zF@tMoAUxxf8l?nmX{ZDKQlei4i(jre78IrbmAQ5r3%-}yd}bDJBMbU;`VH(!F?M*> z6-v8ldLqgDUX`wW9?9U}=y?GfFV)QNsxPfkWdSrVG^p@@>K>aR!)o*JQ$q{>NYybZ z8)0*MsN9W*6C{#hvbt2}q^4iXTSkeTc}*^&Vz8L8I}1TFdQYm{jR!`X7k!X8a#}`c zT?EI4H8RBPClPBo96_E|%UbAgpl^ZC7W^}^L%EThQ>KL;g(!Kgk)=%tLKvDH`Qi6l zec3wo3CX%@5Uy@fZTI@RbS@8wH)Tbzc9>+a36p%Bw<03GuVW--%+#nF zKr%PJJ-}F~0=lsqjb8(-lcbNPD8(lPs+-qiQ33-r1vXHpr~1U}()FRT7DcPt{3|Sj zJ+H?svA>$gQWhHGh#)oxgD z)mL#i5_DkF2x0j+z!OtUE8#q@lS!vG@}eH_Y{jPyr7nKH#2mQZASHICJBw)Fi>K@G zG7vP~X+S;#vQhD(6$-pzi7iS& z5{1HDn~5U`&y-`Z^uo4jE+G6K_=`k5WV07#oEO zVPcwxf*)_|9K(&$lf6!9nCV>e!%?5T+^n?<;nY;gF7R@LcQJp97e?5wK>d6woHvb_ zJzdWq9i1R6$4fN=qfN(|tdE&_^MyW$gP^Xa#OV+Wi$aI+8elDtLP23`C@|$}bR}tn z=*XBI;3&G+{;}ik0WQ2)7b0$%w5TmrstatjT=W7lQYJd%<0JP*7lO zV@G>oN$@up3CK;kI)%{F+TVE1j>rR58Pe~Bnfk{O+kF#F_lbMML{Cj?VKFl^~5V7z#XYvM?8$zR9r% z^(jSR(BU(Fbe7^QGnxPGiMGTv3R=iHq7KCDdI|iN|27TZ_nK;Lv4#JydA$1eWbyDy zy1pf?mbCs-Uyv3oS+Hcm64pz9?k||7fGh=MDIiM$z2cJ|3(Z()#zHd|nz7K#FMo>u eQ*NC#?-?(7<84a&%rgvfxZv}l=UUEQ%l{7+nxEnT diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-focus-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-focus-linux.png index 2883c76e5a12161a582e569606751a4bf9993619..d23d83f9bf7f9b613c614f1ae49eb2ea60e48779 100644 GIT binary patch literal 8754 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 I{n_jP0O4I0j{pDw literal 6721 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 literal 6748 zcmeHMeN9Jxrh;RrlRm^mLsKC0mG70K z3G*~fWXgHEeEF4?hLLDyiXh~apdvUWN{LE*C=vp5omuOx_5Qd2xNF^e*13D1bN1Q$ z?BDO)bN_WB6z%ZIrcXd1kOL;<@V6k4ogTPBe_0K@x$5Cf0E!i)Z_!_Z8ibqQfr+_sQio zzBJ3CUC?@9TyWVRMpA-!2PDyq*7mvj7keSx*!1-MM@x70AA!cC|BPM%0{yn7S#*$_ zsd-&@>h9;5G-0xk&ld%uY62#{;E26UcS{>T|uqBF@~F6`1RDToC&u?z)plLox!aIgFvxrR+@E) zFds*?`kMu-kjewf__(;Zo;JYasXs_nKfAfO9Hn!nM|Cv>r}HT$e*d@~iOe>WLuxzVLV&@_TT-OeIQO_!3Z?TXgFRpV#cj%Rh<3GHY3_-D1UzK@WM z4%U@oDN(D@MT(LDHvw{Y@J{Q!sUG7j1TpCt5r{&=g13=rG>Y7kt63Vfpuk?Ky%r`S zRl><_v{ito7FUm`0`%EQbLG68DYa0DmTNd1T^^2a2O$97%US$}t&(RL-}D`bq#AW3 z(}UeSRs|)Ft_Vkrl}g*&;VkOdu(8#^*}_^JC6i1Nw-NZef?GNBB_>@-H<#fe&q}DA ze>%*b9pf_G+3H-DqF?>kN8PS3STvy8{jTBO{}Qd8ZB*P9X>gAd_Ib%k-v#UEl@l>; zkxW*KyiF=P$Vl5>Jh z7U*OQ6y*iQWhKLBIs<_zHjU+3Dxl1tUcFM(db%>h!^)YB)H6}j!r-(7F>#cRqIHL- zJ-I8LZGbos0uo-SS=Ym`>@B|NEBpMC+;yQaMWsoi_EVCS{rwtLK!ThBHd^dl81A@- zW;AmAKC+Cgop$GWVN>H$I7yv_Iu9P3rhh7Mg7tA2iOSwcUu_qd){JJINtBGr>VOXM z!s#+35M*CdZ}Dbde=kQBTq!pp6j5UoKP6X>!O(px;htfBv;Q1ze&2~ZO98UgZ~u(J z$Iw$K9MN0=nwLd$k-RF6rN9$HeS0HcOb`a379Nadh}s03orSGjLn>Bt$&t*V>DT#^ zIWT8fpSWIHB>ici3L@3W-=*&Jdq2RE!Mm!|MFsZpe3<;xG2;PpkV;Ve%HF{t9{=pQ zC}C5dxVH9KAO{&$Q>}fCSX36W%)Dx!tkk#{l@2Qb@#67GVc%IG z{1Ys;Cr10*(`wFJB9X6nFLPT1jAoi!Yc8n|M{3TY@dGzetPB-G*@!a~2wVlDGv^w! zhj+54&A5IV#b~LZPE|x-m_3`N);`ke!_S*P%jyv#y=jJ05pR101$h%r?Ekn2R?M~D zQHDx-%EXZj#ne$zue5=^&H8TlSYN@bTO3P#4Lpa$%Ts&-Cbg zhP-`AvUz0Q{|(gp)OC0ES>xObxP3q?h1uE|0EqHi9+k0v~?U&bX<9C z@zO~|(Zo_cuXD?_jXwU*#{u2cPlsxJ3;@?0r$=i?x{X@s5wj?|y3lk5tmd&jiB zEXfA+=+j*iF@fB<3W^8F4MUG$k*QeftT9W=Nu2D}f+t)YY0Jp& z=!bhGF=W~Q2nbA}dq=f+M?{}H;^FC8bH)R9W{(s8?XUm&lW_oyyO`H|eXj!x9^o*s#QgB{nPpjz5T*IQP*j<0UlttMWO0cL|RM?w!bd>MP`cit0H{r~^~ diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-high-contrast-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-high-contrast-linux.png index 55ac1812066d97378f6857fe9a061a7d91566842..b0117e0489142316c40e5fc1404670ee103d422b 100644 GIT binary patch literal 8358 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 Z@$UpkmKfl?=Ju`6qt$%&nq!qHC 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 literal 6289 zcmeHLZB!Fy7LHpfu2e$78d?e076^;zB4rn=6oQ06U=$08 z7U>otgpbgAiX4}ZG*Ad3fv~u2s7#oJ3Lz#W;lmjygaF|y3?w`3p3^`5*RB6D=e+No zdC$G?z30wzpF8swe;68cVE;S&aX8$8;0xz2;c&05VgtADb!_F{Z{1Qcv4?&s=q#>f z=8o5$Y#{PaP7U>)Uqr!C%K7edk~a;g247ZynEfy!@L-7f*hA{Nlxv_WPed{!p1Jau?~icv9@2 zlGuR^8&cF}A42!~4n%=Evro8YV=0Gl1-o`5x)8Db0Unb$*4$n{Ozi!2Ha73G$706W zy*s-HhdX-V->>0tfB5`MYaH&@(STj$fP80c&i|PPsaGMq4=WoUnBzo)&I zF@tMoAUxxf8l?nmX{ZDKQlei4i(jre78IrbmAQ5r3%-}yd}bDJBMbU;`VH(!F?M*> z6-v8ldLqgDUX`wW9?9U}=y?GfFV)QNsxPfkWdSrVG^p@@>K>aR!)o*JQ$q{>NYybZ z8)0*MsN9W*6C{#hvbt2}q^4iXTSkeTc}*^&Vz8L8I}1TFdQYm{jR!`X7k!X8a#}`c zT?EI4H8RBPClPBo96_E|%UbAgpl^ZC7W^}^L%EThQ>KL;g(!Kgk)=%tLKvDH`Qi6l zec3wo3CX%@5Uy@fZTI@RbS@8wH)Tbzc9>+a36p%Bw<03GuVW--%+#nF zKr%PJJ-}F~0=lsqjb8(-lcbNPD8(lPs+-qiQ33-r1vXHpr~1U}()FRT7DcPt{3|Sj zJ+H?svA>$gQWhHGh#)oxgD z)mL#i5_DkF2x0j+z!OtUE8#q@lS!vG@}eH_Y{jPyr7nKH#2mQZASHICJBw)Fi>K@G zG7vP~X+S;#vQhD(6$-pzi7iS& z5{1HDn~5U`&y-`Z^uo4jE+G6K_=`k5WV07#oEO zVPcwxf*)_|9K(&$lf6!9nCV>e!%?5T+^n?<;nY;gF7R@LcQJp97e?5wK>d6woHvb_ zJzdWq9i1R6$4fN=qfN(|tdE&_^MyW$gP^Xa#OV+Wi$aI+8elDtLP23`C@|$}bR}tn z=*XBI;3&G+{;}ik0WQ2)7b0$%w5TmrstatjT=W7lQYJd%<0JP*7lO zV@G>oN$@up3CK;kI)%{F+TVE1j>rR58Pe~Bnfk{O+kF#F_lbMML{Cj?VKFl^~5V7z#XYvM?8$zR9r% z^(jSR(BU(Fbe7^QGnxPGiMGTv3R=iHq7KCDdI|iN|27TZ_nK;Lv4#JydA$1eWbyDy zy1pf?mbCs-Uyv3oS+Hcm64pz9?k||7fGh=MDIiM$z2cJ|3(Z()#zHd|nz7K#FMo>u eQ*NC#?-?(7<84a&%rgvfxZv}l=UUEQ%l{7+nxEnT diff --git a/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-tritanopia-focus-linux.png b/.playwright/snapshots/components/BranchName.test.ts-snapshots/BranchName-Default-light-tritanopia-focus-linux.png index 2883c76e5a12161a582e569606751a4bf9993619..d23d83f9bf7f9b613c614f1ae49eb2ea60e48779 100644 GIT binary patch literal 8754 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 I{n_jP0O4I0j{pDw literal 6721 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 literal 6289 zcmeHLZB!Fy7LHpfu2e$78d?e076^;zB4rn=6oQ06U=$08 z7U>otgpbgAiX4}ZG*Ad3fv~u2s7#oJ3Lz#W;lmjygaF|y3?w`3p3^`5*RB6D=e+No zdC$G?z30wzpF8swe;68cVE;S&aX8$8;0xz2;c&05VgtADb!_F{Z{1Qcv4?&s=q#>f z=8o5$Y#{PaP7U>)Uqr!C%K7edk~a;g247ZynEfy!@L-7f*hA{Nlxv_WPed{!p1Jau?~icv9@2 zlGuR^8&cF}A42!~4n%=Evro8YV=0Gl1-o`5x)8Db0Unb$*4$n{Ozi!2Ha73G$706W zy*s-HhdX-V->>0tfB5`MYaH&@(STj$fP80c&i|PPsaGMq4=WoUnBzo)&I zF@tMoAUxxf8l?nmX{ZDKQlei4i(jre78IrbmAQ5r3%-}yd}bDJBMbU;`VH(!F?M*> z6-v8ldLqgDUX`wW9?9U}=y?GfFV)QNsxPfkWdSrVG^p@@>K>aR!)o*JQ$q{>NYybZ z8)0*MsN9W*6C{#hvbt2}q^4iXTSkeTc}*^&Vz8L8I}1TFdQYm{jR!`X7k!X8a#}`c zT?EI4H8RBPClPBo96_E|%UbAgpl^ZC7W^}^L%EThQ>KL;g(!Kgk)=%tLKvDH`Qi6l zec3wo3CX%@5Uy@fZTI@RbS@8wH)Tbzc9>+a36p%Bw<03GuVW--%+#nF zKr%PJJ-}F~0=lsqjb8(-lcbNPD8(lPs+-qiQ33-r1vXHpr~1U}()FRT7DcPt{3|Sj zJ+H?svA>$gQWhHGh#)oxgD z)mL#i5_DkF2x0j+z!OtUE8#q@lS!vG@}eH_Y{jPyr7nKH#2mQZASHICJBw)Fi>K@G zG7vP~X+S;#vQhD(6$-pzi7iS& z5{1HDn~5U`&y-`Z^uo4jE+G6K_=`k5WV07#oEO zVPcwxf*)_|9K(&$lf6!9nCV>e!%?5T+^n?<;nY;gF7R@LcQJp97e?5wK>d6woHvb_ zJzdWq9i1R6$4fN=qfN(|tdE&_^MyW$gP^Xa#OV+Wi$aI+8elDtLP23`C@|$}bR}tn z=*XBI;3&G+{;}ik0WQ2)7b0$%w5TmrstatjT=W7lQYJd%<0JP*7lO zV@G>oN$@up3CK;kI)%{F+TVE1j>rR58Pe~Bnfk{O+kF#F_lbMML{Cj?VKFl^~5V7z#XYvM?8$zR9r% z^(jSR(BU(Fbe7^QGnxPGiMGTv3R=iHq7KCDdI|iN|27TZ_nK;Lv4#JydA$1eWbyDy zy1pf?mbCs-Uyv3oS+Hcm64pz9?k||7fGh=MDIiM$z2cJ|3(Z()#zHd|nz7K#FMo>u eQ*NC#?-?(7<84a&%rgvfxZv}l=UUEQ%l{7+nxEnT diff --git a/packages/react/src/BranchName/BranchName.stories.tsx b/packages/react/src/BranchName/BranchName.stories.tsx index d70083c57f9..04964a4f3c8 100644 --- a/packages/react/src/BranchName/BranchName.stories.tsx +++ b/packages/react/src/BranchName/BranchName.stories.tsx @@ -1,10 +1,16 @@ import React from 'react' import type {Meta} from '@storybook/react' import BranchName from './BranchName' +import {Stack} from '../Stack' export default { title: 'Components/BranchName', component: BranchName, } as Meta -export const Default = () => branch_name +export const Default = () => ( + + branch_name + branch_name as span + +) diff --git a/packages/react/src/BranchName/BranchName.tsx b/packages/react/src/BranchName/BranchName.tsx index 39436c33531..010777c4a2a 100644 --- a/packages/react/src/BranchName/BranchName.tsx +++ b/packages/react/src/BranchName/BranchName.tsx @@ -7,13 +7,15 @@ import type {ComponentProps} from '../utils/types' const BranchName = styled.a` display: inline-block; padding: 2px 6px; - font-size: ${get('fontSizes.0')}; - font-family: ${get('fonts.mono')}; - color: ${get('colors.accent.fg')}; - background-color: ${get('colors.accent.subtle')}; - border-radius: ${get('radii.2')}; + font-size: var(--text-body-size-small, ${get('fontSizes.0')}); + font-family: var(--fontStack-monospace, ${get('fonts.mono')}); + color: var(--fgColor-link, ${get('colors.accent.fg')}); + background-color: var(--bgColor-accent-muted, ${get('colors.accent.subtle')}); + border-radius: var(--borderRadius-medium, ${get('radii.2')}); text-decoration: none; - + &:is(:not(a)) { + color: var(--fgColor-muted); + } ${sx}; ` From 60dc115ce846906c5c8560131a22b60463890401 Mon Sep 17 00:00:00 2001 From: Josh Black Date: Fri, 3 May 2024 16:09:04 -0500 Subject: [PATCH 08/21] refactor(Banner): update region to use a dedicated aria-label (#4539) * refactor(Banner): update region to use a dedicated aria-label * chore: add changeset, update config to exclude codesandbox * feat: add aria-label to Banner * Update packages/react/src/Banner/Banner.test.tsx Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com> * Update packages/react/src/Banner/Banner.test.tsx Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com> * test: update test label with aria-label --------- Co-authored-by: Josh Black Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com> --- .changeset/cold-starfishes-shout.md | 5 + .changeset/config.json | 2 +- packages/react/src/Banner/Banner.docs.json | 5 + packages/react/src/Banner/Banner.test.tsx | 39 ++++- packages/react/src/Banner/Banner.tsx | 149 ++++++++++-------- .../Banner/__snapshots__/Banner.test.tsx.snap | 2 +- .../react/src/internal/hooks/useMergedRefs.ts | 16 ++ 7 files changed, 146 insertions(+), 72 deletions(-) create mode 100644 .changeset/cold-starfishes-shout.md create mode 100644 packages/react/src/internal/hooks/useMergedRefs.ts diff --git a/.changeset/cold-starfishes-shout.md b/.changeset/cold-starfishes-shout.md new file mode 100644 index 00000000000..ce8c32e1b71 --- /dev/null +++ b/.changeset/cold-starfishes-shout.md @@ -0,0 +1,5 @@ +--- +'@primer/react': minor +--- + +Update Banner to use an explicit aria-label instead of being labelled by Banner title diff --git a/.changeset/config.json b/.changeset/config.json index 7c4d724582b..d826f57cc65 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -6,5 +6,5 @@ "access": "public", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["docs", "example-*"] + "ignore": ["docs", "example-*", "codesandbox"] } diff --git a/packages/react/src/Banner/Banner.docs.json b/packages/react/src/Banner/Banner.docs.json index a12ab01b984..fa4570ec9b0 100644 --- a/packages/react/src/Banner/Banner.docs.json +++ b/packages/react/src/Banner/Banner.docs.json @@ -6,6 +6,11 @@ "importPath": "@primer/react/experimental", "stories": [], "props": [ + { + "name": "aria-label", + "type": "string", + "description": "Provide an optional label to override the default name for the Banner landmark region" + }, { "name": "description", "type": "React.ReactNode", diff --git a/packages/react/src/Banner/Banner.test.tsx b/packages/react/src/Banner/Banner.test.tsx index 0da386c115e..0664cc0c692 100644 --- a/packages/react/src/Banner/Banner.test.tsx +++ b/packages/react/src/Banner/Banner.test.tsx @@ -25,12 +25,43 @@ describe('Banner', () => { it('should render as a region element', () => { render() - expect(screen.getByRole('region', {name: 'test'})).toBeInTheDocument() + expect(screen.getByRole('region', {name: 'Information'})).toBeInTheDocument() + expect(screen.getByRole('heading', {name: 'test'})).toBeInTheDocument() }) - it('should label the landmark element with the title prop', () => { + it('should label the landmark element with the corresponding variant label text', () => { render() - expect(screen.getByRole('region')).toEqual(screen.getByLabelText('test')) + expect(screen.getByRole('region')).toEqual(screen.getByLabelText('Information')) + }) + + it('should label the landmark element with the label for the critical variant', () => { + render() + expect(screen.getByRole('region')).toEqual(screen.getByLabelText('Critical')) + }) + + it('should label the landmark element with the label for the info variant', () => { + render() + expect(screen.getByRole('region')).toEqual(screen.getByLabelText('Information')) + }) + + it('should label the landmark element with the label for the success variant', () => { + render() + expect(screen.getByRole('region')).toEqual(screen.getByLabelText('Success')) + }) + + it('should label the landmark element with the label for the upsell variant', () => { + render() + expect(screen.getByRole('region')).toEqual(screen.getByLabelText('Recommendation')) + }) + + it('should label the landmark element with the label for the warning variant', () => { + render() + expect(screen.getByRole('region')).toEqual(screen.getByLabelText('Warning')) + }) + + it('should support the `aria-label` prop to override the default label for the landmark', () => { + render() + expect(screen.getByRole('region')).toHaveAttribute('aria-label', 'Test') }) it('should default the title to a h2', () => { @@ -50,7 +81,7 @@ describe('Banner', () => { it('should rendering a description with the `description` prop', () => { render() expect(screen.getByText('test-description')).toBeInTheDocument() - expect(screen.getByRole('region', {name: 'test'})).toContainElement(screen.getByText('test-description')) + expect(screen.getByRole('region', {name: 'Information'})).toContainElement(screen.getByText('test-description')) }) it('should support a primary action', async () => { diff --git a/packages/react/src/Banner/Banner.tsx b/packages/react/src/Banner/Banner.tsx index 13fb6196dde..8f61ba1a1d1 100644 --- a/packages/react/src/Banner/Banner.tsx +++ b/packages/react/src/Banner/Banner.tsx @@ -1,14 +1,21 @@ import cx from 'clsx' -import React, {createContext, useContext, useEffect, useId, useMemo} from 'react' +import React, {useEffect} from 'react' import styled from 'styled-components' import {AlertIcon, InfoIcon, StopIcon, CheckCircleIcon, XIcon} from '@primer/octicons-react' import {Button, IconButton} from '../Button' import {get} from '../constants' import {VisuallyHidden} from '../internal/components/VisuallyHidden' +import {useMergedRefs} from '../internal/hooks/useMergedRefs' type BannerVariant = 'critical' | 'info' | 'success' | 'upsell' | 'warning' export type BannerProps = React.ComponentPropsWithoutRef<'section'> & { + /** + * Provide an optional label to override the default name for the Banner + * landmark region + */ + 'aria-label'?: string + /** * Provide an optional description for the Banner. This should provide * supplemental information about the Banner @@ -64,74 +71,96 @@ const iconForVariant: Record = { warning: , } +const labels: Record = { + critical: 'Critical', + info: 'Information', + success: 'Success', + upsell: 'Recommendation', + warning: 'Warning', +} + export const Banner = React.forwardRef(function Banner( - {children, description, hideTitle, icon, onDismiss, primaryAction, secondaryAction, title, variant = 'info', ...rest}, - ref, + { + 'aria-label': label, + children, + description, + hideTitle, + icon, + onDismiss, + primaryAction, + secondaryAction, + title, + variant = 'info', + ...rest + }, + forwardRef, ) { - const titleId = useId() - const value = useMemo(() => { - return { - titleId, - } - }, [titleId]) const dismissible = variant !== 'critical' && onDismiss const hasActions = primaryAction || secondaryAction + const bannerRef = React.useRef(null) + const ref = useMergedRefs(forwardRef, bannerRef) if (__DEV__) { - // Note: __DEV__ will make it so that this hook is consistently called, or - // not called, depending on environment + // This hook is called consistently depending on the environment // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { - const title = document.getElementById(titleId) - if (!title) { + if (title) { + return + } + + const {current: banner} = bannerRef + if (!banner) { + return + } + + const hasTitle = banner.querySelector('[data-banner-title]') + if (!hasTitle) { throw new Error( - 'The Banner component requires a title to be provided as the `title` prop or through `Banner.Title`', + 'Expected a title to be provided to the component with the `title` prop or through `` but no title was found', ) } - }, [titleId]) + }, [title]) } return ( - - - -
{icon && variant === 'info' ? icon : iconForVariant[variant]}
-
-
- {title ? ( - hideTitle ? ( - - {title} - - ) : ( + + +
{icon && variant === 'info' ? icon : iconForVariant[variant]}
+
+
+ {title ? ( + hideTitle ? ( + {title} - ) - ) : null} - {description ? {description} : null} - {children} -
- {hasActions ? : null} + + ) : ( + {title} + ) + ) : null} + {description ? {description} : null} + {children}
- {dismissible ? ( - - ) : null} -
- + {hasActions ? : null} +
+ {dismissible ? ( + + ) : null} + ) }) @@ -342,9 +371,8 @@ export type BannerTitleProps = { export function BannerTitle(props: BannerTitleProps) { const {as: Heading = 'h2', className, children, ...rest} = props - const banner = useBanner() return ( - + {children} ) @@ -399,14 +427,3 @@ export function BannerSecondaryAction({children, className, ...rest}: BannerSeco ) } - -type BannerContextValue = {titleId: string} -const BannerContext = createContext(null) - -function useBanner(): BannerContextValue { - const value = useContext(BannerContext) - if (value) { - return value - } - throw new Error('Component must be used within a component') -} diff --git a/packages/react/src/Banner/__snapshots__/Banner.test.tsx.snap b/packages/react/src/Banner/__snapshots__/Banner.test.tsx.snap index 3a1a9768fbc..34992a57706 100644 --- a/packages/react/src/Banner/__snapshots__/Banner.test.tsx.snap +++ b/packages/react/src/Banner/__snapshots__/Banner.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Banner should throw an error if no title is provided 1`] = `"The Banner component requires a title to be provided as the \`title\` prop or through \`Banner.Title\`"`; +exports[`Banner should throw an error if no title is provided 1`] = `"Expected a title to be provided to the component with the \`title\` prop or through \`\` but no title was found"`; diff --git a/packages/react/src/internal/hooks/useMergedRefs.ts b/packages/react/src/internal/hooks/useMergedRefs.ts new file mode 100644 index 00000000000..7c67f20fadc --- /dev/null +++ b/packages/react/src/internal/hooks/useMergedRefs.ts @@ -0,0 +1,16 @@ +import {useCallback} from 'react' + +export function useMergedRefs( + ...refs: Array | React.ForwardedRef | React.RefCallback> +): React.RefCallback { + return useCallback((instance: T) => { + for (const ref of refs) { + if (typeof ref === 'function') { + ref(instance) + } else if (ref) { + ref.current = instance + } + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, refs) +} From 58bd2380054e98594c0daae7c9e57f01dad06ff8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 09:52:44 -0500 Subject: [PATCH 09/21] chore(deps-dev): bump cross-env from 7.0.2 to 7.0.3 (#4561) Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.2 to 7.0.3. - [Release notes](https://github.com/kentcdodds/cross-env/releases) - [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md) - [Commits](https://github.com/kentcdodds/cross-env/compare/v7.0.2...v7.0.3) --- updated-dependencies: - dependency-name: cross-env dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/package.json | 2 +- package-lock.json | 70 +---------------------------------------------- 2 files changed, 2 insertions(+), 70 deletions(-) diff --git a/docs/package.json b/docs/package.json index 1e1fbbad655..5305b4fc1c3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -34,7 +34,7 @@ "styled-system": "^5.1.0" }, "devDependencies": { - "cross-env": "7.0.2", + "cross-env": "7.0.3", "eslint": "8.56.0", "eslint-config-react-app": "7.0.1", "globby": "^11.0.4", diff --git a/package-lock.json b/package-lock.json index 1bff63ded85..6b496f7880c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,7 +80,7 @@ "styled-system": "^5.1.0" }, "devDependencies": { - "cross-env": "7.0.2", + "cross-env": "7.0.3", "eslint": "8.56.0", "eslint-config-react-app": "7.0.1", "globby": "^11.0.4", @@ -261,38 +261,6 @@ "@xtuc/long": "4.2.2" } }, - "docs/node_modules/cross-env": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz", - "integrity": "sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "docs/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "docs/node_modules/es-module-lexer": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.6.0.tgz", @@ -309,27 +277,6 @@ "yallist": "^3.0.0" } }, - "docs/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "docs/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "docs/node_modules/webpack": { "version": "5.40.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.40.0.tgz", @@ -376,21 +323,6 @@ } } }, - "docs/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "docs/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", From 8a33d1a2ff504b71389b6516d5773951ef4dfb48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 09:53:05 -0500 Subject: [PATCH 10/21] chore(deps-dev): bump @babel/plugin-transform-modules-commonjs (#4562) Bumps [@babel/plugin-transform-modules-commonjs](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-modules-commonjs) from 7.23.3 to 7.24.1. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.24.1/packages/babel-plugin-transform-modules-commonjs) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-modules-commonjs" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 43 +++++-------------------------------- packages/react/package.json | 2 +- 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b496f7880c..ef68b069116 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1835,13 +1835,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dev": true, + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-simple-access": "^7.22.5" }, "engines": { @@ -2452,22 +2451,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2543,22 +2526,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-typescript/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/register": { "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", @@ -62108,7 +62075,7 @@ "@babel/parser": "7.23.6", "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6", "@babel/plugin-proposal-optional-chaining": "7.21.0", - "@babel/plugin-transform-modules-commonjs": "7.23.3", + "@babel/plugin-transform-modules-commonjs": "7.24.1", "@babel/preset-react": "7.23.3", "@babel/preset-typescript": "7.24.1", "@primer/css": "^21.0.1", diff --git a/packages/react/package.json b/packages/react/package.json index a979bdb0e88..3e7bc317c6b 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -123,7 +123,7 @@ "@babel/parser": "7.23.6", "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6", "@babel/plugin-proposal-optional-chaining": "7.21.0", - "@babel/plugin-transform-modules-commonjs": "7.23.3", + "@babel/plugin-transform-modules-commonjs": "7.24.1", "@babel/preset-react": "7.23.3", "@babel/preset-typescript": "7.24.1", "@primer/css": "^21.0.1", From 35d55bd184a0475a417a17ccb113fae9ab845158 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 09:53:26 -0500 Subject: [PATCH 11/21] chore(deps-dev): bump jest-fail-on-console from 3.1.1 to 3.2.0 (#4563) Bumps [jest-fail-on-console](https://github.com/ValentinH/jest-fail-on-console) from 3.1.1 to 3.2.0. - [Release notes](https://github.com/ValentinH/jest-fail-on-console/releases) - [Commits](https://github.com/ValentinH/jest-fail-on-console/compare/v3.1.1...v3.2.0) --- updated-dependencies: - dependency-name: jest-fail-on-console dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 81 ++----------------------------------- packages/react/package.json | 2 +- 2 files changed, 5 insertions(+), 78 deletions(-) diff --git a/package-lock.json b/package-lock.json index ef68b069116..60d2a66f405 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40273,84 +40273,11 @@ } }, "node_modules/jest-fail-on-console": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/jest-fail-on-console/-/jest-fail-on-console-3.1.1.tgz", - "integrity": "sha512-g9HGhKcWOz8lHeZhLCXGg+RD/7upngiKkkBrHimsO/tGB0qi++QZffOgybjeI2bDW1qgdFiJJEG6t/WeTlfmOw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - } - }, - "node_modules/jest-fail-on-console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-fail-on-console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-fail-on-console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-fail-on-console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jest-fail-on-console/-/jest-fail-on-console-3.2.0.tgz", + "integrity": "sha512-GSqvjURdT/U+yu9JEr3EUTEB4kZi9feXMWS/jXGXB/lsnXXHcdU9Xsm2tEupSdqSEtrhTjOCqEJseFMrQ1ryvg==", "dev": true }, - "node_modules/jest-fail-on-console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-fail-on-console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-get-type": { "version": "29.6.3", "license": "MIT", @@ -62138,7 +62065,7 @@ "jest-axe": "7.0.1", "jest-css-modules": "2.1.0", "jest-environment-jsdom": "29.7.0", - "jest-fail-on-console": "3.1.1", + "jest-fail-on-console": "3.2.0", "jest-matchmedia-mock": "1.1.0", "jest-styled-components": "7.2.0", "jscodeshift": "0.15.0", diff --git a/packages/react/package.json b/packages/react/package.json index 3e7bc317c6b..d5e20f33828 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -186,7 +186,7 @@ "jest-axe": "7.0.1", "jest-css-modules": "2.1.0", "jest-environment-jsdom": "29.7.0", - "jest-fail-on-console": "3.1.1", + "jest-fail-on-console": "3.2.0", "jest-matchmedia-mock": "1.1.0", "jest-styled-components": "7.2.0", "jscodeshift": "0.15.0", From 5dd5603638f901a128dcdbe1d239fd5c287d8e13 Mon Sep 17 00:00:00 2001 From: Josh Black Date: Mon, 6 May 2024 10:59:56 -0500 Subject: [PATCH 12/21] feat(FeatureFlags): broaden feature flag type to accept undefined (#4554) * feat(FeatureFlags): loosen feature flag type to accept undefined * chore: add changeset * Update .changeset/grumpy-coats-worry.md --------- Co-authored-by: Josh Black --- .changeset/grumpy-coats-worry.md | 5 +++++ packages/react/src/FeatureFlags/FeatureFlagScope.ts | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .changeset/grumpy-coats-worry.md diff --git a/.changeset/grumpy-coats-worry.md b/.changeset/grumpy-coats-worry.md new file mode 100644 index 00000000000..584f41f81a0 --- /dev/null +++ b/.changeset/grumpy-coats-worry.md @@ -0,0 +1,5 @@ +--- +'@primer/react': minor +--- + +Broaden feature flag type for experimental FeatureFlags to accept undefined diff --git a/packages/react/src/FeatureFlags/FeatureFlagScope.ts b/packages/react/src/FeatureFlags/FeatureFlagScope.ts index 4aee95cf715..379c29a9e76 100644 --- a/packages/react/src/FeatureFlags/FeatureFlagScope.ts +++ b/packages/react/src/FeatureFlags/FeatureFlagScope.ts @@ -1,5 +1,5 @@ export type FeatureFlags = { - [key: string]: boolean + [key: string]: boolean | undefined } export class FeatureFlagScope { @@ -24,7 +24,10 @@ export class FeatureFlagScope { flags: Map constructor(flags: FeatureFlags = {}) { - this.flags = new Map(Object.entries(flags)) + this.flags = new Map() + for (const [key, value] of Object.entries(flags)) { + this.flags.set(key, value ?? false) + } } /** From f73f4615a8190eac15c7ad5f0618ba69bec69a46 Mon Sep 17 00:00:00 2001 From: Siddharth Kshetrapal Date: Tue, 7 May 2024 02:23:45 +0200 Subject: [PATCH 13/21] prevent form submit (#4551) --- packages/react/src/Autocomplete/Autocomplete.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/Autocomplete/Autocomplete.stories.tsx b/packages/react/src/Autocomplete/Autocomplete.stories.tsx index 52553e6bae9..0ff949cb574 100644 --- a/packages/react/src/Autocomplete/Autocomplete.stories.tsx +++ b/packages/react/src/Autocomplete/Autocomplete.stories.tsx @@ -229,7 +229,7 @@ export const Default = (args: FormControlArgs) => { } return ( - + event.preventDefault()}> From 8d4b60d3952ce3474c7f6741f85e2486e8a0649e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arma=C4=9Fan?= Date: Tue, 7 May 2024 10:30:16 +1000 Subject: [PATCH 14/21] deprecate title prop on ActionList.Group component on docs (#4544) --- packages/react/src/ActionList/ActionList.docs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react/src/ActionList/ActionList.docs.json b/packages/react/src/ActionList/ActionList.docs.json index 90770f12475..20ffc93e1c6 100644 --- a/packages/react/src/ActionList/ActionList.docs.json +++ b/packages/react/src/ActionList/ActionList.docs.json @@ -256,7 +256,8 @@ "name": "title", "type": "string", "defaultValue": "", - "description": "Title of the group." + "description": "Please use `ActionList.GroupHeading` instead.", + "deprecated": true }, { "name": "auxiliaryText", From dad89500b948fce6d1e3d5613b074bed1b4017d8 Mon Sep 17 00:00:00 2001 From: Josh Black Date: Tue, 7 May 2024 10:50:40 -0500 Subject: [PATCH 15/21] chore: add hydro analytics to storybook (#4558) * chore: add hydro analytics to storybook * chore: use previewHead over managerHead * Update build-docs --------- Co-authored-by: Josh Black --- packages/react/.storybook/main.js | 16 ++++++++++++++++ script/build-docs | 2 ++ 2 files changed, 18 insertions(+) diff --git a/packages/react/.storybook/main.js b/packages/react/.storybook/main.js index a3cd97ce78b..54d0375cb1a 100644 --- a/packages/react/.storybook/main.js +++ b/packages/react/.storybook/main.js @@ -1,3 +1,7 @@ +'use strict' + +const {DEPLOY_ENV = 'development'} = process.env + /** * @type {import('@storybook/core-common').StorybookConfig} */ @@ -53,4 +57,16 @@ module.exports = { typescript: { reactDocgen: 'react-docgen', }, + previewHead: head => { + if (DEPLOY_ENV === 'development') { + return head + } + return `${head}\n` + }, + previewBody: body => { + if (DEPLOY_ENV === 'development') { + return body + } + return `${body}\n` + }, } diff --git a/script/build-docs b/script/build-docs index 24ab7d3c95b..0d71259534d 100755 --- a/script/build-docs +++ b/script/build-docs @@ -2,9 +2,11 @@ set -e if [ -n "$1" ]; then + export DEPLOY_ENV="preview" npm run build:preview -w docs npm run build:storybook preview else + export DEPLOY_ENV="production" npm run build -w docs npm run build:storybook fi From e6a173b74174cdf52cdbd4cd6eec6269d0008c3f Mon Sep 17 00:00:00 2001 From: Ian Sanders Date: Tue, 7 May 2024 12:05:14 -0400 Subject: [PATCH 16/21] Revert "Revert "Add support for nested submenus to `ActionMenu`"" (#4486) * Revert "Revert "Add support for nested submenus to `ActionMenu` (#4386)" (#4472)" This reverts commit 82072eb7169578bb686c07c64b3dd52eac764e38. * just want a change to trigger rebuild --------- Co-authored-by: Siddharth Kshetrapal Co-authored-by: Pavithra Kodmad --- .changeset/wild-students-bow.md | 5 + .../ActionList/ActionListContainerContext.tsx | 1 + packages/react/src/ActionList/Item.tsx | 14 +- .../ActionMenu.features.stories.tsx | 53 +++++- packages/react/src/ActionMenu/ActionMenu.tsx | 96 ++++++++-- .../react/src/__tests__/ActionMenu.test.tsx | 170 +++++++++++++++++- .../src/hooks/useMenuKeyboardNavigation.ts | 31 +++- 7 files changed, 348 insertions(+), 22 deletions(-) create mode 100644 .changeset/wild-students-bow.md diff --git a/.changeset/wild-students-bow.md b/.changeset/wild-students-bow.md new file mode 100644 index 00000000000..111e2d290e9 --- /dev/null +++ b/.changeset/wild-students-bow.md @@ -0,0 +1,5 @@ +--- +"@primer/react": minor +--- + +Adds support for nested submenus to `ActionMenu` diff --git a/packages/react/src/ActionList/ActionListContainerContext.tsx b/packages/react/src/ActionList/ActionListContainerContext.tsx index 1127042aa56..57370225370 100644 --- a/packages/react/src/ActionList/ActionListContainerContext.tsx +++ b/packages/react/src/ActionList/ActionListContainerContext.tsx @@ -14,6 +14,7 @@ type ContextProps = { // eslint-disable-next-line @typescript-eslint/ban-types afterSelect?: Function enableFocusZone?: boolean + defaultTrailingVisual?: React.ReactElement } export const ActionListContainerContext = React.createContext({}) diff --git a/packages/react/src/ActionList/Item.tsx b/packages/react/src/ActionList/Item.tsx index f75a6e5d826..517f188b0ba 100644 --- a/packages/react/src/ActionList/Item.tsx +++ b/packages/react/src/ActionList/Item.tsx @@ -74,6 +74,15 @@ export const Item = React.forwardRef( inlineDescription: [Description, props => props.variant !== 'block'], }) + const {container, afterSelect, selectionAttribute, defaultTrailingVisual} = + React.useContext(ActionListContainerContext) + + // Be sure to avoid rendering the container unless there is a default + const wrappedDefaultTrailingVisual = defaultTrailingVisual ? ( + {defaultTrailingVisual} + ) : null + const trailingVisual = slots.trailingVisual ?? wrappedDefaultTrailingVisual + const { variant: listVariant, role: listRole, @@ -81,7 +90,6 @@ export const Item = React.forwardRef( selectionVariant: listSelectionVariant, } = React.useContext(ListContext) const {selectionVariant: groupSelectionVariant} = React.useContext(GroupContext) - const {container, afterSelect, selectionAttribute} = React.useContext(ActionListContainerContext) const inactive = Boolean(inactiveText) const showInactiveIndicator = inactive && container === undefined @@ -308,7 +316,7 @@ export const Item = React.forwardRef( sx={{display: 'flex', flexDirection: 'column', flexGrow: 1, minWidth: 0}} > ( ) : ( // If it's not inactive, or it has a leading visual that can be replaced, // just render the trailing visual slot. - slots.trailingVisual + trailingVisual ) } diff --git a/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx b/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx index f417e8cb1f4..670e3b49cc8 100644 --- a/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx +++ b/packages/react/src/ActionMenu/ActionMenu.features.stories.tsx @@ -1,6 +1,15 @@ import React from 'react' import {ActionMenu, ActionList, Box} from '../' -import {WorkflowIcon, ArchiveIcon, GearIcon, CopyIcon, RocketIcon, CommentIcon, BookIcon} from '@primer/octicons-react' +import { + WorkflowIcon, + ArchiveIcon, + GearIcon, + CopyIcon, + RocketIcon, + CommentIcon, + BookIcon, + SparkleFillIcon, +} from '@primer/octicons-react' export default { title: 'Components/ActionMenu/Features', @@ -181,3 +190,45 @@ export const InactiveItems = () => ( ) + +export const Submenus = () => ( + + Edit + + + Cut + Copy + Paste + + + + + + + Paste special + + + + + Paste plain text + Paste formulas + Paste with formatting + + + Paste from + + + + Current clipboard + History + Another device + + + + + + + + + +) diff --git a/packages/react/src/ActionMenu/ActionMenu.tsx b/packages/react/src/ActionMenu/ActionMenu.tsx index d33212d8a87..619272c40b1 100644 --- a/packages/react/src/ActionMenu/ActionMenu.tsx +++ b/packages/react/src/ActionMenu/ActionMenu.tsx @@ -1,5 +1,5 @@ -import React, {useEffect, useState} from 'react' -import {TriangleDownIcon} from '@primer/octicons-react' +import React, {useCallback, useContext, useMemo, useEffect, useState} from 'react' +import {TriangleDownIcon, ChevronRightIcon} from '@primer/octicons-react' import type {AnchoredOverlayProps} from '../AnchoredOverlay' import {AnchoredOverlay} from '../AnchoredOverlay' import type {OverlayProps} from '../Overlay' @@ -13,11 +13,16 @@ import type {MandateProps} from '../utils/types' import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic' import {Tooltip} from '../TooltipV2/Tooltip' +export type MenuCloseHandler = ( + gesture: 'anchor-click' | 'click-outside' | 'escape' | 'tab' | 'item-select' | 'arrow-left', +) => void + export type MenuContextProps = Pick< AnchoredOverlayProps, 'anchorRef' | 'renderAnchor' | 'open' | 'onOpen' | 'anchorId' > & { - onClose?: (gesture: 'anchor-click' | 'click-outside' | 'escape' | 'tab') => void + onClose?: MenuCloseHandler + isSubmenu?: boolean } const MenuContext = React.createContext({renderAnchor: null, open: false}) @@ -44,9 +49,23 @@ const Menu: React.FC> = ({ onOpenChange, children, }: ActionMenuProps) => { + const parentMenuContext = useContext(MenuContext) + const [combinedOpenState, setCombinedOpenState] = useProvidedStateOrCreate(open, onOpenChange, false) const onOpen = React.useCallback(() => setCombinedOpenState(true), [setCombinedOpenState]) - const onClose = React.useCallback(() => setCombinedOpenState(false), [setCombinedOpenState]) + const onClose: MenuCloseHandler = React.useCallback( + gesture => { + setCombinedOpenState(false) + + // Close the parent stack when an item is selected or the user tabs out of the menu entirely + switch (gesture) { + case 'tab': + case 'item-select': + parentMenuContext.onClose?.(gesture) + } + }, + [setCombinedOpenState, parentMenuContext], + ) const menuButtonChild = React.Children.toArray(children).find( child => React.isValidElement(child) && (child.type === MenuButton || child.type === Anchor), @@ -100,7 +119,18 @@ const Menu: React.FC> = ({ }) return ( - + {contents} ) @@ -108,7 +138,40 @@ const Menu: React.FC> = ({ export type ActionMenuAnchorProps = {children: React.ReactElement; id?: string} const Anchor = React.forwardRef(({children, ...anchorProps}, anchorRef) => { - return React.cloneElement(children, {...anchorProps, ref: anchorRef}) + const {onOpen, isSubmenu} = React.useContext(MenuContext) + + const openSubmenuOnRightArrow: React.KeyboardEventHandler = useCallback( + event => { + children.props.onKeyDown?.(event) + if (isSubmenu && event.key === 'ArrowRight' && !event.defaultPrevented) onOpen?.('anchor-key-press') + }, + [children, isSubmenu, onOpen], + ) + + // Add right chevron icon to submenu anchors rendered using `ActionList.Item` + const parentActionListContext = useContext(ActionListContainerContext) + const thisActionListContext = useMemo( + () => + isSubmenu + ? { + ...parentActionListContext, + defaultTrailingVisual: , + // Default behavior is to close after selecting; we want to open the submenu instead + afterSelect: () => onOpen?.('anchor-click'), + } + : parentActionListContext, + [isSubmenu, onOpen, parentActionListContext], + ) + + return ( + + {React.cloneElement(children, { + ...anchorProps, + ref: anchorRef, + onKeyDown: openSubmenuOnRightArrow, + })} + + ) }) /** this component is syntactical sugar 🍭 */ @@ -133,19 +196,24 @@ type MenuOverlayProps = Partial & const Overlay: React.FC> = ({ children, align = 'start', - side = 'outside-bottom', + side, 'aria-labelledby': ariaLabelledby, ...overlayProps }) => { // we typecast anchorRef as required instead of optional // because we know that we're setting it in context in Menu - const {anchorRef, renderAnchor, anchorId, open, onOpen, onClose} = React.useContext(MenuContext) as MandateProps< - MenuContextProps, - 'anchorRef' - > + const { + anchorRef, + renderAnchor, + anchorId, + open, + onOpen, + onClose, + isSubmenu = false, + } = React.useContext(MenuContext) as MandateProps const containerRef = React.useRef(null) - useMenuKeyboardNavigation(open, onClose, containerRef, anchorRef) + useMenuKeyboardNavigation(open, onClose, containerRef, anchorRef, isSubmenu) // If the menu anchor is an icon button, we need to label the menu by tooltip that also labelled the anchor. const [anchorAriaLabelledby, setAnchorAriaLabelledby] = useState(null) @@ -167,7 +235,7 @@ const Overlay: React.FC> = ({ onOpen={onOpen} onClose={onClose} align={align} - side={side} + side={side ?? (isSubmenu ? 'outside-right' : 'outside-bottom')} overlayProps={overlayProps} focusZoneSettings={{focusOutBehavior: 'wrap'}} > @@ -179,7 +247,7 @@ const Overlay: React.FC> = ({ // If there is a custom aria-labelledby, use that. Otherwise, if exists, use the id that labels the anchor such as tooltip. If none of them exist, use anchor id. listLabelledBy: ariaLabelledby || anchorAriaLabelledby || anchorId, selectionAttribute: 'aria-checked', // Should this be here? - afterSelect: onClose, + afterSelect: () => onClose?.('item-select'), }} > {children} diff --git a/packages/react/src/__tests__/ActionMenu.test.tsx b/packages/react/src/__tests__/ActionMenu.test.tsx index 8ec6fd70624..0c6c9ace83a 100644 --- a/packages/react/src/__tests__/ActionMenu.test.tsx +++ b/packages/react/src/__tests__/ActionMenu.test.tsx @@ -1,4 +1,4 @@ -import {render as HTMLRender, waitFor, act} from '@testing-library/react' +import {render as HTMLRender, waitFor, act, within} from '@testing-library/react' import userEvent from '@testing-library/user-event' import {axe} from 'jest-axe' import React from 'react' @@ -78,6 +78,60 @@ function ExampleWithTooltipV2(actionMenuTrigger: React.ReactElement): JSX.Elemen ) } +function ExampleWithSubmenus(): JSX.Element { + return ( + + + + + Toggle Menu + + + New file + + Copy link + Edit file + + Paste + + + Paste special + + + + Paste plain text + Paste formulas + Paste with formatting + + + Paste from + + + + { + /*noop*/ + }} + > + Current clipboard + + History + Another device + + + + + + + + + + + + + ) +} + describe('ActionMenu', () => { behavesAsComponent({ Component: ActionList, @@ -435,6 +489,7 @@ describe('ActionMenu', () => { expect(button.id).toBe(buttonId) }) + it('should use the tooltip id to name the menu when the anchor is icon button', async () => { const component = HTMLRender( @@ -464,4 +519,117 @@ describe('ActionMenu', () => { expect(toggleButton).toHaveAttribute('aria-labelledby') expect(component.getByRole('menu')).toHaveAttribute('aria-labelledby', toggleButton.getAttribute('aria-labelledby')) }) + + describe('submenus', () => { + it('sets `aria-haspopup` and `aria-expanded` on submenu anchors', async () => { + const component = HTMLRender() + const user = userEvent.setup() + + const baseAnchor = component.getByRole('button', {name: 'Toggle Menu'}) + await user.click(baseAnchor) + + const submenuAnchor = component.getByRole('menuitem', {name: 'Paste special'}) + expect(submenuAnchor).toHaveAttribute('aria-haspopup') + await user.click(submenuAnchor) + expect(submenuAnchor).toHaveAttribute('aria-expanded') + + const subSubmenuAnchor = component.getByRole('menuitem', {name: 'Paste from'}) + expect(subSubmenuAnchor).toHaveAttribute('aria-haspopup') + await user.click(subSubmenuAnchor) + expect(subSubmenuAnchor).toHaveAttribute('aria-expanded') + }) + + it('sets labels on submenus', async () => { + const component = HTMLRender() + const user = userEvent.setup() + + const baseAnchor = component.getByRole('button', {name: 'Toggle Menu'}) + await user.click(baseAnchor) + + const submenuAnchor = component.getByRole('menuitem', {name: 'Paste special'}) + await user.click(submenuAnchor) + const submenu = component.getByRole('menu', {name: 'Paste special'}) + expect(submenu).toBeVisible() + + const subSubmenuAnchor = within(submenu).getByRole('menuitem', {name: 'Paste from'}) + await user.click(subSubmenuAnchor) + const subSubmenu = component.getByRole('menu', {name: 'Paste from'}) + expect(subSubmenu).toBeVisible() + }) + + it('does not open top-level menu on right arrow key press', async () => { + const component = HTMLRender() + const user = userEvent.setup() + + const baseAnchor = component.getByRole('button', {name: 'Toggle Menu'}) + baseAnchor.focus() + + await user.keyboard('{ArrowRight}') + expect(component.queryByRole('menu')).not.toBeInTheDocument() + expect(baseAnchor).not.toHaveAttribute('aria-expanded', 'true') + }) + + it('opens submenus on enter or right arrow key press', async () => { + const component = HTMLRender() + const user = userEvent.setup() + + const baseAnchor = component.getByRole('button', {name: 'Toggle Menu'}) + await user.click(baseAnchor) + + const submenuAnchor = component.getByRole('menuitem', {name: 'Paste special'}) + expect(submenuAnchor).toHaveAttribute('aria-haspopup', 'true') + submenuAnchor.focus() + await user.keyboard('{Enter}') + expect(submenuAnchor).toHaveAttribute('aria-expanded', 'true') + + const subSubmenuAnchor = component.getByRole('menuitem', {name: 'Paste from'}) + subSubmenuAnchor.focus() + await user.keyboard('{ArrowRight}') + expect(subSubmenuAnchor).toHaveAttribute('aria-expanded', 'true') + }) + + it('closes top menu on escape or left arrow key press', async () => { + const component = HTMLRender() + const user = userEvent.setup() + + const baseAnchor = component.getByRole('button', {name: 'Toggle Menu'}) + await user.click(baseAnchor) + + const submenuAnchor = component.getByRole('menuitem', {name: 'Paste special'}) + await user.click(submenuAnchor) + + const subSubmenuAnchor = component.getByRole('menuitem', {name: 'Paste from'}) + await user.click(subSubmenuAnchor) + + expect(subSubmenuAnchor).toHaveAttribute('aria-expanded', 'true') + + await user.keyboard('{Escape}') + expect(subSubmenuAnchor).not.toHaveAttribute('aria-expanded', 'true') + expect(submenuAnchor).toHaveAttribute('aria-expanded', 'true') + + await user.keyboard('{ArrowLeft}') + expect(submenuAnchor).not.toHaveAttribute('aria-expanded', 'true') + + expect(baseAnchor).toHaveAttribute('aria-expanded', 'true') + }) + + it('closes all menus when an item is selected', async () => { + const component = HTMLRender() + const user = userEvent.setup() + + const baseAnchor = component.getByRole('button', {name: 'Toggle Menu'}) + await user.click(baseAnchor) + + const submenuAnchor = component.getByRole('menuitem', {name: 'Paste special'}) + await user.click(submenuAnchor) + + const subSubmenuAnchor = component.getByRole('menuitem', {name: 'Paste from'}) + await user.click(subSubmenuAnchor) + + const subSubmenuItem = component.getByRole('menuitem', {name: 'Current clipboard'}) + await user.click(subSubmenuItem) + + expect(baseAnchor).not.toHaveAttribute('aria-expanded', 'true') + }) + }) }) diff --git a/packages/react/src/hooks/useMenuKeyboardNavigation.ts b/packages/react/src/hooks/useMenuKeyboardNavigation.ts index 8adbb52778a..4000fd578fe 100644 --- a/packages/react/src/hooks/useMenuKeyboardNavigation.ts +++ b/packages/react/src/hooks/useMenuKeyboardNavigation.ts @@ -2,7 +2,7 @@ import React from 'react' import {iterateFocusableElements} from '@primer/behaviors/utils' import {useMenuInitialFocus} from './useMenuInitialFocus' import {useMnemonics} from './useMnemonics' -import type {MenuContextProps} from '../ActionMenu' +import type {MenuCloseHandler} from '../ActionMenu' /** * Keyboard navigation is a mix of 4 hooks @@ -13,14 +13,16 @@ import type {MenuContextProps} from '../ActionMenu' */ export const useMenuKeyboardNavigation = ( open: boolean, - onClose: MenuContextProps['onClose'], + onClose: MenuCloseHandler | undefined, containerRef: React.RefObject, anchorRef: React.RefObject, + isSubmenu: boolean, ) => { useMenuInitialFocus(open, containerRef, anchorRef) useMnemonics(open, containerRef) useCloseMenuOnTab(open, onClose, containerRef, anchorRef) useMoveFocusToMenuItem(open, containerRef, anchorRef) + useCloseSubmenuOnArrow(open, isSubmenu, onClose, containerRef) } /** @@ -29,7 +31,7 @@ export const useMenuKeyboardNavigation = ( */ const useCloseMenuOnTab = ( open: boolean, - onClose: MenuContextProps['onClose'], + onClose: MenuCloseHandler | undefined, containerRef: React.RefObject, anchorRef: React.RefObject, ) => { @@ -50,6 +52,29 @@ const useCloseMenuOnTab = ( }, [open, onClose, containerRef, anchorRef]) } +/** + * Close submenu when left arrow key is pressed + */ +const useCloseSubmenuOnArrow = ( + open: boolean, + isSubmenu: boolean, + onClose: MenuCloseHandler | undefined, + containerRef: React.RefObject, +) => { + React.useEffect(() => { + const container = containerRef.current + + const handler = (event: KeyboardEvent) => { + if (open && isSubmenu && event.key === 'ArrowLeft') onClose?.('arrow-left') + } + + container?.addEventListener('keydown', handler) + return () => { + container?.removeEventListener('keydown', handler) + } + }, [open, onClose, containerRef, isSubmenu]) +} + /** * When Arrow Keys are pressed and the focus is on the anchor, * focus should move to a menu item From 5f29736199300286c2ca13930a89602d376cf440 Mon Sep 17 00:00:00 2001 From: Josh Black Date: Tue, 7 May 2024 11:30:11 -0500 Subject: [PATCH 17/21] chore(deps): update typescript to 5.4.5 (#4568) Co-authored-by: Josh Black --- examples/app-router/package.json | 2 +- examples/codesandbox/package.json | 2 +- package-lock.json | 57 ++++++++++++++++--------------- package.json | 2 +- packages/react/package.json | 4 +-- 5 files changed, 34 insertions(+), 33 deletions(-) diff --git a/examples/app-router/package.json b/examples/app-router/package.json index aa6a13cbff4..e516a20a79d 100644 --- a/examples/app-router/package.json +++ b/examples/app-router/package.json @@ -14,7 +14,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "styled-components": "5.x", - "typescript": "^5.3.3" + "typescript": "^5.4.5" }, "devDependencies": { "@next/eslint-plugin-next": "14.1.0", diff --git a/examples/codesandbox/package.json b/examples/codesandbox/package.json index 525f084d3b7..3c36b671117 100644 --- a/examples/codesandbox/package.json +++ b/examples/codesandbox/package.json @@ -25,7 +25,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "styled-components": "5.x", - "typescript": "^5.2.2", + "typescript": "^5.4.5", "vite": "^5.2.6" } } diff --git a/package-lock.json b/package-lock.json index 60d2a66f405..9bfa3b3d4b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "prettier": "3.0.3", "rimraf": "5.0.5", "size-limit": "11.0.2", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "engines": { "node": ">=12", @@ -337,7 +337,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "styled-components": "5.x", - "typescript": "^5.3.3" + "typescript": "^5.4.5" }, "devDependencies": { "@next/eslint-plugin-next": "14.1.0", @@ -421,7 +421,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "styled-components": "5.x", - "typescript": "^5.2.2", + "typescript": "^5.4.5", "vite": "^5.2.6" } }, @@ -55145,9 +55145,9 @@ } }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" }, "node_modules/saxes": { "version": "6.0.0", @@ -56892,15 +56892,15 @@ } }, "node_modules/stylus": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", - "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.62.0.tgz", + "integrity": "sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==", "dev": true, "dependencies": { - "@adobe/css-tools": "^4.0.1", + "@adobe/css-tools": "~4.3.1", "debug": "^4.3.2", "glob": "^7.1.6", - "sax": "~1.2.4", + "sax": "~1.3.0", "source-map": "^0.7.3" }, "bin": { @@ -58657,8 +58657,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "license": "Apache-2.0", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -58668,27 +58669,27 @@ } }, "node_modules/typescript-plugin-css-modules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.0.2.tgz", - "integrity": "sha512-ej/Og4Y8mF+43P14P9Ik1MGqNXcXBVgO1TltkESegdnZsaaRXnaJ5CoJmTPRkg25ysQlOV6P94wNhI4VxIzlkw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz", + "integrity": "sha512-6h+sLBa4l+XYSTn/31vZHd/1c3SvAbLpobY6FxDiUOHJQG1eD9Gh3eCs12+Eqc+TCOAdxcO+zAPvUq0jBfdciw==", "dev": true, "dependencies": { - "@types/postcss-modules-local-by-default": "^4.0.0", - "@types/postcss-modules-scope": "^3.0.1", - "dotenv": "^16.0.3", + "@types/postcss-modules-local-by-default": "^4.0.2", + "@types/postcss-modules-scope": "^3.0.4", + "dotenv": "^16.4.2", "icss-utils": "^5.1.0", - "less": "^4.1.3", + "less": "^4.2.0", "lodash.camelcase": "^4.3.0", - "postcss": "^8.4.21", + "postcss": "^8.4.35", "postcss-load-config": "^3.1.4", "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", "reserved-words": "^0.1.2", - "sass": "^1.58.3", + "sass": "^1.70.0", "source-map-js": "^1.0.2", - "stylus": "^0.59.0", - "tsconfig-paths": "^4.1.2" + "stylus": "^0.62.0", + "tsconfig-paths": "^4.2.0" }, "peerDependencies": { "typescript": ">=4.0.0" @@ -62095,8 +62096,8 @@ "terser": "5.27.0", "ts-toolbelt": "9.6.0", "tsx": "4.7.0", - "typescript": "5.3.3", - "typescript-plugin-css-modules": "5.0.2", + "typescript": "5.4.5", + "typescript-plugin-css-modules": "5.1.0", "unist-util-find": "3.0.0", "unist-util-find-before": "4.0.0", "unist-util-flat-filter": "2.0.0", diff --git a/package.json b/package.json index ad73d95cbc2..4e6378da082 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "prettier": "3.0.3", "rimraf": "5.0.5", "size-limit": "11.0.2", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.9.6" diff --git a/packages/react/package.json b/packages/react/package.json index d5e20f33828..50675e18617 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -216,8 +216,8 @@ "terser": "5.27.0", "ts-toolbelt": "9.6.0", "tsx": "4.7.0", - "typescript": "5.3.3", - "typescript-plugin-css-modules": "5.0.2", + "typescript": "5.4.5", + "typescript-plugin-css-modules": "5.1.0", "unist-util-find": "3.0.0", "unist-util-find-before": "4.0.0", "unist-util-flat-filter": "2.0.0", From 741a6a52c5125616929f7529c07e65973baa8d9e Mon Sep 17 00:00:00 2001 From: Dusty Greif Date: Tue, 7 May 2024 09:32:56 -0700 Subject: [PATCH 18/21] Use dynamic height and width for dialogs (#4567) * Use dynamic height and width for dialogs * Update tall-forks-bathe.md --------- Co-authored-by: Siddharth Kshetrapal --- .changeset/tall-forks-bathe.md | 5 +++++ packages/react/src/Dialog.tsx | 4 ++-- packages/react/src/Dialog/Dialog.tsx | 18 +++++++++--------- 3 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 .changeset/tall-forks-bathe.md diff --git a/.changeset/tall-forks-bathe.md b/.changeset/tall-forks-bathe.md new file mode 100644 index 00000000000..4998b637e00 --- /dev/null +++ b/.changeset/tall-forks-bathe.md @@ -0,0 +1,5 @@ +--- +'@primer/react': patch +--- + +Dialog: Use dynamic view height/width. This allows available visible space to be properly computed on iOS devices. diff --git a/packages/react/src/Dialog.tsx b/packages/react/src/Dialog.tsx index cd177925a5a..50bb47d11cb 100644 --- a/packages/react/src/Dialog.tsx +++ b/packages/react/src/Dialog.tsx @@ -33,10 +33,10 @@ const DialogBase = styled.div` outline: none; @media screen and (max-width: 750px) { - width: 100vw; + width: 100dvw; margin: 0; border-radius: 0; - height: 100vh; + height: 100dvh; } ${sx}; diff --git a/packages/react/src/Dialog/Dialog.tsx b/packages/react/src/Dialog/Dialog.tsx index 15460063739..81692f9ae45 100644 --- a/packages/react/src/Dialog/Dialog.tsx +++ b/packages/react/src/Dialog/Dialog.tsx @@ -239,8 +239,8 @@ const StyledDialog = styled.div` width: ${props => widthMap[props.width ?? ('xlarge' as const)]}; height: ${props => heightMap[props.height ?? ('auto' as const)]}; min-width: 296px; - max-width: calc(100vw - 64px); - max-height: calc(100vh - 64px); + max-width: calc(100dvw - 64px); + max-height: calc(100dvh - 64px); border-radius: 12px; opacity: 1; @@ -257,7 +257,7 @@ const StyledDialog = styled.div` } &[data-position-regular='left'] { - height: 100vh; + height: 100dvh; max-height: unset; border-radius: var(--borderRadius-large, 0.75rem); border-top-left-radius: 0; @@ -269,7 +269,7 @@ const StyledDialog = styled.div` } &[data-position-regular='right'] { - height: 100vh; + height: 100dvh; max-height: unset; border-radius: var(--borderRadius-large, 0.75rem); border-top-right-radius: 0; @@ -288,10 +288,10 @@ const StyledDialog = styled.div` } &[data-position-narrow='bottom'] { - width: 100vw; + width: 100dvw; height: auto; - max-width: 100vw; - max-height: calc(100vh - 64px); + max-width: 100dvw; + max-height: calc(100dvh - 64px); border-radius: var(--borderRadius-large, 0.75rem); border-bottom-right-radius: 0; border-bottom-left-radius: 0; @@ -303,9 +303,9 @@ const StyledDialog = styled.div` &[data-position-narrow='fullscreen'] { width: 100%; - max-width: 100vw; + max-width: 100dvw; height: 100%; - max-height: 100vh; + max-height: 100dvh; border-radius: unset !important; flex-grow: 1; From 6bb17266647305eeed27c1d83d5a7a02b407801b Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Tue, 7 May 2024 14:29:12 -0400 Subject: [PATCH 19/21] Make asterisk default, update story scenarios --- .../FormControl/FormControl.features.stories.tsx | 14 +++++++++----- .../react/src/FormControl/_FormControlLabel.tsx | 2 +- .../react/src/internal/components/InputLabel.tsx | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/react/src/FormControl/FormControl.features.stories.tsx b/packages/react/src/FormControl/FormControl.features.stories.tsx index 750f25d3c74..b8184d635e6 100644 --- a/packages/react/src/FormControl/FormControl.features.stories.tsx +++ b/packages/react/src/FormControl/FormControl.features.stories.tsx @@ -10,6 +10,7 @@ import { Radio, RadioGroup, Select, + Text, TextInput, TextInputWithTokens, Textarea, @@ -311,21 +312,24 @@ export const CustomRequired = () => ( Form Input Label - This is form field with a custom required indicator + This is a form field with a custom required indicator + + Required fields are marked with an asterisk (*) Form Input Label - This is form field with a required indicator that is hidden in the accessibility tree + This is a form field with a required indicator that is hidden in the accessibility tree - - + + + Form Input Label - This is form field without a required indicator + This is a form field that is marked as optional, it is not required diff --git a/packages/react/src/FormControl/_FormControlLabel.tsx b/packages/react/src/FormControl/_FormControlLabel.tsx index e38dc573a36..8c52c909c52 100644 --- a/packages/react/src/FormControl/_FormControlLabel.tsx +++ b/packages/react/src/FormControl/_FormControlLabel.tsx @@ -15,7 +15,7 @@ export type Props = { const FormControlLabel: React.FC< React.PropsWithChildren<{htmlFor?: string} & React.ComponentProps & Props> -> = ({as, children, htmlFor, id, visuallyHidden, requiredIndicator = true, requiredText = '*', sx, ...props}) => { +> = ({as, children, htmlFor, id, visuallyHidden, requiredIndicator = true, requiredText, sx, ...props}) => { const {disabled, id: formControlId, required} = useFormControlContext() /** diff --git a/packages/react/src/internal/components/InputLabel.tsx b/packages/react/src/internal/components/InputLabel.tsx index 6a07b835a7d..0699b512796 100644 --- a/packages/react/src/internal/components/InputLabel.tsx +++ b/packages/react/src/internal/components/InputLabel.tsx @@ -56,10 +56,10 @@ const InputLabel: React.FC> = ({ }} {...props} > - {required ? ( + {required || requiredText ? ( {children} - {requiredText && {requiredText}} + {!requiredText ? '*' : requiredText} ) : ( children From afe895d998cdc9fea934933f52e676f4b8a73bba Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Thu, 23 May 2024 12:23:44 -0400 Subject: [PATCH 20/21] Update packages/react/src/FormControl/FormControl.docs.json Co-authored-by: Owen Niblock --- packages/react/src/FormControl/FormControl.docs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/FormControl/FormControl.docs.json b/packages/react/src/FormControl/FormControl.docs.json index ee9745bf7dc..94dcd39ad7c 100644 --- a/packages/react/src/FormControl/FormControl.docs.json +++ b/packages/react/src/FormControl/FormControl.docs.json @@ -66,7 +66,7 @@ "name": "requiredIndicator", "type": "boolean", "defaultValue": "true", - "description": "Whether to show or hide the required text in the accessibility tree, but still visually show the required text." + "description": "Whether to show or hide the required text in the accessibility tree, the required text is still shown visually." }, { "name": "sx", From be9b4a69153b94da1f3c10ca7b20570898990f30 Mon Sep 17 00:00:00 2001 From: Tyler Jones Date: Thu, 23 May 2024 12:26:52 -0400 Subject: [PATCH 21/21] Update packages/react/src/internal/components/InputLabel.tsx Co-authored-by: Owen Niblock --- packages/react/src/internal/components/InputLabel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react/src/internal/components/InputLabel.tsx b/packages/react/src/internal/components/InputLabel.tsx index 0699b512796..e932a4d5418 100644 --- a/packages/react/src/internal/components/InputLabel.tsx +++ b/packages/react/src/internal/components/InputLabel.tsx @@ -59,7 +59,7 @@ const InputLabel: React.FC> = ({ {required || requiredText ? ( {children} - {!requiredText ? '*' : requiredText} + {requiredText ?? '*'} ) : ( children