From 14467b1571cd2b73649323e2dd03e993c3599186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Tue, 29 Oct 2024 13:20:02 +0100 Subject: [PATCH 1/2] feat(Dialog): add `verticalAlignment` property with `top` alignment support --- .../docs/uilib/components/dialog/Examples.tsx | 13 ++ .../docs/uilib/components/dialog/demos.mdx | 5 + .../uilib/components/dialog/prop-table.mdx | 29 +---- .../uilib/components/drawer/prop-table.mdx | 3 - .../modal/event-table-camel-case.mdx | 3 - .../uilib/components/modal/event-table.mdx | 3 - .../src/components/dialog/Dialog.tsx | 2 + .../src/components/dialog/DialogDocs.ts | 114 ++++++++++++++++++ .../__tests__/Dialog.screenshot.test.ts | 13 ++ .../dialog/__tests__/Dialog.test.tsx | 10 ++ ...ave-to-match-a-top-aligned-dialog.snap.png | Bin 0 -> 36628 bytes ...ave-to-match-a-top-aligned-dialog.snap.png | Bin 0 -> 34040 bytes .../__snapshots__/Dialog.test.tsx.snap | 4 + .../__snapshots__/Drawer.test.tsx.snap | 4 + .../src/components/modal/Modal.tsx | 3 + .../src/components/modal/ModalContent.tsx | 2 + .../__snapshots__/Modal.test.tsx.snap | 4 + .../src/components/modal/style/dnb-modal.scss | 5 + .../dnb-eufemia/src/components/modal/types.ts | 5 + 19 files changed, 190 insertions(+), 32 deletions(-) create mode 100644 packages/dnb-eufemia/src/components/dialog/DialogDocs.ts create mode 100644 packages/dnb-eufemia/src/components/dialog/__tests__/__image_snapshots__/dialog-for-sbanken-have-to-match-a-top-aligned-dialog.snap.png create mode 100644 packages/dnb-eufemia/src/components/dialog/__tests__/__image_snapshots__/dialog-for-ui-have-to-match-a-top-aligned-dialog.snap.png diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx index 319bf43f707..5d395c9876a 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx @@ -55,6 +55,19 @@ export const DialogExampleHelpButton = () => ( ) +export const DialogExampleVerticalAlignment = () => ( + + + +) + export const DialogExampleFullscreen = () => ( +### Top aligned Dialog + + + ### Dialog with custom trigger diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/prop-table.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/prop-table.mdx index cc7a2fdce9e..7064ba325b5 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/prop-table.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/prop-table.mdx @@ -1,23 +1,6 @@ -| Properties | Description | -| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `variant` | _(optional)_ The dialog variant. Can either be `information` or `confirmation`. Defaults to `information`. | -| `title` | _(optional)_ The dialog title. Displays on the very top of the content. | -| `minWidth` | _(optional)_ The minimum Dialog content width, defined by a CSS width value like `50vw` (50% of the viewport). Be careful on using fixed `minWidth` so you don't break responsiveness. Defaults to `30rem` (average width is set to `60vw`). | -| `maxWidth` | _(optional)_ The maximum Dialog content width, defined by a CSS width value like `20rem`. Defaults to `60rem` (average width is set to `60vw`). | -| `className` | _(optional)_ Give the Dialog content a class name (maps to `dnb-dialog`). | -| `spacing` | _(optional)_ If set to `false` then the dialog content will be shown without any spacing. Defaults to `true`. | -| `preventCoreStyle` | _(optional)_ By default the dialog content gets added the core style class `dnb-core-style`. Use `false` to disable this behavior. | -| `navContent` | _(optional)_ The content which will appear in the navigation, above the header, and side-by-side the close button. | -| `headerContent` | _(optional)_ The content which will appear in the header of the dialog. | -| `modalContent` | _(optional)_ The content which will appear when triggering the dialog. | -| `description` | _(optional)_ A description will be positioned below the title, but before the content. Used for Dialog variant `confirmation` to further describe what the actions will do. | -| `alignContent` | _(optional)_ Define the inner horizontal alignment of the content. Can be set to `left`, `center`, `right` and `centered`. If `centered`, then the content will also be centered vertically. Defaults to `left`. | -| `fullscreen` | _(optional)_ If set to `true` then the dialog content will be shown as fullscreen, without showing the original content behind. Can be set to `false` to omit the auto fullscreen. Defaults to `auto`. | -| `icon` | _(optional)_ An icon to display at the top of the component. Should be of size medium, so make sure you import the `_medium` version of the Eufemia icon. | -| `confirmType` | _(optional)_ For variant confirmation, the dialog is either an informational (`info`) or a warning (`warning`) message. Defaults to 'info'. | -| `declineText` | _(optional)_ For dialog actions, give a custom text for the decline button. | -| `confirmText` | _(optional)_ For dialog actions, give a custom text for the confirmation button. | -| `hideDecline` | _(optional)_ For variant confirmation, hide the default decline button and only show the confirmation button. | -| `hideConfirm` | _(optional)_ For variant confirmation, hide the default confirm button and only show the decline button. | -| `scrollRef` | _(optional)_ To get the scroll Element, pass in your own React ref. | -| `contentRef` | _(optional)_ To get the inner content Element, pass in your own React ref. | +import PropertiesTable from 'dnb-design-system-portal/src/shared/parts/PropertiesTable' +import { DialogProperties } from '@dnb/eufemia/src/components/dialog/DialogDocs' + +## Properties + + diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/drawer/prop-table.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/drawer/prop-table.mdx index 69a6fa3275a..24feda75c9a 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/drawer/prop-table.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/drawer/prop-table.mdx @@ -1,6 +1,3 @@ ---- ---- - | Properties | Description | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `containerPlacement` | _(optional)_ Defines on what side the Drawer should be opened. Can be set to `left`, `right`, `top` and `bottom`. Defaults to `right`. | diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table-camel-case.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table-camel-case.mdx index c19a6d1b87b..832c24b3260 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table-camel-case.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table-camel-case.mdx @@ -1,6 +1,3 @@ ---- ---- - | Events | Description | | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `onOpen` | _(optional)_ This event gets triggered once the modal shows up. Returns the modal id: `{ id }`. | diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table.mdx b/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table.mdx index d14e2fe5572..9f32d045fae 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/modal/event-table.mdx @@ -1,6 +1,3 @@ ---- ---- - | Events | Description | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `onOpen` / `on_open` | _(optional)_ This event gets triggered once the modal shows up. Returns the modal id: `{ id }`. | diff --git a/packages/dnb-eufemia/src/components/dialog/Dialog.tsx b/packages/dnb-eufemia/src/components/dialog/Dialog.tsx index db572c8c09c..8dd86795524 100644 --- a/packages/dnb-eufemia/src/components/dialog/Dialog.tsx +++ b/packages/dnb-eufemia/src/components/dialog/Dialog.tsx @@ -42,6 +42,7 @@ function Dialog(localProps: DialogProps & DialogContentProps) { dialogTitle, closeTitle, spacing, + verticalAlignment, noAnimation, noAnimationOnMobile, animationDuration, @@ -100,6 +101,7 @@ function Dialog(localProps: DialogProps & DialogContentProps) { labelledBy, disabled, spacing, + verticalAlignment, openDelay, contentId, dialogTitle, diff --git a/packages/dnb-eufemia/src/components/dialog/DialogDocs.ts b/packages/dnb-eufemia/src/components/dialog/DialogDocs.ts new file mode 100644 index 00000000000..9276a745d88 --- /dev/null +++ b/packages/dnb-eufemia/src/components/dialog/DialogDocs.ts @@ -0,0 +1,114 @@ +import { PropertiesTableProps } from '../../shared/types' + +export const DialogProperties: PropertiesTableProps = { + variant: { + doc: 'The dialog variant. Can either be `information` or `confirmation`. Defaults to `information`.', + type: 'string', + status: 'optional', + }, + title: { + doc: 'The dialog title. Displays on the very top of the content.', + type: 'string', + status: 'optional', + }, + minWidth: { + doc: "The minimum Dialog content width, defined by a CSS width value like `50vw` (50% of the viewport). Be careful on using fixed `minWidth` so you don't break responsiveness. Defaults to `30rem` (average width is set to `60vw`).", + type: 'string', + status: 'optional', + }, + maxWidth: { + doc: 'The maximum Dialog content width, defined by a CSS width value like `20rem`. Defaults to `60rem` (average width is set to `60vw`).', + type: 'string', + status: 'optional', + }, + className: { + doc: 'Give the Dialog content a class name (maps to `dnb-dialog`).', + type: 'string', + status: 'optional', + }, + spacing: { + doc: 'If set to `false` then the dialog content will be shown without any spacing. Defaults to `true`.', + type: 'boolean', + status: 'optional', + }, + preventCoreStyle: { + doc: 'By default the dialog content gets added the core style class `dnb-core-style`. Use `false` to disable this behavior.', + type: 'boolean', + status: 'optional', + }, + navContent: { + doc: 'The content which will appear in the navigation, above the header, and side-by-side the close button.', + type: 'React.Node', + status: 'optional', + }, + headerContent: { + doc: 'The content which will appear in the header of the dialog.', + type: 'React.Node', + status: 'optional', + }, + modalContent: { + doc: 'The content which will appear when triggering the dialog.', + type: 'React.Node', + status: 'optional', + }, + description: { + doc: 'A description will be positioned below the title, but before the content. Used for Dialog variant `confirmation` to further describe what the actions will do.', + type: 'string', + status: 'optional', + }, + verticalAlignment: { + doc: 'Define the vertical alignment of the container. Can be set to `top` or `center`. Defaults to `center`.', + type: 'string', + status: 'optional', + }, + alignContent: { + doc: 'Define the inner horizontal alignment of the content. Can be set to `left`, `center`, `right` and `centered`. If `centered`, then the content will also be centered vertically. Defaults to `left`.', + type: 'string', + status: 'optional', + }, + fullscreen: { + doc: 'If set to `true` then the dialog content will be shown as fullscreen, without showing the original content behind. Can be set to `false` to omit the auto fullscreen. Defaults to `auto`.', + type: 'boolean', + status: 'optional', + }, + icon: { + doc: 'An icon to display at the top of the component. Should be of size medium, so make sure you import the `_medium` version of the Eufemia icon.', + type: 'React.Node', + status: 'optional', + }, + confirmType: { + doc: 'For variant confirmation, the dialog is either an informational (`info`) or a warning (`warning`) message. Defaults to `info`.', + type: 'string', + status: 'optional', + }, + declineText: { + doc: 'For dialog actions, give a custom text for the decline button.', + type: 'string', + status: 'optional', + }, + confirmText: { + doc: 'For dialog actions, give a custom text for the confirmation button.', + type: 'string', + status: 'optional', + }, + hideDecline: { + doc: 'For variant confirmation, hide the default decline button and only show the confirmation button.', + type: 'boolean', + status: 'optional', + }, + hideConfirm: { + doc: 'For variant confirmation, hide the default confirm button and only show the decline button.', + type: 'boolean', + status: 'optional', + }, + scrollRef: { + doc: 'To get the scroll Element, pass in your own React ref.', + type: 'React.Ref', + status: 'optional', + }, + contentRef: { + doc: 'To get the inner content Element, pass in your own React ref.', + type: 'React.Ref', + status: 'optional', + }, +} diff --git a/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.screenshot.test.ts b/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.screenshot.test.ts index 3ad12488612..e891843b6d7 100644 --- a/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.screenshot.test.ts +++ b/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.screenshot.test.ts @@ -53,6 +53,19 @@ describe.each(['ui', 'sbanken'])('Dialog for %s', (themeName) => { expect(screenshot).toMatchImageSnapshot() }) + it('have to match a top aligned dialog', async () => { + const screenshot = await makeScreenshot({ + selector: 'div#dnb-modal-root', // only to make sure we have a valid selector + simulate: 'click', + simulateSelector: + '[data-visual-test="dialog-vertical-alignment"] button:first-of-type', + simulateAfter: { keypress: 'Escape' }, + screenshotSelector: '.dnb-modal__content', + rootClassName: 'hide-page-content', + }) + expect(screenshot).toMatchImageSnapshot() + }) + it('have to match the dialog fullscreen window', async () => { const screenshot = await makeScreenshot({ selector: 'div#dnb-modal-root', // only to make sure we have a valid selector diff --git a/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.test.tsx b/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.test.tsx index 7c7e7151225..9406daa9255 100644 --- a/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.test.tsx +++ b/packages/dnb-eufemia/src/components/dialog/__tests__/Dialog.test.tsx @@ -126,6 +126,16 @@ describe('Dialog', () => { ) }) + it('will set correct class when verticalAlignment is set to top', () => { + render() + + fireEvent.click(document.querySelector('button')) + + expect(document.querySelector('.dnb-modal__content')).toHaveClass( + 'dnb-modal__vertical-alignment--top' + ) + }) + it('has to have correct role', () => { const { rerender } = render( diff --git a/packages/dnb-eufemia/src/components/dialog/__tests__/__image_snapshots__/dialog-for-sbanken-have-to-match-a-top-aligned-dialog.snap.png b/packages/dnb-eufemia/src/components/dialog/__tests__/__image_snapshots__/dialog-for-sbanken-have-to-match-a-top-aligned-dialog.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..22a5a6e473810294de9ac11033fb2fc42698e3ba GIT binary patch literal 36628 zcmeFZcTiJpyFQu(0i}x+rHX>mkuDuXKzauS2?!!3R1pY0NQqPny-V+ejzEA&mEODb z-g|Gqg}(3J-<~sb{yB5z%$(WI;0#$w)_U&t-1l`|4*_Z_a)fwPcpwmnQ2xbp4G;)| z27X@N!~tGG*zym9K=(oN&!x2B(DelDXfnC}7W|u1#xHJuncm#or20K^{qJLSHC-12 zvf9m#G@kJ};=W5=PM2U@O-wJSMhH4vU8 zm>Goq9YltJsA0b2JqK-54HQRHT>tv-HG~ET6Xf^roBq6NWR49&`wMVA!u{u?f8RUZ zMD-t^1Cc!`g@B;aag<>`|NU(sGSId$;eXr}gm+gD3_>M$2DM84_p^ZTK=2}*zt8p0 zgAn9{5W_u-P4oZbRS^0m)_*|L;u`v6ihpkT9g$29SY!+xP4k}?0U;=1|GwkT+c7=B;}Tj!m5Bb+o`Bi-|35LC zXb$G;@<`(IA+qZq&x(+LB4POGOhk~%lXmTs*ulLp$S+r@!~V@{4{qaPgPJdm77CLd zA_Uj@1+0h>uNz`1?)>o^JRO2CMDYcw65wIh?!4Pgl=8=UFYS9PKatU2cG%?T0LlU=3+F}KLcS`V0`F#XEZ*sX?J+ z|AyC0Is)#D1%W6{V7WH5lh*cgA%>l;$QK_v-l*n5tPbWPPoDOG|BW&^ygdC1&X?qp zsE1AGXAU5g*SN&UI*0c#6$lGnWb}_$smTg&K<|Yy?LSByre7^kUhQVKM+AU1Kj$LUMBO-Kp-`CbH*gzJz>EC?vt%ksc3(8!LI!Rq; z76_d+U7A23H1v)CHmxu3q(MFrLeSmXZ!-B$$WI$$-+<@4e3)5i!Yj%EzIClW*?E}e z6BzyS$=}SICd4zxtP$+jx33XW;7@Ub;0?N7sO1UhQ=jxBO3WJhqlWu`ZtaOe2yF}R zu0r4!o|Pns;qGBXsvQmpmBdA&M1Sp~>2$nhFjOCE#FaqhPmTlRT7#sPp{2%WXWd0? zVieaaN)tZ_aMQcGV8v;_sNo;wPAwfE^rl)bavZdMTDbG%!?ha_^gzxZn9Nl_aRj08 zQ|>L0*31xS)V=GBm5mW!1Yait0wSJ=iRFjU)S5%MQnue!0YbRkw@Lpm;efjT>FDA#(A_VzXPmar65xTkf#Hi2Iv<=8V&+{A%hRPveCql*i zcN>p6m9Q{tAI)VepL1<1TvYZImGehJ1#EccKTz2BC;NY?mJViJTL=cb8&TU36LH+@!*1fEVQ0M<2Ds$I~ww5 zeIUG>+m?m+)BFgj1~?v&suUw}ak$&AC5}%7{>F4+=C#+QKLhD5W_d5K00-TLMnLGG zKKJPRy|0&l`~%VjK`mknT%kUz(l$6t0c9RA`wXcrQC=(hcAwFWH4~ygu`;ELA)m(H zKdqfGNB|>-wHMsag+YKFN&edLxDvRBgds>c6Ie7$w0aH}Jj7VO<4^idCtWYPf3u*A z3bU5;Ufh!wG2BAdNQ*TQV~sYi&Z3<%ZUH}i~M6NFha!EqS21EV)JNH_izSSz-| z_s6t){Ii_oFp?zUPIDP7i>cxkt!hJ!oPLRz{`U}gf?I#=&A?%Nk(xXL{o5GW z%l@&XyNF>`!p|0fHKy&c`M#Io)MRw8@{)9y5jB?MtlxyI-Vn`nw!KRJ$Uhq!`@?0| zxyo}^FzoSYU&C2^O)qj-BE8hbL@id-@T=*I2Bh;O1I%Mz)HawT|9(mK^ zCh?$0g(?WOHO8s+5O>>OLHsqrbu#s&BlwpI3D*^tLJ`hyJA?L@P+J!BiR&3f1=Mbz zbwbdJYo2U5o@PYoI&l{{4~6&)E@QcjH{&Jh1Kkg>u_iy$U&@)RLQ`NZo~gZV4n5A< zDQkV0i3q?lIs+pcV0ehNVO$B;_G$JEw>1!x^~zv}<@BqscqYt?AI)^*5F*|cuAdnP zPy_b{_kW2AE$>AqWhLeR#j-Kvl#h!qj~#^J68;kzkt8`OfhGQ1ir1 zIgbb_Fl*u*y`+D#;T1ODa>Qw}w?XBk0VXbUR`A2x`qutg&=H@jAyMGHEzSN9eA5vm z$b>!53HJqL#*J65l+$8WJ29uCI4v70Vli>Gr;8Hzo!-U2(Z$Fjo z7=TdR8>@CYASjYF`ESbR<3+cuD>SgCF_87F0bhFjHS2PEp0DJBKZp0e(BOIkV>I$; zyUJ|9Rl%}Lz#d7Oein~Y5+(TTMuozhh6xB7^>%MO2!!^ubOo}8imu-uqIUl^S)r3; zC-e}<3}@vgoO1v2D-p^~0pEuF34evvw)Gg_iBzF93>(&*nvts67u$PezEC*M=Wgbt zIr0$>_o_XKeMHwO6GeO>i`5pNT!j^;83MhMD&jRE3=#%S7OD;Yu!g`xVEWa(|LsW8 z0z{1!L9#a#JSjqXnZ}9Vhm6+z7M#?du;-;V_0246B|1Dj*PSN9;LSVa+J3jhRq6pM zFdNoU!gv0exR0>FE|l)|Sx`p&FJ(hdTA}B9#bqX&y@AODP40Fa9^Ts_3)tJP?kr~? zkRWK1K+>8I?sioHZGrD~(R!MTSZTWBRLt$W*mS2wK%zo8++IqEMdpypT)j^JgHe-- z>%qC0N8AJ9^sWmgTD`LY)@=o84V1&?TsY$#C7+!pMeGRUajqYBAW}+tg(_ zv*`+gIAA-=$<*3e4F#KX*J6Zq;E;?<=8ogujIz2f0%#dS!{kb^$ivHqY9QTw} z<*galP5|)9q$gp+1f-ZX{*3K)Nf0`5khkeYfTBd(X z>7P9sM;+*dNu*uPsX$QTTN~CBAb3sZgS*6kcbsM5YOWl|0QUCj3Kg(R{*y%C5mG>h zPSyB@E*1wdEd9()Ul0VfExFl@^>=@C1+K2D<2!=Uo>e&4u>x13z7A+35}=&oaHkZb z2LeGxqJOpp=I?UARk|`Ypj*g<0fq5@m-fG2`~N{e`hT8Ljen|GVLOo?7}3_Vl;lMr z?sGE}>UFk3Zas+(<1tfFeO3JSW~TagePCY;P5}mA=E(gHQ6TkuN7r0;w5Mxa<^*b7 z<~Dn?BP=)t)TEG7D}6DJVwfB}2uKSs9w?3Mx{#6}~cp zMB{lclf@H6oCAgm^d(((-#WjXiolEXa6do(`hJmF{xiLVc4udzn3R+R-k-fs8%W&( z)}^Fjpl0=N&gWvr(-pn+%HBWJ&OH>nc;XQ(y#~xpB5mPCBo~)w^rfzyqO4lXs0LVl z&a+hi4U41Ai;P9p#NW!d?s!n@OpIDpysjMku({4OR%p+?&>8no>9k^ft}h*?mGjn7 z(~uvglft4Y=Py5HP6iZ~D>WeR>7AU0*{>U-zLqgy@nY|fZ)l??!&Brwt3+|prUYdH}7L> z6>HtrD}Gz0e83niRez5$?~UrTYugtF94SP#mC9o%%qt}L&AAO z7-93eF8$J)5F=>wTb9?1oiV^Af|TLejX|B0AI2wFo49Kz%8ym>cet5bNHI-#MH3L|QSw8aCt>o57jysN9 zlUiKhh@_JJ&S(-#HHc?r2Z(V{_rKNv7bSdNSRdI&-e(ywazAPoznwyFd#>-xEd|!S?mcqi zy`Z?$2ddR)>&g6`uOVnitw{@^F-e}qU?4w?FI5^D%3Js$gNRl?diCZPo#R?g`9mBQ zNCgBxip%iv&TfG72kM58C*H*swpSTx^2IE+xxNoxh_PrK&8FYa(Jm3P9i}f44*gwO z(wot#IB0fgU^IQTI=~Vhbu`l;x9UuK#1=!|Ayzw#y2_GND^@di2)N6V z^3jsz)*Vkpw6 z1DpZZPItfZU?Govu<)~CZ*`{ewJKQ344BTul5GTzO;aq$r|MTN3f>V6SuA#tlBx|H{R3H{AmzzPc5P$X}Ty+-7gP@FB|LzvmGSxMv4_(>|k1` z@2A1PzLPSwWv-g(7gm}bfh~Xkz><0MCHBdio7x4hyXF%_JWfT+VB<#35}_djb@sGHl?CQ3~l%(y>=D+4g z29mYXr&w@|`?}k$4$v*+6a2o@IJr@d*T|TOlB{y+#VD6gS6CZboW3C5t|}qc$B4Y2 ze;X^{$Vtu~Eteiz@_Uogz_J+E0HGepKV7!SA6ezR`8%`TkCpW)+Wq7Ui?}Xz5ZqEV zX%yyK*!#S1NHS-j)#B<>`R8|?P1?~nB&zG73AxH#y=qP!>d(Z^*P=+!s4yUXZg!3U~zHo!q{J1zt8N zfm~TnEf_Zaa zu=Qo)!YG;DT^=&jlv(%%>kD`%2|U{L73J z`#Pz%W5-8#PiLEQ`UZ0a&9Nko=NEAAvy8oDBr`rrbY!R+po?A|MoGjj0_n}TIJ&^FX9wVwz_O05re3 zmE__v`d-506yme#s#o%^WEY`Gur>&jGk`#0CiZ2-Fbtb@y3$w0ruo2@ejS&SSxWKw zBil(R@H+R;*@ZHlQcBN`SpLay>QSg@kq|o8?WA)&@~%O^V1$uA3~Q%$!V*%YgLr*rtL^!#tKQA){X7cHbaBp{s{p4o5;^98pqnE z8m|>FGrKVzF`)U)Ny&(h*&M(1uq1qEE~CWE*5$Rs~!2Y{-E}zDDf2hWD`SID? zlhw99fxY~=lP#(RBLjov)A>62w`dm#u!1O5OR5Mr%>(fGHYeP^lv__UAWMj{8lW0L zXWJP=?No^kpXf#M{~F-28QCqhbfDCCKeCoRP=#S&Tlx0NPX%0;x;%dF3Lvq!EuF&e z8VAgjX;0d(m-$-!nkm7?&&0ukdK-8{VWykE(^=d7X!^*w>U2Qp&`lC|8!e#UmMyay z>A=TO3skv!isaMieT9@q)AUpIjwa!SlH=|=|3H+ zOrK%&7u3#~e}jjPU=>h9F6-pQD+60dPni>A$@3+Zi{-Y6wN>FAXcU|7$DG~Vs0FnI zn&0^O$YBGImp)3Jk0R}xBOe??wuiDOzV%Phs&m)qDG0kYcSLj3W`?ZYoE|KjRlkRK zehvNRO8o=}cDdgu9Fu`jn(>QR7vR7wCJTT4s&ba)J4)IoWujUD%Tgl*>M_fe~Y7ON_(FY<%agM5u zb_31H=?SDq$OD8@`5CM+!Hi+EC@Fr+nF1xbA8;sWJyt+;__A5Z(uwU=N^DyN+bhCG z2UzY4R_2|^*oNZynTXlVFF5k{{FVc6BXlfJgSiD-21@1SBJN3Qyp{jqPtm|`3-q|| zW}gI$h9Em?^b$pyHE$dAMyroV22sOfx!$@O-}r3?q)gSm zDB*P#aAf07^S2r5bTotkK`fSCzIB8>ec(Y|#fOy&LMcH-BpGAy%B}IWxNyF#<9##z zS-ii_{hW3;TRWFWIgzJ6$7vT5@J?AIn^K3*LQi+leyCx*Tv_#7g_UwFU%cgTHff3n z>>erO`Lp^bjO8yU$KIVp3R=vcpR}JF`+Mt=k8BrS{1Dg#nWY^R|JnI@T#ovhB#p)fsZtYEgH2g01omwt;qD_8{MPT66IY z-{M@_=5J?2z466?%ZT(A%7z3o+Qv(JLoTm}S3~xVL>CBrA~m(U%$RX{a8?rgE;e)N zHV#botDtiPmoD;cwV|=6$S(CrN5c)EOdhONFtlc~?o_{5FeKi#%ua38XX8?PLY)1@ z$twLu|72_gpTz^c(q-I!uxO=hJzgxIjp}2Scx_bK;QQ6Kpqs*_Tlw{ZUGao`HFi=3 zLT-l-aK3HPCJ^>mjmIddb0!n$>I8-x8Z3|+uJ*@GNqBhnXgJHVmemxF>F`^ zL`sidkQmndVDvoykzudMISsAx?+aX5)7BFiHSOW~1gz6}eME8gBC716i+A1Ws$$Za zn=e=ztP22SRVlGoPyor&9H+hoZ}J_J;yj%ZR(1|fqwlb$NijmS1t_8BlS z{bdJe->==G_4g>UrsL+WKxtb9RhBL!^TpTj_uI+OT!LPz^>8l~MMYWuQlw0S^KQ2t z3p=joYSg#pA{Ol4s+2Ei-x_`DDVr}8z+hPX!Qb^HK<612+Ssd=nu9Cz3$o&=y>V_Z zS$SXS$x4!_(l`PLZbI{cC-I~RL4u}(#f%Uf^quDJ>ERp|-EZx=y4bPn5hik~*~3K& zdhC0okGqEBb<1v-S&TDAFAcw%CO2T}FxrUaICq_TjQ4DFLSkuqu$~8J2Sh|Cs^bE} zKJN&!(mk3X!FTwa?9RE(`JJ7Ccu{6@NWdrgu|q~ZK|`+r4iL{X%;eE;pDuR`d>t{_ z(?G+eJQH^BDntn+ot9N#p&BC;PYbor1C3t^F3Ldd*(=>R=31n&(0!Lf`PD+tjmz8k zIn*{3nu%>M-TaEAz%XD0PxZc`+wFG0H= zh#1WHII1R!n_xoZvNay@){qX5{b-CF6P?e80r-yA8-h*t#AWGbwu?^{N0&87vM@sw z+aU?p2{7NXxD>~?X?h+_jvAp(9hXEWMkC=ZC}`zRBu!E_pDAhF#f0YYx
1iRw42} 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

~zukaUW~+ zI{W57hn^7!ixmQUoPR&hE|7(9?I6GU?~k4T+xWjD_5U#J-_m?%h={0*pFMu4^Y<2< zP1e7Y@9$&xH{kpYwSSY$zv=jIdi{S-uYXhO-<0~dl07Ty|EAQxDfMqk{hLz%KY@bj bQ=+Rk&%Y)s?B^i@f6tz%JuZ9n;`RRlJgd2O literal 0 HcmV?d00001 diff --git a/packages/dnb-eufemia/src/components/dialog/__tests__/__image_snapshots__/dialog-for-ui-have-to-match-a-top-aligned-dialog.snap.png b/packages/dnb-eufemia/src/components/dialog/__tests__/__image_snapshots__/dialog-for-ui-have-to-match-a-top-aligned-dialog.snap.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7de005b852a36e29b98599259130a3bf507544 GIT binary patch literal 34040 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 literal 0 HcmV?d00001 diff --git a/packages/dnb-eufemia/src/components/dialog/__tests__/__snapshots__/Dialog.test.tsx.snap b/packages/dnb-eufemia/src/components/dialog/__tests__/__snapshots__/Dialog.test.tsx.snap index 9380bb5464e..0cda407e68f 100644 --- a/packages/dnb-eufemia/src/components/dialog/__tests__/__snapshots__/Dialog.test.tsx.snap +++ b/packages/dnb-eufemia/src/components/dialog/__tests__/__snapshots__/Dialog.test.tsx.snap @@ -740,6 +740,10 @@ html[data-dnb-modal-active] { align-items: flex-end; justify-content: flex-start; } +.dnb-modal__vertical-alignment--top { + padding-top: 5vh; + align-items: flex-start; +} .dnb-modal__overlay { position: fixed; z-index: var(--modal-z-index); diff --git a/packages/dnb-eufemia/src/components/drawer/__tests__/__snapshots__/Drawer.test.tsx.snap b/packages/dnb-eufemia/src/components/drawer/__tests__/__snapshots__/Drawer.test.tsx.snap index 10641a58d69..b4ea4a99c8d 100644 --- a/packages/dnb-eufemia/src/components/drawer/__tests__/__snapshots__/Drawer.test.tsx.snap +++ b/packages/dnb-eufemia/src/components/drawer/__tests__/__snapshots__/Drawer.test.tsx.snap @@ -741,6 +741,10 @@ html[data-dnb-modal-active] { align-items: flex-end; justify-content: flex-start; } +.dnb-modal__vertical-alignment--top { + padding-top: 5vh; + align-items: flex-start; +} .dnb-modal__overlay { position: fixed; z-index: var(--modal-z-index); diff --git a/packages/dnb-eufemia/src/components/modal/Modal.tsx b/packages/dnb-eufemia/src/components/modal/Modal.tsx index f06b334b075..22204aaa191 100644 --- a/packages/dnb-eufemia/src/components/modal/Modal.tsx +++ b/packages/dnb-eufemia/src/components/modal/Modal.tsx @@ -107,6 +107,7 @@ class Modal extends React.PureComponent< max_width: null, align_content: 'left', container_placement: null, + vertical_alignment: null, open_state: null, direct_dom_return: false, root_id: 'root', @@ -444,6 +445,7 @@ class Modal extends React.PureComponent< header_content = null, bar_content = null, bypass_invalidation_selectors = null, + vertical_alignment = 'center', id, // eslint-disable-line open_state, // eslint-disable-line @@ -526,6 +528,7 @@ class Modal extends React.PureComponent< focus_selector={focus_selector} modal_content={modal_content} header_content={header_content} + vertical_alignment={vertical_alignment} bar_content={bar_content} bypass_invalidation_selectors={bypass_invalidation_selectors} close={this.close} diff --git a/packages/dnb-eufemia/src/components/modal/ModalContent.tsx b/packages/dnb-eufemia/src/components/modal/ModalContent.tsx index 2e716a066c2..1dafece08ff 100644 --- a/packages/dnb-eufemia/src/components/modal/ModalContent.tsx +++ b/packages/dnb-eufemia/src/components/modal/ModalContent.tsx @@ -363,6 +363,7 @@ export default class ModalContent extends React.PureComponent< no_animation_on_mobile = false, fullscreen = 'auto', container_placement = 'right', + vertical_alignment = 'center', close, content_class, overlay_class, @@ -422,6 +423,7 @@ export default class ModalContent extends React.PureComponent< container_placement ? `dnb-modal__content--${container_placement || 'right'}` : null, + `dnb-modal__vertical-alignment--${vertical_alignment}`, getThemeClasses(this.context?.theme), content_class ), diff --git a/packages/dnb-eufemia/src/components/modal/__tests__/__snapshots__/Modal.test.tsx.snap b/packages/dnb-eufemia/src/components/modal/__tests__/__snapshots__/Modal.test.tsx.snap index 6a1fc79fe60..bf0217c5469 100644 --- a/packages/dnb-eufemia/src/components/modal/__tests__/__snapshots__/Modal.test.tsx.snap +++ b/packages/dnb-eufemia/src/components/modal/__tests__/__snapshots__/Modal.test.tsx.snap @@ -733,6 +733,10 @@ html[data-dnb-modal-active] { align-items: flex-end; justify-content: flex-start; } +.dnb-modal__vertical-alignment--top { + padding-top: 5vh; + align-items: flex-start; +} .dnb-modal__overlay { position: fixed; z-index: var(--modal-z-index); diff --git a/packages/dnb-eufemia/src/components/modal/style/dnb-modal.scss b/packages/dnb-eufemia/src/components/modal/style/dnb-modal.scss index a188072c94f..ccce22b454c 100644 --- a/packages/dnb-eufemia/src/components/modal/style/dnb-modal.scss +++ b/packages/dnb-eufemia/src/components/modal/style/dnb-modal.scss @@ -74,6 +74,11 @@ html[data-dnb-modal-active] { } } + &__vertical-alignment--top { + padding-top: 5vh; + align-items: flex-start; + } + &__overlay { position: fixed; z-index: var(--modal-z-index); diff --git a/packages/dnb-eufemia/src/components/modal/types.ts b/packages/dnb-eufemia/src/components/modal/types.ts index e74acbad21b..f13512208c1 100644 --- a/packages/dnb-eufemia/src/components/modal/types.ts +++ b/packages/dnb-eufemia/src/components/modal/types.ts @@ -254,6 +254,11 @@ export interface ModalContentProps { */ container_placement?: 'left' | 'right' | 'top' | 'bottom' + /** + * Define the vertical alignment of the container. Can be set to `top` or `center`. Defaults to `center`. + */ + vertical_alignment?: 'top' | 'center' + /** * Give the content wrapper a custom class name (maps to `dnb-modal__content`). */ From 045fda8251bdc8eddc8b299f76423d41bafb75c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B8egh?= Date: Tue, 29 Oct 2024 13:56:30 +0100 Subject: [PATCH 2/2] Update packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx Co-authored-by: Anders --- .../src/docs/uilib/components/dialog/Examples.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx index 5d395c9876a..30e54ec3de9 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/components/dialog/Examples.tsx @@ -58,7 +58,7 @@ export const DialogExampleHelpButton = () => ( export const DialogExampleVerticalAlignment = () => (