From 40418b9346962cf9200897c185875552cd518e50 Mon Sep 17 00:00:00 2001 From: Thomas Jeffery Date: Wed, 14 Aug 2024 18:53:12 -0600 Subject: [PATCH 01/22] small layout fixes and navigation update --- src/App.tsx | 2 +- src/components/table-of-contents/toc.module.css | 4 ++-- src/routes/components/AllComponents.tsx | 12 ++++++------ src/routes/components/Components.tsx | 2 +- src/routes/content/ContentLayout.tsx | 4 ++-- src/routes/design-tokens/DesignTokenLayout.tsx | 5 ++--- src/routes/get-started/GetStartedLayout.tsx | 6 +++--- src/routes/patterns/PatternsLayout.tsx | 9 +++++---- src/routes/root.css | 5 +++-- src/routes/root.tsx | 4 ++-- src/routes/support/SupportLayout.tsx | 4 ++-- 11 files changed, 29 insertions(+), 28 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 671b384fc..112828315 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -67,11 +67,11 @@ import SideMenuPage from '@routes/components/SideMenu'; // Design Tokens +import DesignTokensOverviewPage from "@routes/design-tokens/overview/Overview"; import BorderRadiusPage from "@routes/design-tokens/border-radius/BorderRadius"; import BorderWidthPage from "@routes/design-tokens/border-width/BorderWidth"; import ColorPage from "@routes/design-tokens/color/Color"; import DesignTokens from "@routes/design-tokens/DesignTokenLayout.tsx"; -import DesignTokensOverviewPage from "@routes/design-tokens/overview/Overview"; import IconSizePage from "@routes/design-tokens/icon-size/IconSize"; import OpacityPage from "@routes/design-tokens/opacity/Opacity"; import ShadowPage from "@routes/design-tokens/shadow/Shadow"; diff --git a/src/components/table-of-contents/toc.module.css b/src/components/table-of-contents/toc.module.css index 682ac7f97..30e77214e 100644 --- a/src/components/table-of-contents/toc.module.css +++ b/src/components/table-of-contents/toc.module.css @@ -1,11 +1,11 @@ .toc { position: sticky; top: 0; - padding: 3.75rem var(--goa-space-xl) var(--goa-space-l) 0; + padding: 3.75rem 0 var(--goa-space-l) 0; overscroll-behavior: contain; width: 12rem; height: fit-content; - @media screen and (max-width: 1230px) { + @media screen and (max-width: 1152px) { display: none; } } diff --git a/src/routes/components/AllComponents.tsx b/src/routes/components/AllComponents.tsx index e14733166..51a19967b 100644 --- a/src/routes/components/AllComponents.tsx +++ b/src/routes/components/AllComponents.tsx @@ -174,6 +174,12 @@ export default function AllComponentsPage() { tags: ["action", "inputs and actions", "submit"], description: "A compact button with an icon and no text.", }, + { + name: "input", + groups: ["inputs"], + tags: ["inputs and actions", "text field", "text box"], + description: "A single-line field where users can input and edit text.", + }, { name: "radio", groups: ["inputs"], @@ -193,12 +199,6 @@ export default function AllComponentsPage() { ], description: "A multi-line field where users can input and edit text.", }, - { - name: "input", - groups: ["inputs"], - tags: ["inputs and actions", "text field", "text box"], - description: "A single-line field where users can input and edit text.", - }, { name: "footer", groups: ["structure"], diff --git a/src/routes/components/Components.tsx b/src/routes/components/Components.tsx index 5aa76058c..d55c52d08 100644 --- a/src/routes/components/Components.tsx +++ b/src/routes/components/Components.tsx @@ -23,7 +23,7 @@ export function Components() {
- + diff --git a/src/routes/content/ContentLayout.tsx b/src/routes/content/ContentLayout.tsx index 9c772cb7c..37a975518 100644 --- a/src/routes/content/ContentLayout.tsx +++ b/src/routes/content/ContentLayout.tsx @@ -1,4 +1,4 @@ -import { GoASideMenu, GoASideMenuHeading } from "@abgov/react-components"; +import { GoASideMenu, GoASideMenuHeading, GoASpacer } from "@abgov/react-components"; import { Link, Outlet } from "react-router-dom"; import "./content.css"; import { SupportInfo } from "@components/support-info/SupportInfo"; @@ -8,7 +8,7 @@ export default function ContentLayout() {
- Content + Capitalization Date format Error messages diff --git a/src/routes/design-tokens/DesignTokenLayout.tsx b/src/routes/design-tokens/DesignTokenLayout.tsx index 0e964217c..b24bd97a0 100644 --- a/src/routes/design-tokens/DesignTokenLayout.tsx +++ b/src/routes/design-tokens/DesignTokenLayout.tsx @@ -31,15 +31,14 @@ export function DesignTokenLayout() {
- Styles - + - Overview + All Border Radius Border Width Color diff --git a/src/routes/get-started/GetStartedLayout.tsx b/src/routes/get-started/GetStartedLayout.tsx index 1cff49b2a..78fe1b5b7 100644 --- a/src/routes/get-started/GetStartedLayout.tsx +++ b/src/routes/get-started/GetStartedLayout.tsx @@ -1,4 +1,4 @@ -import { GoASideMenu, GoASideMenuGroup, GoASideMenuHeading } from "@abgov/react-components"; +import { GoASideMenu, GoASideMenuGroup, GoASideMenuHeading, GoASpacer } from "@abgov/react-components"; import { Link, Outlet } from "react-router-dom"; import { SupportInfo } from "@components/support-info/SupportInfo.tsx"; @@ -7,8 +7,8 @@ export default function GetStartedLayout() {
- Get Started - Overview + + Use the design system UX Designers Overview diff --git a/src/routes/patterns/PatternsLayout.tsx b/src/routes/patterns/PatternsLayout.tsx index 0cd9adea2..22a040dea 100644 --- a/src/routes/patterns/PatternsLayout.tsx +++ b/src/routes/patterns/PatternsLayout.tsx @@ -1,4 +1,4 @@ -import { GoABlock, GoADropdown, GoADropdownItem, GoASideMenu, GoASideMenuHeading } from "@abgov/react-components"; +import { GoABlock, GoADropdown, GoADropdownItem, GoASideMenu, GoASideMenuHeading, GoASpacer } from "@abgov/react-components"; import {Link, Outlet} from "react-router-dom"; import {SupportInfo} from "@components/support-info/SupportInfo.tsx"; import {useEffect, useState} from "react"; @@ -23,11 +23,12 @@ export default function PatternsLayout() {
- Patterns - Overview + + All Simple form + Pages - + diff --git a/src/routes/root.css b/src/routes/root.css index 3eeba51a9..f7537fe4f 100644 --- a/src/routes/root.css +++ b/src/routes/root.css @@ -15,7 +15,7 @@ } .content { - max-width: 1440px; + max-width: 1360px; width: 100%; margin: 0 auto; display: flex; @@ -26,8 +26,9 @@ Side Menu ==================*/ .side-menu { - width: 224px; + width: 192px; border-right: 1px solid var(--goa-color-greyscale-200); + padding-bottom: var(--goa-space-l); } /*================== diff --git a/src/routes/root.tsx b/src/routes/root.tsx index 9a103e815..511aae68e 100644 --- a/src/routes/root.tsx +++ b/src/routes/root.tsx @@ -13,7 +13,7 @@ import "./root.css"; import { useLocation } from "react-router-dom"; -export const MAX_CONTENT_WIDTH = "1500px"; +export const MAX_CONTENT_WIDTH = "1360px"; function ScrollToTop() { const { pathname } = useLocation(); @@ -66,7 +66,7 @@ export default function Root() { Patterns Components Styles - {/*Removed until content pages added Content */} + Content Submit an issue diff --git a/src/routes/support/SupportLayout.tsx b/src/routes/support/SupportLayout.tsx index b954be9c9..1c6375f4d 100644 --- a/src/routes/support/SupportLayout.tsx +++ b/src/routes/support/SupportLayout.tsx @@ -1,4 +1,4 @@ -import {GoASideMenu, GoASideMenuHeading} from "@abgov/react-components"; +import {GoASideMenu, GoASideMenuHeading, GoASpacer} from "@abgov/react-components"; import {SupportInfo} from "@components/support-info/SupportInfo.tsx"; import {Link, Outlet, useLocation} from "react-router-dom"; import "./support.css"; @@ -9,7 +9,7 @@ export default function SupportLayout() {
- Support + Overview Contribute Drop-in hours From a6d305f610b74e433b877431c401b71424fc4ef3 Mon Sep 17 00:00:00 2001 From: Thomas Jeffery Date: Wed, 14 Aug 2024 19:07:56 -0600 Subject: [PATCH 02/22] deploy fix, remove side-menu-heading when not used --- src/routes/content/ContentLayout.tsx | 2 +- src/routes/design-tokens/DesignTokenLayout.tsx | 1 - src/routes/get-started/GetStartedLayout.tsx | 2 +- src/routes/support/SupportLayout.tsx | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/routes/content/ContentLayout.tsx b/src/routes/content/ContentLayout.tsx index 37a975518..101980582 100644 --- a/src/routes/content/ContentLayout.tsx +++ b/src/routes/content/ContentLayout.tsx @@ -1,4 +1,4 @@ -import { GoASideMenu, GoASideMenuHeading, GoASpacer } from "@abgov/react-components"; +import { GoASideMenu, GoASpacer } from "@abgov/react-components"; import { Link, Outlet } from "react-router-dom"; import "./content.css"; import { SupportInfo } from "@components/support-info/SupportInfo"; diff --git a/src/routes/design-tokens/DesignTokenLayout.tsx b/src/routes/design-tokens/DesignTokenLayout.tsx index b24bd97a0..f2bf44610 100644 --- a/src/routes/design-tokens/DesignTokenLayout.tsx +++ b/src/routes/design-tokens/DesignTokenLayout.tsx @@ -3,7 +3,6 @@ import { GoADropdown, GoADropdownItem, GoASideMenu, - GoASideMenuHeading, } from "@abgov/react-components"; import { Link, Outlet } from "react-router-dom"; import { SupportInfo } from "@components/support-info/SupportInfo"; diff --git a/src/routes/get-started/GetStartedLayout.tsx b/src/routes/get-started/GetStartedLayout.tsx index 78fe1b5b7..a2c9d0f92 100644 --- a/src/routes/get-started/GetStartedLayout.tsx +++ b/src/routes/get-started/GetStartedLayout.tsx @@ -1,4 +1,4 @@ -import { GoASideMenu, GoASideMenuGroup, GoASideMenuHeading, GoASpacer } from "@abgov/react-components"; +import { GoASideMenu, GoASideMenuGroup, GoASpacer } from "@abgov/react-components"; import { Link, Outlet } from "react-router-dom"; import { SupportInfo } from "@components/support-info/SupportInfo.tsx"; diff --git a/src/routes/support/SupportLayout.tsx b/src/routes/support/SupportLayout.tsx index 1c6375f4d..a54c0634e 100644 --- a/src/routes/support/SupportLayout.tsx +++ b/src/routes/support/SupportLayout.tsx @@ -1,4 +1,4 @@ -import {GoASideMenu, GoASideMenuHeading, GoASpacer} from "@abgov/react-components"; +import {GoASideMenu, GoASpacer} from "@abgov/react-components"; import {SupportInfo} from "@components/support-info/SupportInfo.tsx"; import {Link, Outlet, useLocation} from "react-router-dom"; import "./support.css"; From 22905b6619db8c078a04b2d8ce598ad3d5ad82e0 Mon Sep 17 00:00:00 2001 From: Thomas Jeffery <82968683+twjeffery@users.noreply.github.com> Date: Mon, 23 Sep 2024 00:03:24 -0400 Subject: [PATCH 03/22] chore: page title change in side menu --- src/routes/get-started/GetStartedLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/get-started/GetStartedLayout.tsx b/src/routes/get-started/GetStartedLayout.tsx index a2c9d0f92..df93916c1 100644 --- a/src/routes/get-started/GetStartedLayout.tsx +++ b/src/routes/get-started/GetStartedLayout.tsx @@ -8,7 +8,7 @@ export default function GetStartedLayout() {
- Use the design system + Start with the design system UX Designers Overview From 289b289b7415d5366fe15228fafbd3921d983b1b Mon Sep 17 00:00:00 2001 From: Thomas Jeffery Date: Mon, 23 Sep 2024 22:59:03 -0400 Subject: [PATCH 04/22] contribute page content update and move to new section --- .../Contribution/contribution-process.png | Bin 0 -> 190354 bytes src/App.tsx | 10 +- src/routes/components/Accordion.tsx | 12 +- src/routes/content/DateFormat.tsx | 10 +- src/routes/get-started/Contribute.tsx | 276 ++++++++++++++++++ src/routes/get-started/GetStartedLayout.tsx | 7 +- src/routes/support/Contribute.tsx | 217 -------------- src/routes/support/SupportLayout.tsx | 1 - 8 files changed, 296 insertions(+), 237 deletions(-) create mode 100644 public/images/Contribution/contribution-process.png create mode 100644 src/routes/get-started/Contribute.tsx delete mode 100644 src/routes/support/Contribute.tsx diff --git a/public/images/Contribution/contribution-process.png b/public/images/Contribution/contribution-process.png new file mode 100644 index 0000000000000000000000000000000000000000..e822ba8843a0b252a63184c8e9de166aef41458b GIT binary patch literal 190354 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

    XA?@3lf86e!R;~tMR(T`> zz3o4>d(Mm9{42Fy4?l^5=@JOU>wllRjB}IBt@Jc$qip(#xtJ@~MF`)?( zhI=59*gX&|cm<)`Y-;)Rm{!)KyRln!ncGfkUgDOowCKNEUn?=a;R0ux^hAg29-dA; zzc`O+dDwL3Pvh`7j=ga3J;wgW3GQbSO=FI&YGS1ob{!;olH|sGA51$@{b*{xxO#7w z6E}xCo20yWKIm#|_l^g>qFq1r;z(z~lV=HYb`s(ptqd~fO;=ShIuf8fmp#jTT>0Ib z#^kOp@9pkf5w?G)bpS@g5Z+vna4k#k<^+8C8^Y_|7o3oH?tkjeD_yug;(~?n|J=Cw zq`1r|C%LCl+V_s!Vit6P?!OIz0_aKj$&9J2<9u1mQ~hr0dOA=35_Kb<_rK4yJm0^O zyq-6ky))(OOCqd?97Q-`ukk40@6+ZiR)ar4@2TJF9(41a*^l z7+t-bn4d4YJkI5d%3iIE-5XzAKcPSXZuD(piF_ugU}e zO<7gZjSJXa3E4M%j*6Mv64C|t!>KuD1Jd^5KATlg&uaYZfa2Wua{Iy#vT{m-Q7_JP zlEd9NHNk}nui~8}G`Ed^#n)YCflDSeMOuOcJE;H(s5H{{VzwubE_5-Ow^C~l9z8>% z@^#Vpol8OzZ}E|rdN!@PRKDyHwrC7wdzGY9YEvFDO9qDgCmb<1`M|@?s@bVa=WPF; zisR$sQ_@~4I4H(%(cvH}!*KT1Ev07tq40cR*D7TTs#KBr+uvVCmwc656V^ z^8(NPc+}wd^8h1(frL+nU`@3c_$VZ|c;Uw@`!{Q4yPLPZb^{qt#XMTvoyz6tq>-BV0iopre(YY5(*d|JoZx+`$>^DZ-5+Y^{%Et}3}vXpS38 zd;Z=OrFOvxb8bq1a`d_QIW@5ou(sfME(wld{+Aho?nq?a0k_`4x0WJmQHPos{f|!_z*h}E)u9{u;FLM zaz07;aZS}PBRt6WGSbTSx*yn}h@AET5P2+W6P`#Iu2V|lk_h@G4I5$JvAMo$|S%otxQkU=j EAHUL3O#lD@ literal 0 HcmV?d00001 diff --git a/src/App.tsx b/src/App.tsx index 8f9745b3d..61878eda5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -14,10 +14,11 @@ import { useMediaQuery } from "@hooks/useMediaQuery"; import { DeviceWidthContext } from "@contexts/DeviceWidthContext"; import "./index.css"; +// Support + import HomePage from "@routes/home"; import SupportOverviewPage from '@routes/support/SupportOverview'; import SupportLayout from '@routes/support/SupportLayout'; -import ContributePage from '@routes/support/Contribute'; import DropInHoursPage from '@routes/support/DropInHours'; import ReleaseNotesPage from '@routes/support/ReleaseNotes.tsx'; @@ -90,6 +91,7 @@ import BugVerificationPage from "@routes/get-started/developers/BugVerification" import GetStartedLayout from "@routes/get-started/GetStartedLayout"; import GetStartedOverviewPage from "@routes/get-started/GetStartedOverview"; import QATestingOverviewPage from "@routes/get-started/qa-testing/QATestingOverview"; +import ContributePage from '@routes/get-started/Contribute'; import RoadmapPage from "@routes/get-started/Roadmap"; import SupportedBrowsersPage from "@routes/get-started/developers/SupportedBrowsers"; import UxDesignerPage from "@routes/get-started/designers/UxDesigner"; @@ -211,6 +213,9 @@ const router = createBrowserRouter( } /> + + } /> + } /> } /> @@ -237,9 +242,6 @@ const router = createBrowserRouter( }> } /> - - } /> - } /> diff --git a/src/routes/components/Accordion.tsx b/src/routes/components/Accordion.tsx index c28fbaa9e..eb45c107e 100644 --- a/src/routes/components/Accordion.tsx +++ b/src/routes/components/Accordion.tsx @@ -41,6 +41,12 @@ export default function AccordionPage() { }); const [accordionBindings, setAccordionBindings] = useState([ + { + label: "Heading", + type: "string", + name: "heading", + value: "Accordion heading", + }, { label: "Heading Size", type: "radio", @@ -48,12 +54,6 @@ export default function AccordionPage() { options: ["small", "medium"], value: "medium", }, - { - label: "Heading", - type: "string", - name: "heading", - value: "Accordion heading", - }, { label: "Secondary Text", type: "string", diff --git a/src/routes/content/DateFormat.tsx b/src/routes/content/DateFormat.tsx index 72ae739de..a59bb4bba 100644 --- a/src/routes/content/DateFormat.tsx +++ b/src/routes/content/DateFormat.tsx @@ -13,19 +13,19 @@ export default function DateFormatPage() { and structure of the date data within the date format in different scenarios. - +
    March 14, 2021
    - +

    Conversational and long-form

    @@ -38,8 +38,6 @@ export default function DateFormatPage() {

    Month date, Year (e.g., March 14, 2021) diff --git a/src/routes/get-started/Contribute.tsx b/src/routes/get-started/Contribute.tsx new file mode 100644 index 000000000..89b597ca5 --- /dev/null +++ b/src/routes/get-started/Contribute.tsx @@ -0,0 +1,276 @@ +import { GoACallout, GoAContainer, GoADetails, GoADivider, GoASpacer, GoATable, } from "@abgov/react-components"; +import { ComponentContent } from "@components/component-content/ComponentContent"; +import { CodeSnippet } from "@components/code-snippet/CodeSnippet.tsx"; +export default function ContributePage() { + return ( + +

    Contribute

    +

    + Add to the components or patterns in the design system

    +

    The design system is a shared resource for product teams to use and contribute to. We encourage everyone, regardless of their role, to help improve the design system.

    + + + Start by using what's in the design system to design and build services easier + +

    If a component or pattern doesn’t exist in production or doesn’t meet the needs of your users, talk to the design system team: +

    +

    + + Contribute + +

    + + View the full governance process in Figma + +

    + + + + +

    Did you know…

    +

    + There are open contribution files in Figma for every component and pattern in the design system, including unpublished ideas and experiments. +

    +
    + +

    Design contribution process

    + +
    +

    + If a component or pattern doesn’t exist in production or doesn’t meet the needs of your users, please contact the design system team. We’ll discuss the issue to understand it better and decide on the next steps together. +

    + +

    1. Come talk to us:

    + +

    Be prepared to:

    +
      +
    • + Describe the component or pattern and its purpose +
    • +
    • + Explain your user and service goals +
    • +
    • + Share any options and iterations that were explored with and without the Design System +
    • +
    + +

    2. Your contribution will be evaluated against the following contribution criteria:

    + +

    Contribution criteria

    +

    Proposing a component or pattern

    +

    For something to be added or changed in the design system, it needs to be:

    + + + + + Criteria + + + Description + + + + + + + Useful + + + There is evidence that this component or pattern would be useful for many teams or services. Evidence could be screenshots or links to versions of it being used in different services. + + + + + Unique + + + It does not replicate something already in the Design System. If it’s intended to replace an existing component or pattern, there is evidence to show that it’s better than the existing version. + + + + + +

    Standards for a given solution

    +

    For a new component or pattern to be published, a given solution has to be:

    + + + + + Criteria + + + Description + + + + + + + Usable + + + It creates a better and more accessible, usable, and simple experience for the user. The user has a greater understanding and useful control of what they are doing. It should be informed by research to show that it improves user experience and is responding to a user need. + + + + + Universal + + + It is inclusive and accessible. It should meet or exceed accessible standards. WCAG 2.1 AA is the minimum standard. + + + + + +

    3. Once approved, it will be added to the Design System's backlog

    +
      +
    • + When work starts, we will collaborate with you and your team to ensure the component meets your specific needs. +
    • +
    + +

    4. Contribute code to the component or pattern

    +
      +
    • + To help build or contribute code to the component or pattern in the design system, follow the code contribution process below. +
    • +
    +
    + + +
    +

    Code contribution process

    +

    In order to support all of the development frameworks that service teams use, we build and support a library of web components. Contributing entire components can be challenging and time-consuming, so we recommend and encourage smaller-scale contributions instead.

    +

    Recommended ways to contribute:

    +
      +
    • bug fixes
    • +
    • documentation updates
    • +
    • enhancements to existing components
    • +
    +
      + +
    1. Start by reaching out on the #design-system-support channel on slack to let us know you’re interested in contributing.
    2. + +
    3. Find an issue in our backlog tagged with “ready-for-contribution”. Let us know which issue(s) you’re picking up.
    4. + + + Since our repository is “public”, you'll need to use a different GitHub account than the Enterprise Managed User (EMU) account you use for your product team work. + + +

      Setup contribution environment

      +
    5. + Go to ui-components page and choose the “Fork” link in the top-right of the page +
    6. + +
    7. Create a Fork, choose an owner and a repo name
    8. +
        +
      • Make sure you're forking our repo and not directly cloning our repo
      • +
      + +
    9. Clone the newly created repo
    10. + +
    11. Open the repo’s folder in your IDE
    12. + +
    13. + Run the following commands in order: + + + + + + + + +
    14. +
    15. The commands above will create a “playground” folder containing both React and Angular environments. Since nothing in this folder is committed to the repository, you can freely make any changes you want. These environments are designed for testing purposes.
    16. + +
    17. Use the following commands to run your playground environments:
    18. + + Angular + + + React + +
    + + + +

    React and Web wrappers

    + +

    + React wrappers
    + + + Each folder represents a single component with its associated unit tests and wrapper code +

    + +

    + Web wrappers
    + + + Each folder represents a single component with: +

    +
      +
    • + Unit tests as *.spec.ts +
    • +
    • + Component code as *.ts +
    • +
    • + Documentation as doc.md  +
    • +
    + +

    Testing procedures

    +

    All unit tests must be written in Svelte.

    +
      +
    • + If you're updating/modifying React wrappers, you will need to write unit tests in + React +
    • +
    • Manually test in React and Angular
    • +
    +

    + Additionally, our QA automation developer will perform a comprehensive series of tests to + ensure the components' quality and functionality. +

    + + +

    Submitting your code

    +

    + Submit your code in a pull request to the alpha branch from your forked repository, + include the following as a title: +

    + +

    + Bug fix
    + fix(#storyNumber): short description of issue fixed (7 words max) +
    + Feature request{" "}
    + feat(#storyNumber): short description of feature (7 words max) +

    +
    + + + +

    Make sure you mark the PR as a draft.

    + + + +
    + + ); +} diff --git a/src/routes/get-started/GetStartedLayout.tsx b/src/routes/get-started/GetStartedLayout.tsx index 1cff49b2a..9915566a2 100644 --- a/src/routes/get-started/GetStartedLayout.tsx +++ b/src/routes/get-started/GetStartedLayout.tsx @@ -18,9 +18,10 @@ export default function GetStartedLayout() { Technologies Supported Browsers - QA testing - Roadmap - User experience guidelines + QA testing + Contribute + Roadmap + User experience guidelines
diff --git a/src/routes/support/Contribute.tsx b/src/routes/support/Contribute.tsx deleted file mode 100644 index 63ed208c5..000000000 --- a/src/routes/support/Contribute.tsx +++ /dev/null @@ -1,217 +0,0 @@ -import { GoABlock, GoAContainer, GoADivider } from "@abgov/react-components"; -import { ComponentContent } from "@components/component-content/ComponentContent"; - -export default function ContributePage() { - return ( - -

Contribute

-

- Contributions from product teams help improve the system.

-

The design system is a shared resource for Government of Alberta product teams to use and contribute to. - We encourage everyone, regardless of their role, to enhance the quality of the design - system.

- - - - Design - Development - - - -

Design contribution process

-
-
    -
  1. -
    - Share your idea or suggestion with us at Design System Drop-in hours{" "} - - Book a time - -
    - Be prepared to: -
      -
    • Explain your project goals
    • -
    • - Share what options and iterations were explored with and without the Design System - components -
    • -
    -
  2. -
  3. - We will evaluate the contribution against the design system contribution criteria. -
  4. {" "} -
  5. - Once approved, the item will be added to the Design System's backlog. As work commences, - we will collaborate with the team that made the request to ensure the component meets - their specific needs. -
  6. -
-

Criteria for being part of the design system

-

Useful

-

- There is evidence that this component or pattern would be useful for many teams or - services. Evidence could be screenshots or links to versions of it being used in different - services. -

-

Unique

-

- It does not replicate something already in the Design System.
- If it's intended to replace an existing component or pattern, there is evidence to show - that it's better than the existing version. -

-

Good user experience

-

- It creates a more accessible, usable, and simpler experience for the user. The user has a - greater understanding and consent to what they are doing.
- It should be informed by research to show that it improves user experience and is - responding to a user need. -

-

Universal

-

- It is inclusive and accessible.
- It should meet or exceed accessible standards.
- - WCAG 2.1 - -

-
- - -
-

Code contribution process

-

- The recommended type of code contributions to the design system are viewed as minor, such - as: -

-
    -
  • bug fixes,
  • -
  • documentation updates; or
  • -
  • enhancements to existing components.
  • -
-

- Major contributions such as new components or patterns are discouraged due to the - complexity and need for our team's involvement. -

-

How to contribute through GitHub

-

- Step one: Reach out on the design system support channel to let us know - you’re interested in contributing. -

-
    -
  1. - Find an issue in our{" "} - - backlog - -  tagged with “ready-for-contribution”. Let us know which issue(s) - you’re picking up. -
  2. -
- -

- Avoid leaving comments in the story like “I am working on this story” as our - team does not receive notifications for new comments, and we may miss your message. -

-
- Step two: Setup contribution environment -
    -
  1. - Go to ui-components page and choose the “Fork” link in the top-right of the - page -
  2. -
  3. - Create a Fork, choose an owner and a repo name -
      -
    • Make sure you're forking our repo and not directly cloning our repo
    • -
    -
  4. -
  5. Clone the newly created repo
  6. -
  7. Open the repo’s folder in your IDE
  8. -
  9. - Run the following commands in order: -
      -
    1. - npm i -
    2. -
    3. - run a bash script ./playground-setup.sh -
    4. -
    5. - npm run build -
    6. -
    -
  10. -
  11. - The commands above will create a "playground" folder containing both React and - Angular environments. Since nothing in this folder is committed to the repository, you - can freely make any changes you want. These environments are designed for testing - purposes. -
  12. -
  13. - Use the following commands to run your playground environments: -
      -
    1. - Angular: npm run dev:angular -
    2. -
    3. - React: npm run dev:react -
    4. -
    -
  14. -
-

Where to find React and Web wrappers

-

- React wrappers: /libs/react-components/src/lib. Each folder - represents a single component with its associated unit tests and wrapper code -

-

- Web wrappers: /libs/web-components/src/components. Each - folder represents a single component with: -

-
    -
  • - Unit tests as *.spec.ts -
  • -
  • - Component code as *.ts -
  • -
  • - Documentation as doc.md  -
  • -
-

Testing procedures

-

All unit tests must be written in Svelte.

-
    -
  • - If you're updating/modifying React wrappers, you will need to write unit tests in - React -
  • -
  • Manually test in React and Angular
  • -
-

- Additionally, our QA automation developer will perform a comprehensive series of tests to - ensure the components' quality and functionality. -

-

Submitting your code

-

- Submit your code in a pull request to the alpha branch from your forked repository, - include the following as a title: -

-
    -
  • - Bug fix: fix(#storyNumber): short description of issue fixed (7 words max) -
  • -
  • - Feature request:{" "} - feat(#storyNumber): short description of feature (7 words max) -
  • -
-

Make sure you mark the PR as a draft.

-
-
- ); -} diff --git a/src/routes/support/SupportLayout.tsx b/src/routes/support/SupportLayout.tsx index b954be9c9..466edcc5a 100644 --- a/src/routes/support/SupportLayout.tsx +++ b/src/routes/support/SupportLayout.tsx @@ -11,7 +11,6 @@ export default function SupportLayout() { Support Overview - Contribute Drop-in hours Release notes From 9b94dfcbd3a4b5f51eda8a36b9ab5af808320aa1 Mon Sep 17 00:00:00 2001 From: Thomas Jeffery <82968683+twjeffery@users.noreply.github.com> Date: Mon, 23 Sep 2024 23:11:13 -0400 Subject: [PATCH 05/22] chore: Figma link updated --- src/routes/get-started/Contribute.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/get-started/Contribute.tsx b/src/routes/get-started/Contribute.tsx index 89b597ca5..224584534 100644 --- a/src/routes/get-started/Contribute.tsx +++ b/src/routes/get-started/Contribute.tsx @@ -32,7 +32,7 @@ export default function ContributePage() {

Did you know…

- There are open contribution files in Figma for every component and pattern in the design system, including unpublished ideas and experiments. + There are open contribution files in Figma for every component and pattern in the design system, including unpublished ideas and experiments.

From a76aed31afcb54d622eaafa5e2501f083407c6d3 Mon Sep 17 00:00:00 2001 From: Thomas Jeffery <82968683+twjeffery@users.noreply.github.com> Date: Mon, 23 Sep 2024 23:13:47 -0400 Subject: [PATCH 06/22] chore: content update --- src/routes/get-started/Contribute.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/routes/get-started/Contribute.tsx b/src/routes/get-started/Contribute.tsx index 224584534..fb4137d34 100644 --- a/src/routes/get-started/Contribute.tsx +++ b/src/routes/get-started/Contribute.tsx @@ -65,9 +65,8 @@ export default function ContributePage() { +

Contribution criteria

2. Your contribution will be evaluated against the following contribution criteria:

- -

Contribution criteria

Proposing a component or pattern

For something to be added or changed in the design system, it needs to be:

From 930fec8b0d1f9cca46fef091dc6284f88bdad82f Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Wed, 25 Sep 2024 15:16:47 -0600 Subject: [PATCH 07/22] fix(#2055): Removed width option from TextArea sandbox --- src/routes/components/TextArea.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/routes/components/TextArea.tsx b/src/routes/components/TextArea.tsx index b28b8fa3c..8a4903f6a 100644 --- a/src/routes/components/TextArea.tsx +++ b/src/routes/components/TextArea.tsx @@ -50,12 +50,6 @@ export default function TextAreaPage() { name: "rows", type: "number", }, - { - label: "Width", - name: "width", - type: "string", - value: "60ch", - }, { label: "Placeholder", type: "string", From 91430875bc5c95cbbdc1743dbd01500d2db172d6 Mon Sep 17 00:00:00 2001 From: Ben Franck Date: Fri, 20 Sep 2024 16:26:11 -0600 Subject: [PATCH 08/22] feat(#2053): allow slotted content in microsite header version --- .../MicrositeHeaderExamples.tsx | 44 +++++++++++++++++++ src/routes/components/MicrositeHeader.tsx | 12 ++++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/examples/microsite-header/MicrositeHeaderExamples.tsx diff --git a/src/examples/microsite-header/MicrositeHeaderExamples.tsx b/src/examples/microsite-header/MicrositeHeaderExamples.tsx new file mode 100644 index 000000000..dc0ca4cdc --- /dev/null +++ b/src/examples/microsite-header/MicrositeHeaderExamples.tsx @@ -0,0 +1,44 @@ +import { GoAMicrositeHeader } from "@abgov/react-components"; +import { Sandbox } from "@components/sandbox"; +import { CodeSnippet } from "@components/code-snippet/CodeSnippet.tsx"; + +export default function MicrositeHeaderExamples () { + return ( + <> + +

Slotted version

+ + {/*Angular*/} + +
+ Slotted version text. + v1.23 +
+ + `} + /> + {/*React*/} + Slotted version text.v1.23} + > + `} + /> + Slotted version text.v1.23} + /> +
+ + ) +} \ No newline at end of file diff --git a/src/routes/components/MicrositeHeader.tsx b/src/routes/components/MicrositeHeader.tsx index 8c12ed8d8..d4b3d3c2c 100644 --- a/src/routes/components/MicrositeHeader.tsx +++ b/src/routes/components/MicrositeHeader.tsx @@ -14,6 +14,7 @@ import { import { ComponentBinding, Sandbox } from "@components/sandbox"; import { useState } from "react"; import { ComponentContent } from "@components/component-content/ComponentContent"; +import MicrositeHeaderExamples from "@examples/microsite-header/MicrositeHeaderExamples.tsx"; const componentName = "Microsite header"; const description = @@ -82,7 +83,15 @@ export default function MicrositeHeaderPage() { }, { name: "version", - type: "string", + type: "string | ReactNode", + lang: "react", + description: "Displayed on the right-hand side of the header.", + }, + { + name: "version", + type: "string | slot", + lang: "angular", + description: "Displayed on the right-hand side of the header.", }, { name: "feedbackUrl", @@ -134,6 +143,7 @@ export default function MicrositeHeaderPage() { {/*Component properties table*/} + Date: Mon, 30 Sep 2024 11:49:01 -0600 Subject: [PATCH 09/22] fix(#2161): Update Angular DatePicker sandbox code --- src/routes/components/DatePicker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/components/DatePicker.tsx b/src/routes/components/DatePicker.tsx index 985ef7180..bdcf45a77 100644 --- a/src/routes/components/DatePicker.tsx +++ b/src/routes/components/DatePicker.tsx @@ -186,7 +186,7 @@ export default function DatePickerPage() { // reactive code import { FormControl } from "@angular/forms"; export class MyComponent { - reactiveFormCtrl = new FormControl(new Date()); + itemFormCtrl = new FormControl(new Date()); } `} /> From c6ab2dddc10557c58a31c080cc9651c13604f802 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Mon, 30 Sep 2024 11:57:29 -0600 Subject: [PATCH 10/22] fix(#2166): Update Microsite Header Angular properties --- src/routes/components/MicrositeHeader.tsx | 37 +++++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/routes/components/MicrositeHeader.tsx b/src/routes/components/MicrositeHeader.tsx index b5d2a894b..424bb02c2 100644 --- a/src/routes/components/MicrositeHeader.tsx +++ b/src/routes/components/MicrositeHeader.tsx @@ -85,23 +85,54 @@ export default function MicrositeHeaderPage() { { name: "feedbackUrl", type: "string", + lang: "react", + description: "Url to feedback page that will be displayed when provided.", + }, + { + name: "feedbackurl", + type: "string", + lang: "angular", description: "Url to feedback page that will be displayed when provided.", }, { name: "maxContentWidth", type: "string", + lang: "react", + description: "Maximum width of the content area", + defaultValue: "100%", + }, + { + name: "maxcontentwidth", + type: "string", + lang: "angular", description: "Maximum width of the content area", defaultValue: "100%", }, { name: "feedbackUrlTarget", type: "self | blank", + lang: "react", + description: "For internal feedback urls sets target='_self'", + defaultValue: "blank", + }, + { + name: "feedbackurltarget", + type: "self | blank", + lang: "angular", description: "For internal feedback urls sets target='_self'", defaultValue: "blank", }, { name: "headerUrlTarget", type: "self | blank", + lang: "react", + description: "For internal header urls sets target='_self'", + defaultValue: "blank", + }, + { + name: "headerurltarget", + type: "self | blank", + lang: "angular", description: "For internal header urls sets target='_self'", defaultValue: "blank", }, @@ -114,16 +145,16 @@ export default function MicrositeHeaderPage() { "Set to true to handle the feedback click via _feedbackClick custom event handler.", }, { - name: "_feedbackClick", + name: "_feedbackclick", lang: "angular", type: "CustomEvent", - description: "_feedbackClick function invoked when feedback is clicked.", + description: "Function invoked when feedback link is clicked.", }, { name: "onFeedbackClick", lang: "react", type: "() => void", - description: "onFeedbackClick function invoked when feedback is clicked.", + description: "Function invoked when feedback link is clicked.", }, ]; From 405be85052c3b80af0ce8a67a4ada887fbcca003 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Wed, 25 Sep 2024 15:03:59 -0600 Subject: [PATCH 11/22] fix(#2069): Updated top margin on modal buttons --- src/examples/modal/ModalExamples.tsx | 6 +++--- src/routes/components/Modal.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/examples/modal/ModalExamples.tsx b/src/examples/modal/ModalExamples.tsx index b75d7e750..e2b2bf7e0 100644 --- a/src/examples/modal/ModalExamples.tsx +++ b/src/examples/modal/ModalExamples.tsx @@ -249,7 +249,7 @@ export default function ModalExamples() { open={warnCalloutModalOpen} onClose={() => setWarnCalloutModalOpen(false)} actions={ - + setWarnCalloutModalOpen(false)}> I understand @@ -284,7 +284,7 @@ export default function ModalExamples() { (_close)="toggleModal()" heading="Complete submission prior to 1PM">

You’ve selected to adjourn a matter that is required to appear today. This Calgary court location does not accept adjournment requests past 1PM MST. Please submit your adjournment request as soon as possible.

- + I understand @@ -314,7 +314,7 @@ export default function ModalExamples() { role="alertdialog" onClose={() => setOpen(false)} actions={ - + setOpen(false)}>I understand } diff --git a/src/routes/components/Modal.tsx b/src/routes/components/Modal.tsx index 323cef439..f580b62ec 100644 --- a/src/routes/components/Modal.tsx +++ b/src/routes/components/Modal.tsx @@ -263,7 +263,7 @@ export default function ModalPage() { Lorem ipsum dolor sit amet consectetur adipisicing elit. Mollitia obcaecati id molestiae, natus dicta, eaque qui iusto similique, libero explicabo eligendi eius laboriosam! Repellendus ducimus officia asperiores. Eos, eius numquam. - + setOpen(false)}> Cancel From bd3aee5e1dfef1842bb8bbf1ff884c2337316b5c Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Wed, 9 Oct 2024 17:54:53 -0600 Subject: [PATCH 12/22] fix(#2113): Updated Contribute page to better follow design guidelines --- src/routes/get-started/Contribute.tsx | 129 +++++++++++--------------- 1 file changed, 54 insertions(+), 75 deletions(-) diff --git a/src/routes/get-started/Contribute.tsx b/src/routes/get-started/Contribute.tsx index fb4137d34..d929a44df 100644 --- a/src/routes/get-started/Contribute.tsx +++ b/src/routes/get-started/Contribute.tsx @@ -12,13 +12,6 @@ export default function ContributePage() { Start by using what's in the design system to design and build services easier -

If a component or pattern doesn’t exist in production or doesn’t meet the needs of your users, talk to the design system team: -

-

- Contribute

@@ -40,11 +33,11 @@ export default function ContributePage() {

- If a component or pattern doesn’t exist in production or doesn’t meet the needs of your users, please contact the design system team. We’ll discuss the issue to understand it better and decide on the next steps together. + If a component or pattern doesn’t exist in production or doesn’t meet the needs of your users, please contact the design system team. We’ll discuss the issue to understand it better and decide on the next steps together.

1. Come talk to us:

-
    +

    Be prepared to:

    -
      +
      • Describe the component or pattern and its purpose
      • @@ -64,7 +57,6 @@ export default function ContributePage() { Share any options and iterations that were explored with and without the Design System
      -

      Contribution criteria

      2. Your contribution will be evaluated against the following contribution criteria:

      Proposing a component or pattern

      @@ -134,16 +126,15 @@ export default function ContributePage() {

      3. Once approved, it will be added to the Design System's backlog

      -
        +
        • - When work starts, we will collaborate with you and your team to ensure the component meets your specific needs. + When work starts, we will collaborate with you and your team to ensure the component meets your specific needs.
        -

        4. Contribute code to the component or pattern

        -
          +
          • - To help build or contribute code to the component or pattern in the design system, follow the code contribution process below. + To help build or contribute code to the component or pattern in the design system, follow the code contribution process below.
@@ -153,61 +144,54 @@ export default function ContributePage() {

Code contribution process

In order to support all of the development frameworks that service teams use, we build and support a library of web components. Contributing entire components can be challenging and time-consuming, so we recommend and encourage smaller-scale contributions instead.

Recommended ways to contribute:

-
    +
    • bug fixes
    • documentation updates
    • enhancements to existing components
    -
      - +
      1. Start by reaching out on the #design-system-support channel on slack to let us know you’re interested in contributing.
      2. - -
      3. Find an issue in our backlog tagged with “ready-for-contribution”. Let us know which issue(s) you’re picking up.
      4. - - - Since our repository is “public”, you'll need to use a different GitHub account than the Enterprise Managed User (EMU) account you use for your product team work. - - -

        Setup contribution environment

      5. - Go to ui-components page and choose the “Fork” link in the top-right of the page + Find an issue in our backlog tagged with “ready-for-contribution”. Let us know which issue(s) you’re picking up. + + Since our repository is “public”, you'll need to use a different GitHub account than the Enterprise Managed User (EMU) account you use for your product team work. + +
      6. +
      +

      Setup contribution environment

      +
        +
      1. + Go to ui-components page and choose the “Fork” link in the top-right of the page
      2. -
      3. Create a Fork, choose an owner and a repo name
      4. -
          +
          • Make sure you're forking our repo and not directly cloning our repo
          -
        • Clone the newly created repo
        • -
        • Open the repo’s folder in your IDE
        • -
        • Run the following commands in order: - - - - - - - - + + +
        • +
        • + Run the bash script: +
        • The commands above will create a “playground” folder containing both React and Angular environments. Since nothing in this folder is committed to the repository, you can freely make any changes you want. These environments are designed for testing purposes.
        • - -
        • Use the following commands to run your playground environments:
        • - - Angular - - - React - +
        • + Use the following commands to run your playground environments: +
          + Angular + + + React + +
      - - - +

      React and Web wrappers

      - +

      React wrappers
      @@ -221,7 +205,7 @@ export default function ContributePage() { Each folder represents a single component with:

      -
        +
        • Unit tests as *.spec.ts
        • @@ -235,7 +219,7 @@ export default function ContributePage() {

          Testing procedures

          All unit tests must be written in Svelte.

          -
            +
            • If you're updating/modifying React wrappers, you will need to write unit tests in React @@ -249,26 +233,21 @@ export default function ContributePage() {

              Submitting your code

              -

              - Submit your code in a pull request to the alpha branch from your forked repository, - include the following as a title: -

              - -

              - Bug fix
              - fix(#storyNumber): short description of issue fixed (7 words max) -
              - Feature request{" "}
              - feat(#storyNumber): short description of feature (7 words max) -

              -
              - - - -

              Make sure you mark the PR as a draft.

              - - - +
                +
              1. + Submit a commit using the following as your commit message: +
                +
                Bug Fix:
                +
                fix(#storyNumber): short description of issue fixed (7 words max)
                +
                +
                +
                Feature Request:
                +
                feat(#storyNumber): short description of feature (7 words max)
                +
                +
              2. +
              3. Create a pull request to the alpha branch from your branch
              4. +
              5. Mark the PR as a draft
              6. +
); From 08c06964109eaba37fcbe03569afc0998fc262e1 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Wed, 9 Oct 2024 18:34:39 -0600 Subject: [PATCH 13/22] fix(#2113): Removed our class for lists --- src/routes/get-started/Contribute.tsx | 40 ++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/routes/get-started/Contribute.tsx b/src/routes/get-started/Contribute.tsx index d929a44df..35ded6e5f 100644 --- a/src/routes/get-started/Contribute.tsx +++ b/src/routes/get-started/Contribute.tsx @@ -37,7 +37,7 @@ export default function ContributePage() {

1. Come talk to us:

-
    +

    Be prepared to:

    -
      +
      • Describe the component or pattern and its purpose
      • @@ -126,13 +126,13 @@ export default function ContributePage() {

        3. Once approved, it will be added to the Design System's backlog

        -
          +
          • When work starts, we will collaborate with you and your team to ensure the component meets your specific needs.

          4. Contribute code to the component or pattern

          -
            +
            • To help build or contribute code to the component or pattern in the design system, follow the code contribution process below.
            • @@ -144,12 +144,12 @@ export default function ContributePage() {

              Code contribution process

              In order to support all of the development frameworks that service teams use, we build and support a library of web components. Contributing entire components can be challenging and time-consuming, so we recommend and encourage smaller-scale contributions instead.

              Recommended ways to contribute:

              -
                +
                • bug fixes
                • documentation updates
                • enhancements to existing components
                -
                  +
                  1. Start by reaching out on the #design-system-support channel on slack to let us know you’re interested in contributing.
                  2. Find an issue in our backlog tagged with “ready-for-contribution”. Let us know which issue(s) you’re picking up. @@ -159,12 +159,12 @@ export default function ContributePage() {

                  Setup contribution environment

                  -
                    +
                    1. Go to ui-components page and choose the “Fork” link in the top-right of the page
                    2. Create a Fork, choose an owner and a repo name
                    3. -
                        +
                        • Make sure you're forking our repo and not directly cloning our repo
                      • Clone the newly created repo
                      • @@ -205,7 +205,7 @@ export default function ContributePage() { Each folder represents a single component with:

                        -
                          +
                          • Unit tests as *.spec.ts
                          • @@ -219,7 +219,7 @@ export default function ContributePage() {

                            Testing procedures

                            All unit tests must be written in Svelte.

                            -
                              +
                              • If you're updating/modifying React wrappers, you will need to write unit tests in React @@ -233,17 +233,19 @@ export default function ContributePage() {

                                Submitting your code

                                -
                                  +
                                  1. Submit a commit using the following as your commit message: -
                                    -
                                    Bug Fix:
                                    -
                                    fix(#storyNumber): short description of issue fixed (7 words max)
                                    -
                                    -
                                    -
                                    Feature Request:
                                    -
                                    feat(#storyNumber): short description of feature (7 words max)
                                    -
                                    + +
                                    +
                                    Bug Fix:
                                    +
                                    fix(#storyNumber): short description of issue fixed (7 words max)
                                    +
                                    +
                                    +
                                    Feature Request:
                                    +
                                    feat(#storyNumber): short description of feature (7 words max)
                                    +
                                    +
                                  2. Create a pull request to the alpha branch from your branch
                                  3. Mark the PR as a draft
                                  4. From 911aca34ef7634667548b4f9f0c0a267b2d9f055 Mon Sep 17 00:00:00 2001 From: "Syed.Zeeshan" Date: Wed, 9 Oct 2024 15:20:29 -0400 Subject: [PATCH 14/22] fix(#2114): docs dropdown edge case example --- src/examples/dropdown/DropdownExamples.tsx | 187 ++++++++++++++++++++- 1 file changed, 184 insertions(+), 3 deletions(-) diff --git a/src/examples/dropdown/DropdownExamples.tsx b/src/examples/dropdown/DropdownExamples.tsx index 927d75d52..cc9fa10bf 100644 --- a/src/examples/dropdown/DropdownExamples.tsx +++ b/src/examples/dropdown/DropdownExamples.tsx @@ -49,6 +49,27 @@ export const DropdownExamples = () => { setTasks([...tasks, task]); } + // ------------------------------------------------------------------ + // Parent child edge case + // ------------------------------------------------------------------ + const parents = ["All", "Big", "Small"]; + const childrenAll = ["Bus", "Elephant", "Key", "Pen", "Watch", "Truck"]; + const childrenBig = ["Elephant", "Truck", "Bus"]; + const childrenSmall = ["Key", "Pen", "Watch"]; + const [children, setChildren] = useState([]); + + const loadSchemas = (_name: string, values: string[] | string) => { + if (typeof values === "string") { + if (values === "All") setChildren(childrenAll); + else if (values === "Big") setChildren(childrenBig); + else setChildren(childrenSmall); + } + }; + + const log = () => { + console.log("Children Changed"); + }; + return ( <>
+ `} + /> + + )} ); }; From dee96014643a2918f5f75db395b6d97c3adac6c5 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Thu, 17 Oct 2024 14:23:50 -0600 Subject: [PATCH 15/22] feat(#45): Added new support page and issue form --- .env.tmpl | 3 + .github/workflows/deploy.yml | 2 + .gitignore | 3 + src/App.tsx | 21 +- src/routes/get-started/Contribute.tsx | 3 - src/routes/get-started/GetStartedLayout.tsx | 1 + src/routes/get-started/ReportBug.tsx | 250 ++++++++++++++++++++ src/routes/get-started/RequestFeature.tsx | 36 +++ src/routes/get-started/Support.tsx | 114 +++++++++ src/routes/root.css | 24 ++ src/routes/root.tsx | 2 - src/routes/support/DropInHours.tsx | 27 --- src/routes/support/ReleaseNotes.tsx | 18 -- src/routes/support/SupportLayout.tsx | 25 -- src/routes/support/SupportOverview.tsx | 111 --------- src/routes/support/support.css | 20 -- 16 files changed, 443 insertions(+), 217 deletions(-) create mode 100644 .env.tmpl create mode 100644 src/routes/get-started/ReportBug.tsx create mode 100644 src/routes/get-started/RequestFeature.tsx create mode 100644 src/routes/get-started/Support.tsx delete mode 100644 src/routes/support/DropInHours.tsx delete mode 100644 src/routes/support/ReleaseNotes.tsx delete mode 100644 src/routes/support/SupportLayout.tsx delete mode 100644 src/routes/support/SupportOverview.tsx delete mode 100644 src/routes/support/support.css diff --git a/.env.tmpl b/.env.tmpl new file mode 100644 index 000000000..09d811d26 --- /dev/null +++ b/.env.tmpl @@ -0,0 +1,3 @@ +# Get your own token to use here https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs#example-usage-of-the-vars-context +# Except use tokens (classic) and not fine-grained +VITE_AUTH_TOKEN="" \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b059d7d6a..04ce2c4df 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,6 +25,8 @@ jobs: key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - run: npm ci - name: Build + env: + VITE_AUTH_TOKEN: ${{ secrets.VITE_AUTH_TOKEN }} run: | npm run build cp nginx.conf dist/ diff --git a/.gitignore b/.gitignore index a852427b5..4a6821ce9 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ devenv.local.nix # direnv .direnv +# env +*.env + # pre-commit .pre-commit-config.yaml diff --git a/src/App.tsx b/src/App.tsx index c257a294d..59913c180 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,10 +17,6 @@ import "./index.css"; // Support import HomePage from "@routes/home"; -import SupportOverviewPage from '@routes/support/SupportOverview'; -import SupportLayout from '@routes/support/SupportLayout'; -import DropInHoursPage from '@routes/support/DropInHours'; -import ReleaseNotesPage from '@routes/support/ReleaseNotes.tsx'; // Components @@ -92,11 +88,15 @@ import GetStartedLayout from "@routes/get-started/GetStartedLayout"; import GetStartedOverviewPage from "@routes/get-started/GetStartedOverview"; import QATestingOverviewPage from "@routes/get-started/qa-testing/QATestingOverview"; import ContributePage from '@routes/get-started/Contribute'; +import SupportPage from '@routes/get-started/Support'; +import RequestFeaturePage from "@routes/get-started/RequestFeature"; +import ReportBugPage from "@routes/get-started/ReportBug"; import RoadmapPage from "@routes/get-started/Roadmap"; import SupportedBrowsersPage from "@routes/get-started/developers/SupportedBrowsers"; import UxDesignerPage from "@routes/get-started/designers/UxDesigner"; // Content Pages + import ContentLayout from '@routes/content/ContentLayout'; import CapitalizationPage from '@routes/content/Capitalization'; import DateFormatPage from '@routes/content/DateFormat'; @@ -105,6 +105,7 @@ import HelperTextPage from '@routes/content/HelperText'; import UserExperienceGuidelinesPage from "@routes/get-started/UserExperienceGuidelines"; // Patterns Pages + import PatternsLayout from "@routes/patterns/PatternsLayout"; import LayoutPage from "@routes/patterns/LayoutPage"; import PatternsOverviewPage from "@routes/patterns/PatternsOverview"; @@ -216,6 +217,11 @@ const router = createBrowserRouter( } /> + + } /> + } /> + } /> + } /> } /> @@ -240,13 +246,6 @@ const router = createBrowserRouter( } /> } /> - }> - } /> - - } /> - - } /> - ) ); diff --git a/src/routes/get-started/Contribute.tsx b/src/routes/get-started/Contribute.tsx index 35ded6e5f..a8983f6c1 100644 --- a/src/routes/get-started/Contribute.tsx +++ b/src/routes/get-started/Contribute.tsx @@ -41,9 +41,6 @@ export default function ContributePage() {
  • #design-system-support on slack
  • -
  • - Design system Drop-in hours -
  • Be prepared to:

      diff --git a/src/routes/get-started/GetStartedLayout.tsx b/src/routes/get-started/GetStartedLayout.tsx index 71ed9389b..f63a25d9c 100644 --- a/src/routes/get-started/GetStartedLayout.tsx +++ b/src/routes/get-started/GetStartedLayout.tsx @@ -20,6 +20,7 @@ export default function GetStartedLayout() { QA testing Contribute + Support Roadmap User experience guidelines diff --git a/src/routes/get-started/ReportBug.tsx b/src/routes/get-started/ReportBug.tsx new file mode 100644 index 000000000..6dcb087ba --- /dev/null +++ b/src/routes/get-started/ReportBug.tsx @@ -0,0 +1,250 @@ +import { + GoABlock, + GoAButton, + GoACallout, + GoADetails, + GoAFormItem, + GoAInput, + GoARadioItem, + GoARadioGroup, + GoATextArea +} from "@abgov/react-components"; +import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; +import { useState } from "react"; +import { Octokit } from "octokit"; +import { useNavigate } from "react-router-dom"; + +export default function ReportBugPage() { + let navigate = useNavigate(); + + const [formValues, setFormValues] = useState({ + email: "", + webVersion: "", + otherVersion: "", + expected: "", + actual: "", + replication: "", + stackblitz: "", + jam: "", + additional: "" + }) + + const [emailError, setEmailError] = useState(); + const [webVersionError, setWebVersionError] = useState(); + const [otherVersionError, setOtherVersionError] = useState(); + const [expectedError, setExpectedError] = useState(); + const [actualError, setActualError] = useState(); + const [replicationError, setReplicationError] = useState(); + const [valid, setValid] = useState(true); + const [responseURL, setResponseURL] = useState(""); + const [formSubmitted, setFormSubmitted] = useState(false); + const [issueSelection, setIssueSelection] = useState("") + + function bugOrFeature(name: string, value: string) { + setIssueSelection(value); + } + + function openPage() { + setFormSubmitted(false); + setFormValues({ + email: "", + webVersion: "", + otherVersion: "", + expected: "", + actual: "", + replication: "", + stackblitz: "", + jam: "", + additional: "" + }) + + if (issueSelection === "bug") { + navigate("/get-started/support/report-bug"); + } else { + navigate("/get-started/support/request-feature"); + } + } + + const handleChange = (name: string, value: string[] | string | null) => { + setFormValues({ + ...formValues, + [name]: value + }) + } + + async function submitBug() { + if (validateInputs()) { + const octokit = new Octokit({ + auth: import.meta.env.VITE_AUTH_TOKEN + }) + + let body = "Issue reported by: " + formValues.email + "@gov.ab.ca\n" + + "Web component version: " + formValues.webVersion + "\n" + + "Angular/React version: " + formValues.otherVersion + "\n\n" + + "## Expected Behaviour\n\n" + + formValues.expected + "\n\n" + + "## Actual Behaviour\n\n" + + formValues.actual + "\n\n" + + "## Replication Steps\n\n" + + formValues.replication; + + if (formValues.stackblitz.length !== 0) { + body += "\n\n[Stackblitz URL](" + formValues.stackblitz + ")"; + } + if (formValues.jam.length !== 0) { + body += "\n\n[JamDev URL](" + formValues.jam + ")" + } + if (formValues.additional.length !== 0) { + body += "\n\n## Additional Info\n\n" + + formValues.additional + } + + const response = await octokit.request("POST /repos/GovAlta/ui-components/issues", { + owner: "GovAlta", + repo: "ui-components", + title: "Reported Bug", + body: body, + labels: [ + "bug" + ], + headers: { + "X-Github-Api-Version": "2022-11-28" + } + }) + setResponseURL(response.data.html_url); + + setFormSubmitted(true); + } + } + + function validateInputs() { + setValid(true); + + if (formValues.email.length == 0) { + setValid(false); + setEmailError("An email address is required"); + } else { + setEmailError(undefined); + } + + if (formValues.webVersion.length == 0) { + setValid(false); + setWebVersionError("We require the version of web components you are using"); + } else { + setWebVersionError(undefined); + } + + if (formValues.otherVersion.length == 0) { + setValid(false); + setOtherVersionError("We require the version of wrapper components you are using"); + } else { + setOtherVersionError(undefined); + } + + if (formValues.expected.length == 0) { + setValid(false); + setExpectedError("We need to know what the expected behaviour is"); + } else { + setExpectedError(undefined); + } + + if (formValues.actual.length == 0) { + setValid(false); + setActualError("We need to know what the actual behaviour is"); + } else { + setActualError(undefined); + } + + if (formValues.replication.length == 0) { + setValid(false); + setReplicationError("We need to know the replication steps for the issue"); + } else { + setReplicationError(undefined); + } + + return valid; + } + + if (!formSubmitted) { + return ( + + Back +

      Report a bug

      +

      + Let us know if you find a problem or inconsistency in the design system. Providing complete details in your bug report + helps our team understand, prioritize, and fix the issue faster. +

      + +
        +
      • Web Components - 1.27.0
      • +
      • Angular Components - 3.2.0
      • +
      • React Components - 5.2.0
      • +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + The design system team uses StackBlitz to create and share live code + examples. It allows us to easily see your code in an environment that is unaffected by the rest of your project. Create a free + account and share your work directly with the team. + + + + + + The design system team uses jam.dev to share and report bugs. This gives us + a lot of the information we need to understand what's happening and how to fix it. Create a free account and record and share + the issue. + + + + + Submit bug +
      + ); + } else { + return ( + + Back +

      Issue Submitted

      + + View your issue in the design system backlog. + +

      What happens next

      +
        +
      1. The design system team will review the issue in the next backlog grooming
      2. +
      3. Subscribe to your issue in Github to get notified of any updates
      4. +
      +

      Create another issue

      + + + + +
      + Raise an issue +
      + ); + } +} + \ No newline at end of file diff --git a/src/routes/get-started/RequestFeature.tsx b/src/routes/get-started/RequestFeature.tsx new file mode 100644 index 000000000..1617d9e6f --- /dev/null +++ b/src/routes/get-started/RequestFeature.tsx @@ -0,0 +1,36 @@ +import { GoASpacer } from "@abgov/react-components"; +import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; + +export default function RequestFeaturePage() { + return ( + + Back +

      Request a new feature

      +

      Anyone can propose a new component or pattern for the design system.

      + +

      1. Check the design system backlog on Github

      +

      + First, check the design system backlog to see if someone else has already identified a similar need or idea.

      + +

      2. Talk to us

      +

      + If a component or pattern doesn't exist in production or doesn't meet the needs of your users, contact the design + system team. We'll discuss the issue to understand it better and decide on the next steps together. +

      + +

      Get in touch with the design system team:

      +

      + Book time with us in Design system Drop-in hours +

      +

      Be prepared to:

      +
        +
      • Describe the component or pattern and its purpose
      • +
      • Explain your user and service goals
      • +
      • Share any options and iterations that were explored with and without the Design System
      • +
      + + View our contribution process +
      + ); +} + \ No newline at end of file diff --git a/src/routes/get-started/Support.tsx b/src/routes/get-started/Support.tsx new file mode 100644 index 000000000..556a52f0b --- /dev/null +++ b/src/routes/get-started/Support.tsx @@ -0,0 +1,114 @@ +import { + GoABlock, + GoAButton, + GoADivider, + GoARadioGroup, + GoARadioItem +} from "@abgov/react-components"; +import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; +import { useState } from "react"; +import { useNavigate } from "react-router-dom"; + +export default function SupportPage() { + let navigate = useNavigate(); + + const [issueSelection, setIssueSelection] = useState("") + + function bugOrFeature(name: string, value: string) { + setIssueSelection(value); + } + + function openPage() { + if (issueSelection === "bug") { + navigate("/get-started/support/report-bug"); + } else { + navigate("/get-started/support/request-feature"); + } + } + + return ( + +

      Support

      +

      + Get help from our team with using the design system, including components, guidelines, best practices, and accessibility. +

      + +
      +

      + Raise an issue +

      +

      + Let us know if you find a problem in the design system or if you need a new component or pattern. +

      +

      What would you like to do?

      + + + + +
      + Raise an issue +

      Talk to us

      +

      Slack

      +

      + #design-system-support +
      + Reach out to the design system directly to ask a question and get support. +

      +

      + #figma +
      + A place for any Figma discussion. Share tips, tricks, techniques, ask questions, report issues. +

      + +

      Drop in Hours

      + (every Friday 1:00 - 3:00pm MST) +
      +

      + For service teams to get feedback on their usage of the design system, propose new components or changes + to existing components, ask any questions, and give feedback to the design system. +
      + Book a time +

      + + + +

      Design system team

      +

      Product Owner

      +

      + Mark Elamatha | mark.elamatha@gov.ab.ca +

      + +

      Digital architect and scrum master

      +

      + Dustin Nielsen | dustin.nielsen@gov.ab.ca +

      + +

      Developers

      +

      + Chris Olsen | chris.olsen@gov.ab.ca +
      + Vanessa Tran | vanessa.m.tran@gov.ab.ca +
      + Syed Zeeshan | syed.zeeshan@gov.ab.ca +

      + +

      QA Automation Developer

      +

      + Ken Li | ken.li@gov.ab.ca +

      + +

      Service designer

      +

      + Ali Nicholls Asikinack | ali.nicholls-asikinack@gov.ab.ca +

      + +

      UX designers

      +

      + Thomas Jeffery | thomas.jeffery@gov.ab.ca +
      + Rianna Alizadeh | rianna.alizadeh@gov.ab.ca +

      +
      +
      + ); +} diff --git a/src/routes/root.css b/src/routes/root.css index f7537fe4f..2b00ccfef 100644 --- a/src/routes/root.css +++ b/src/routes/root.css @@ -62,6 +62,30 @@ p.small { color: var(--goa-color-text-secondary); } +span.grey-text { + font: var(--goa-typography-body-m); + color: var(--goa-color-greyscale-700); +} + +a.back { + display: inline-block; + margin-top: var(--goa-space-xl); +} + +a.back::before { + content: ""; + display: inline-block; + width: 28px; + height: 22px; + vertical-align: middle; + background: url('data:image/svg+xml,') left center no-repeat; +} + +a.back:visited::before, +a.back:hover::before { + background: url('data:image/svg+xml,') left center no-repeat; +} + .support-info { max-width: 700px; } diff --git a/src/routes/root.tsx b/src/routes/root.tsx index cbe9a95af..f3dcc3e52 100644 --- a/src/routes/root.tsx +++ b/src/routes/root.tsx @@ -50,7 +50,6 @@ export default function Root() { Components Styles Content - Support Report a bug @@ -71,7 +70,6 @@ export default function Root() { Submit an issue #design-system-support - Drop-in hours Contribute to the design system diff --git a/src/routes/support/DropInHours.tsx b/src/routes/support/DropInHours.tsx deleted file mode 100644 index 8afa38674..000000000 --- a/src/routes/support/DropInHours.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; - -export default function DropInHoursPage() { - return ( - -

      Drop in hours

      -

      - - Book a time - -

      - -
      -

      Every Tuesday and Friday from 1:00pm - 3:00pm MST

      -

      Purpose

      -

      - For designers and developers on Government of Alberta product teams seeking feedback on their usage of design system, content, styles, and anything else. This is also a great time to propose new components or changes to existing components, ask any questions, and give feedback to the design system. -

      -

      Audience

      -

      - Drop in hours are for intended for designers and developers from all Government of Alberta product teams. -

      - -
      -
      - ); -} diff --git a/src/routes/support/ReleaseNotes.tsx b/src/routes/support/ReleaseNotes.tsx deleted file mode 100644 index ecbb12c5c..000000000 --- a/src/routes/support/ReleaseNotes.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { ComponentContent } from "@components/component-content/ComponentContent"; - -export default function ReleaseNotesPage() { - return ( - -

      Release notes

      -

      - Design system release notes are official documentation that accompany a new version or - update of a design system. These notes provide a comprehensive overview of the changes made, - including new features, modifications to existing components, bug fixes, and deprecated - elements. -

      - - View our release notes on GitHub - -
      - ); -} diff --git a/src/routes/support/SupportLayout.tsx b/src/routes/support/SupportLayout.tsx deleted file mode 100644 index 49c713c03..000000000 --- a/src/routes/support/SupportLayout.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import {GoASideMenu, GoASpacer} from "@abgov/react-components"; -import {SupportInfo} from "@components/support-info/SupportInfo.tsx"; -import {Link, Outlet, useLocation} from "react-router-dom"; -import "./support.css"; - -export default function SupportLayout() { - const location = useLocation(); - return ( -
      -
      - - - Overview - Drop-in hours - Release notes - -
      - -
      - -
      -
      - ); -} diff --git a/src/routes/support/SupportOverview.tsx b/src/routes/support/SupportOverview.tsx deleted file mode 100644 index 9fd7f0f18..000000000 --- a/src/routes/support/SupportOverview.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { - GoABlock, - GoASpacer, - GoADivider, - GoABadge, -} from "@abgov/react-components"; -import { Link } from "react-router-dom"; -import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; - -export default function SupportOverviewPage() { - return ( - -

      Support

      -

      - Get support building government services. The design system team can help Government of Alberta product teams use the components, patterns, documentation, and more. -

      - -
      -

      - Drop in hours -

      - -

      (every Tuesday and Friday 1:00 - 3:00pm MST)

      -

      - For designers and developers to get feedback on their usage of the design system, propose new components or changes to existing components, ask any questions, and give feedback to the design system. -

      - - Learn more about Drop in hours - - Book a time (GoA email required) - - -

      Submit an issue

      -

      Report a bug

      - -

      - If an issue or inconsistency is encountered within the design system, please use GitHub to - report a bug. Doing so notifies the design system team of a problem requiring immediate - attention and resolution. Ensure that the bug report is fully filled out; this ensures - that the team has all the necessary information to investigate, prioritize, and fix the - issue effectively.
      - - Report a bug on Github - -

      - -

      Request a feature

      - -

      - Use GitHub to submit well-defined requests for new features. Submitting a feature request - implies that the contribution process has been followed, providing the design system team - with actionable items to evaluate and prioritize. - - - Request a feature on Github - - View our contribution process - -

      - - - -

      Design system team

      -
      Product Owner
      -
      - Mark Elamatha | mark.elamatha@gov.ab.ca -
      - -
      Digital architect and scrum master
      -
      - Dustin Nielsen | dustin.nielsen@gov.ab.ca -
      - -
      Developers
      -
      - Chris Olsen | chris.olsen@gov.ab.ca -
      -
      - Vanessa Tran | vanessa.m.tran@gov.ab.ca -
      -
      - Syed Zeeshan | syed.zeeshan@gov.ab.ca -
      - -
      Service designer
      -
      - Ali Nicholls Asikinack |{" "} - ali.nicholls-asikinack@gov.ab.ca -
      - -
      UX designers
      -
      - Thomas Jeffery | thomas.jeffery@gov.ab.ca -
      -
      - Rianna Alizadeh |{" "} - rianna.alizadeh@gov.ab.ca -
      - -
      QA
      -
      - Ken Li |{" "} - ken.li@gov.ab.ca -
      - -
      -
      - ); -} diff --git a/src/routes/support/support.css b/src/routes/support/support.css deleted file mode 100644 index 9205eb345..000000000 --- a/src/routes/support/support.css +++ /dev/null @@ -1,20 +0,0 @@ -.support-overview-drop-in-hours-heading>span { - font-size: var(--goa-font-size-4); - color: var(--goa-color-text-secondary); -} - -.ds-team-title { - font: var(--goa-typography-heading-m); - margin-bottom: var(--goa-space-xs); - margin-top: var(--goa-space-xl); -} - -.share-ideas { - padding-bottom: var(--goa-space-s); -} - -br { - display: block; - content: ""; - margin-bottom: var(--goa-space-xs); -} From 13184fa3fff96d4313b5acfdf67d664a41c12c63 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Mon, 21 Oct 2024 12:44:27 -0600 Subject: [PATCH 16/22] feat(#45): Updated the package.json for the new requirements --- package-lock.json | 362 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 362 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index d762e0ab8..a6e2a6cdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@abgov/web-components": "1.27.0", "@faker-js/faker": "^8.3.1", "highlight.js": "^11.8.0", + "octokit": "^4.0.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.13.0" @@ -649,6 +650,321 @@ "node": ">= 8" } }, + "node_modules/@octokit/app": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-15.1.0.tgz", + "integrity": "sha512-TkBr7QgOmE6ORxvIAhDbZsqPkF7RSqTY4pLTtUQCvr6dTXqvi2fFo46q3h1lxlk/sGMQjqyZ0kEahkD/NyzOHg==", + "dependencies": { + "@octokit/auth-app": "^7.0.0", + "@octokit/auth-unauthenticated": "^6.0.0", + "@octokit/core": "^6.1.2", + "@octokit/oauth-app": "^7.0.0", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/types": "^13.0.0", + "@octokit/webhooks": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-app": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-7.1.1.tgz", + "integrity": "sha512-kRAd6yelV9OgvlEJE88H0VLlQdZcag9UlLr7dV0YYP37X8PPDvhgiTy66QVhDXdyoT0AleFN2w/qXkPdrSzINg==", + "dependencies": { + "@octokit/auth-oauth-app": "^8.1.0", + "@octokit/auth-oauth-user": "^5.1.0", + "@octokit/request": "^9.1.1", + "@octokit/request-error": "^6.1.1", + "@octokit/types": "^13.4.1", + "lru-cache": "^10.0.0", + "universal-github-app-jwt": "^2.2.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.1.tgz", + "integrity": "sha512-5UtmxXAvU2wfcHIPPDWzVSAWXVJzG3NWsxb7zCFplCWEmMCArSZV0UQu5jw5goLQXbFyOr5onzEH37UJB3zQQg==", + "dependencies": { + "@octokit/auth-oauth-device": "^7.0.0", + "@octokit/auth-oauth-user": "^5.0.1", + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.1.tgz", + "integrity": "sha512-HWl8lYueHonuyjrKKIup/1tiy0xcmQCdq5ikvMO1YwkNNkxb6DXfrPjrMYItNLyCP/o2H87WuijuE+SlBTT8eg==", + "dependencies": { + "@octokit/oauth-methods": "^5.0.0", + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.1.tgz", + "integrity": "sha512-rRkMz0ErOppdvEfnemHJXgZ9vTPhBuC6yASeFaB7I2yLMd7QpjfrL1mnvRPlyKo+M6eeLxrKanXJ9Qte29SRsw==", + "dependencies": { + "@octokit/auth-oauth-device": "^7.0.1", + "@octokit/oauth-methods": "^5.0.0", + "@octokit/request": "^9.0.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.0.tgz", + "integrity": "sha512-zPSmfrUAcspZH/lOFQnVnvjQZsIvmfApQH6GzJrkIunDooU1Su2qt2FfMTSVPRp7WLTQyC20Kd55lF+mIYaohQ==", + "dependencies": { + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", + "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", + "dependencies": { + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/endpoint": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "dependencies": { + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/graphql": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "dependencies": { + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/oauth-app": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-7.1.3.tgz", + "integrity": "sha512-EHXbOpBkSGVVGF1W+NLMmsnSsJRkcrnVmDKt0TQYRBb6xWfWzoi9sBD4DIqZ8jGhOWO/V8t4fqFyJ4vDQDn9bg==", + "dependencies": { + "@octokit/auth-oauth-app": "^8.0.0", + "@octokit/auth-oauth-user": "^5.0.1", + "@octokit/auth-unauthenticated": "^6.0.0-beta.1", + "@octokit/core": "^6.0.0", + "@octokit/oauth-authorization-url": "^7.0.0", + "@octokit/oauth-methods": "^5.0.0", + "@types/aws-lambda": "^8.10.83", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz", + "integrity": "sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA==", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/oauth-methods": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-5.1.2.tgz", + "integrity": "sha512-C5lglRD+sBlbrhCUTxgJAFjWgJlmTx5bQ7Ch0+2uqRjYv7Cfb5xpX4WuSC9UgQna3sqRGBL9EImX9PvTpMaQ7g==", + "dependencies": { + "@octokit/oauth-authorization-url": "^7.0.0", + "@octokit/request": "^9.1.0", + "@octokit/request-error": "^6.1.0", + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" + }, + "node_modules/@octokit/openapi-webhooks-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-8.3.0.tgz", + "integrity": "sha512-vKLsoR4xQxg4Z+6rU/F65ItTUz/EXbD+j/d4mlq2GW8TsA4Tc8Kdma2JTAAJ5hrKWUQzkR/Esn2fjsqiVRYaQg==" + }, + "node_modules/@octokit/plugin-paginate-graphql": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.4.tgz", + "integrity": "sha512-pLZES1jWaOynXKHOqdnwZ5ULeVR6tVVCMm+AUbp0htdcyXDU95WbkYdU4R2ej1wKj5Tu94Mee2Ne0PjPO9cCyA==", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz", + "integrity": "sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==", + "dependencies": { + "@octokit/types": "^13.6.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.6", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.6.tgz", + "integrity": "sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==", + "dependencies": { + "@octokit/types": "^13.6.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.2.tgz", + "integrity": "sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ==", + "dependencies": { + "@octokit/request-error": "^6.0.0", + "@octokit/types": "^13.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.3.2.tgz", + "integrity": "sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==", + "dependencies": { + "@octokit/types": "^13.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^6.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz", + "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==", + "dependencies": { + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request-error": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz", + "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==", + "dependencies": { + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/types": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz", + "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", + "dependencies": { + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-13.3.0.tgz", + "integrity": "sha512-TUkJLtI163Bz5+JK0O+zDkQpn4gKwN+BovclUvCj6pI/6RXrFqQvUMRS2M+Rt8Rv0qR3wjoMoOPmpJKeOh0nBg==", + "dependencies": { + "@octokit/openapi-webhooks-types": "8.3.0", + "@octokit/request-error": "^6.0.1", + "@octokit/webhooks-methods": "^5.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-5.1.0.tgz", + "integrity": "sha512-yFZa3UH11VIxYnnoOYCVoJ3q4ChuSOk2IVBBQ0O3xtKX4x9bmKb/1t+Mxixv2iUhzMdOl1qeWJqEhouXXzB3rQ==", + "engines": { + "node": ">= 18" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1111,6 +1427,11 @@ "@swc/counter": "^0.1.3" } }, + "node_modules/@types/aws-lambda": { + "version": "8.10.145", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.145.tgz", + "integrity": "sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==" + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -1486,6 +1807,16 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/before-after-hook": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==" + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2440,7 +2771,6 @@ "version": "10.2.2", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "peer": true, "engines": { "node": "14 || >=16.14" } @@ -2537,6 +2867,26 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/octokit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-4.0.2.tgz", + "integrity": "sha512-wbqF4uc1YbcldtiBFfkSnquHtECEIpYD78YUXI6ri1Im5OO2NLo6ZVpRdbJpdnpZ05zMrVPssNiEo6JQtea+Qg==", + "dependencies": { + "@octokit/app": "^15.0.0", + "@octokit/core": "^6.0.0", + "@octokit/oauth-app": "^7.0.0", + "@octokit/plugin-paginate-graphql": "^5.0.0", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-rest-endpoint-methods": "^13.0.0", + "@octokit/plugin-retry": "^7.0.0", + "@octokit/plugin-throttling": "^9.0.0", + "@octokit/request-error": "^6.0.0", + "@octokit/types": "^13.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3234,6 +3584,16 @@ "node": ">=14.17" } }, + "node_modules/universal-github-app-jwt": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz", + "integrity": "sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ==" + }, + "node_modules/universal-user-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index d9902afe7..f0b0adf9a 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@abgov/web-components": "1.27.0", "@faker-js/faker": "^8.3.1", "highlight.js": "^11.8.0", + "octokit": "^4.0.2", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.13.0" From 51a99269dfb84bfbf4ae9b063f75a9d1ae45d294 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Mon, 21 Oct 2024 13:14:51 -0600 Subject: [PATCH 17/22] feat(#45): Changed function arguments --- src/routes/get-started/ReportBug.tsx | 2 +- src/routes/get-started/Support.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/get-started/ReportBug.tsx b/src/routes/get-started/ReportBug.tsx index 6dcb087ba..346e37bde 100644 --- a/src/routes/get-started/ReportBug.tsx +++ b/src/routes/get-started/ReportBug.tsx @@ -40,7 +40,7 @@ export default function ReportBugPage() { const [formSubmitted, setFormSubmitted] = useState(false); const [issueSelection, setIssueSelection] = useState("") - function bugOrFeature(name: string, value: string) { + function bugOrFeature(_: string, value: string) { setIssueSelection(value); } diff --git a/src/routes/get-started/Support.tsx b/src/routes/get-started/Support.tsx index 556a52f0b..67b1118e1 100644 --- a/src/routes/get-started/Support.tsx +++ b/src/routes/get-started/Support.tsx @@ -14,7 +14,7 @@ export default function SupportPage() { const [issueSelection, setIssueSelection] = useState("") - function bugOrFeature(name: string, value: string) { + function bugOrFeature(_: string, value: string) { setIssueSelection(value); } From 18aba14bb1cfab609f7d6a6d15f3cfe17d261450 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Mon, 28 Oct 2024 14:42:04 -0600 Subject: [PATCH 18/22] feat(#45): Updated form components --- src/routes/get-started/ReportBug.tsx | 49 +++++++++++++------- src/routes/get-started/RequestFeature.tsx | 3 +- src/routes/get-started/Support.tsx | 54 +++++++++++------------ src/routes/root.css | 8 ++++ src/routes/root.tsx | 3 -- 5 files changed, 67 insertions(+), 50 deletions(-) diff --git a/src/routes/get-started/ReportBug.tsx b/src/routes/get-started/ReportBug.tsx index 346e37bde..66358c2ea 100644 --- a/src/routes/get-started/ReportBug.tsx +++ b/src/routes/get-started/ReportBug.tsx @@ -35,7 +35,8 @@ export default function ReportBugPage() { const [expectedError, setExpectedError] = useState(); const [actualError, setActualError] = useState(); const [replicationError, setReplicationError] = useState(); - const [valid, setValid] = useState(true); + const [stackblitzError, setStackblitzError] = useState(); + const [jamError, setJamError] = useState(); const [responseURL, setResponseURL] = useState(""); const [formSubmitted, setFormSubmitted] = useState(false); const [issueSelection, setIssueSelection] = useState("") @@ -118,50 +119,64 @@ export default function ReportBugPage() { } function validateInputs() { - setValid(true); + let valid = true; if (formValues.email.length == 0) { - setValid(false); + valid = false; setEmailError("An email address is required"); } else { setEmailError(undefined); } if (formValues.webVersion.length == 0) { - setValid(false); + valid = false; setWebVersionError("We require the version of web components you are using"); } else { setWebVersionError(undefined); } if (formValues.otherVersion.length == 0) { - setValid(false); + valid = false; setOtherVersionError("We require the version of wrapper components you are using"); } else { setOtherVersionError(undefined); } if (formValues.expected.length == 0) { - setValid(false); + valid = false; setExpectedError("We need to know what the expected behaviour is"); } else { setExpectedError(undefined); } if (formValues.actual.length == 0) { - setValid(false); + valid = false; setActualError("We need to know what the actual behaviour is"); } else { setActualError(undefined); } if (formValues.replication.length == 0) { - setValid(false); + valid = false; setReplicationError("We need to know the replication steps for the issue"); } else { setReplicationError(undefined); } + if (formValues.stackblitz.length !== 0 && !/^https:\/\/stackblitz\.com\/[-a-zA-Z0-9%\+.?\/[\],=]*/.test(formValues.stackblitz)) { + valid = false; + setStackblitzError("The URL needs to be to Stackblitz"); + } else { + setStackblitzError(undefined); + } + + if (formValues.jam.length !== 0 && !/^https:\/\/jam\.dev\/([-a-z0-9[\-\/]*)/.test(formValues.jam)) { + valid = false; + setJamError("The URL needs to be to jam.dev") + } else { + setJamError(undefined); + } + return valid; } @@ -174,7 +189,7 @@ export default function ReportBugPage() { Let us know if you find a problem or inconsistency in the design system. Providing complete details in your bug report helps our team understand, prioritize, and fix the issue faster. - +
      • Web Components - 1.27.0
      • Angular Components - 3.2.0
      • @@ -182,7 +197,7 @@ export default function ReportBugPage() {
      - + @@ -201,23 +216,23 @@ export default function ReportBugPage() { - - + + - + The design system team uses StackBlitz to create and share live code examples. It allows us to easily see your code in an environment that is unaffected by the rest of your project. Create a free account and share your work directly with the team. - - + + - + The design system team uses jam.dev to share and report bugs. This gives us a lot of the information we need to understand what's happening and how to fix it. Create a free account and record and share the issue. - + Submit bug diff --git a/src/routes/get-started/RequestFeature.tsx b/src/routes/get-started/RequestFeature.tsx index 1617d9e6f..af04bea19 100644 --- a/src/routes/get-started/RequestFeature.tsx +++ b/src/routes/get-started/RequestFeature.tsx @@ -1,5 +1,6 @@ import { GoASpacer } from "@abgov/react-components"; import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; +import { Link } from "react-router-dom"; export default function RequestFeaturePage() { return ( @@ -29,7 +30,7 @@ export default function RequestFeaturePage() {
    • Share any options and iterations that were explored with and without the Design System
    - View our contribution process + View our contribution process ); } diff --git a/src/routes/get-started/Support.tsx b/src/routes/get-started/Support.tsx index 67b1118e1..9c089c5f6 100644 --- a/src/routes/get-started/Support.tsx +++ b/src/routes/get-started/Support.tsx @@ -1,9 +1,10 @@ import { - GoABlock, GoAButton, - GoADivider, + GoAFormItem, GoARadioGroup, - GoARadioItem + GoARadioItem, + GoASpacer, + GoAText, } from "@abgov/react-components"; import { ComponentContent } from "@components/component-content/ComponentContent.tsx"; import { useState } from "react"; @@ -27,12 +28,11 @@ export default function SupportPage() { } return ( - +

    Support

    Get help from our team with using the design system, including components, guidelines, best practices, and accessibility.

    -

    Raise an issue @@ -40,13 +40,14 @@ export default function SupportPage() {

    Let us know if you find a problem in the design system or if you need a new component or pattern.

    -

    What would you like to do?

    - - - - + + + + + +
    - Raise an issue + Raise an issue

    Talk to us

    Slack

    @@ -59,50 +60,45 @@ export default function SupportPage() {
    A place for any Figma discussion. Share tips, tricks, techniques, ask questions, report issues.

    - +

    Drop in Hours

    - (every Friday 1:00 - 3:00pm MST) - + (Tuesday and Friday 1:00 - 3:00pm MST) +

    For service teams to get feedback on their usage of the design system, propose new components or changes to existing components, ask any questions, and give feedback to the design system.
    Book a time

    - - - +

    Design system team

    -

    Product Owner

    + Product Owner

    Mark Elamatha | mark.elamatha@gov.ab.ca

    - -

    Digital architect and scrum master

    + Scrum master and DevOps

    Dustin Nielsen | dustin.nielsen@gov.ab.ca

    - -

    Developers

    + Digital architect and Lead developer

    Chris Olsen | chris.olsen@gov.ab.ca -
    +

    + Developers +

    Vanessa Tran | vanessa.m.tran@gov.ab.ca
    Syed Zeeshan | syed.zeeshan@gov.ab.ca

    - -

    QA Automation Developer

    + QA Automation Developer

    Ken Li | ken.li@gov.ab.ca

    - -

    Service designer

    + Service designer

    Ali Nicholls Asikinack | ali.nicholls-asikinack@gov.ab.ca

    - -

    UX designers

    + UX designers

    Thomas Jeffery | thomas.jeffery@gov.ab.ca
    diff --git a/src/routes/root.css b/src/routes/root.css index 2b00ccfef..c0ea6d1ac 100644 --- a/src/routes/root.css +++ b/src/routes/root.css @@ -63,10 +63,18 @@ p.small { } span.grey-text { + margin-left: var(--goa-space-s); font: var(--goa-typography-body-m); color: var(--goa-color-greyscale-700); } +div.hours { + align-items: center; + display: flex; + height: var(--goa-space-xl); + margin-bottom: var(--goa-space-2xs); +} + a.back { display: inline-block; margin-top: var(--goa-space-xl); diff --git a/src/routes/root.tsx b/src/routes/root.tsx index f3dcc3e52..081364007 100644 --- a/src/routes/root.tsx +++ b/src/routes/root.tsx @@ -50,9 +50,6 @@ export default function Root() { Components Styles Content - - Report a bug -

    From 9f22e0191767388e6fd08bc45d3175aad1258c73 Mon Sep 17 00:00:00 2001 From: Vanessa Tran Date: Fri, 25 Oct 2024 15:02:40 -0600 Subject: [PATCH 19/22] feat(#2162): document icon and margins for side menu group --- src/routes/components/SideMenu.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/routes/components/SideMenu.tsx b/src/routes/components/SideMenu.tsx index c6cc25eb4..f8cb3a86b 100644 --- a/src/routes/components/SideMenu.tsx +++ b/src/routes/components/SideMenu.tsx @@ -32,6 +32,16 @@ export default function SideMenuPage() { required: true, description: "Group header text", }, + { + name: "icon", + type: "GoAIconType", + description: "Icon placed left of the heading", + }, + { + name: "mt,mr,mb,ml", + type: "none | 3xs | 2xs | xs | s | m | l | xl | 2xl | 3xl | 4xl", + description: "Apply margin to the top, right, bottom, and/or left of the component.", + }, ]; const sideMenuHeadingProperties: ComponentProperty[] = [ @@ -89,7 +99,7 @@ export default function SideMenuPage() { Nav with sub nav - + Foo Bar @@ -117,7 +127,7 @@ export default function SideMenuPage() { Nav with sub nav - + Foo Bar @@ -138,7 +148,7 @@ export default function SideMenuPage() { About Contact Nav with sub nav - + Foo Bar From 80c0394e14a8bce1aa6c2a03036953b2c6947ac5 Mon Sep 17 00:00:00 2001 From: Vanessa Tran Date: Fri, 25 Oct 2024 15:03:11 -0600 Subject: [PATCH 20/22] feat(#2177): clickMenu event and example for app header --- package-lock.json | 131 +++++++++++++--------------- package.json | 4 +- src/routes/components/AppHeader.tsx | 131 +++++++++++++++++++++++++++- 3 files changed, 190 insertions(+), 76 deletions(-) diff --git a/package-lock.json b/package-lock.json index d762e0ab8..dfe5011cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,8 @@ "name": "code-sandbox", "version": "0.0.0", "dependencies": { - "@abgov/react-components": "5.2.0", - "@abgov/web-components": "1.27.0", + "@abgov/react-components": "5.0.0-alpha.11", + "@abgov/web-components": "1.17.0-alpha.119", "@faker-js/faker": "^8.3.1", "highlight.js": "^11.8.0", "react": "^18.2.0", @@ -41,9 +41,9 @@ } }, "node_modules/@abgov/react-components": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@abgov/react-components/-/react-components-5.2.0.tgz", - "integrity": "sha512-X6DRHKLy1r3Dm6L04wPERqsoHoU9Bgj2U1V/Ih3yiayYwxbjAfcA7M/5LOgt3zQDyXtv3nD3Oq/3waOMiQJl6Q==", + "version": "5.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/@abgov/react-components/-/react-components-5.0.0-alpha.11.tgz", + "integrity": "sha512-c2v2EPQ9+wIzltLY/IyyikMbA6u8cyF0kJBtnSZxn9L0zTMvazEZzGELIPPt3Lk/keiTJPFRNaI9KEw4339xUA==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", @@ -51,9 +51,9 @@ } }, "node_modules/@abgov/web-components": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/@abgov/web-components/-/web-components-1.27.0.tgz", - "integrity": "sha512-uNuGC4nQrvLfWxjJoLwZ77hQqeFbT/FNnA53U5uxiXItMvvhf/mK2tkpmXDGX/byxxaMA8fSsh8DfvSmlMMtNw==", + "version": "1.17.0-alpha.119", + "resolved": "https://registry.npmjs.org/@abgov/web-components/-/web-components-1.17.0-alpha.119.tgz", + "integrity": "sha512-4nBn8gSTR6RurJvbqf5/FFHs+NjLnD434+r4UEwBt3AQfWyf7nRldH+OU/HOB+Fq2EGUm+n+YAHKwTA0I6bo8g==", "peerDependencies": { "@sveltejs/vite-plugin-svelte": "3.x", "glob": "10.x", @@ -540,9 +540,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "peer": true, "engines": { "node": ">=12" @@ -599,9 +599,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "peer": true }, "node_modules/@jridgewell/trace-mapping": { @@ -860,9 +860,9 @@ ] }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", - "integrity": "sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.2.tgz", + "integrity": "sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==", "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", @@ -1455,12 +1455,12 @@ "dev": true }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "peer": true, - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-union": { @@ -1473,12 +1473,12 @@ } }, "node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "peer": true, - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/balanced-match": { @@ -1630,15 +1630,6 @@ "node": ">=0.10.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2052,9 +2043,9 @@ "dev": true }, "node_modules/foreground-child": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.0.tgz", - "integrity": "sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "peer": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -2087,23 +2078,21 @@ } }, "node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "peer": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -2130,9 +2119,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "peer": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2315,16 +2304,13 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "peer": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -2437,21 +2423,18 @@ } }, "node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "peer": true, - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "peer": true }, "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "peer": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/mdn-data": { @@ -2593,6 +2576,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "peer": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3047,9 +3036,9 @@ "peer": true }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "peer": true, "engines": { "node": ">=12" @@ -3385,9 +3374,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "peer": true, "engines": { "node": ">=12" diff --git a/package.json b/package.json index d9902afe7..db8cfdfe1 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "prettier": "npx prettier . --write" }, "dependencies": { - "@abgov/react-components": "5.2.0", - "@abgov/web-components": "1.27.0", + "@abgov/react-components": "5.0.0-alpha.11", + "@abgov/web-components": "1.17.0-alpha.119", "@faker-js/faker": "^8.3.1", "highlight.js": "^11.8.0", "react": "^18.2.0", diff --git a/src/routes/components/AppHeader.tsx b/src/routes/components/AppHeader.tsx index aaddbb458..6457bb7e2 100644 --- a/src/routes/components/AppHeader.tsx +++ b/src/routes/components/AppHeader.tsx @@ -2,7 +2,7 @@ import { GoAAppHeader, GoAAppHeaderMenu, GoAAppHeaderProps, - GoABadge, + GoABadge, GoARadioGroup, GoARadioItem, GoATab, GoATabs } from "@abgov/react-components"; @@ -105,6 +105,24 @@ export default function AppHeaderPage() { lang: "angular", description: "Sets the data-testid attribute. Used with ByTestId queries in tests.", }, + { + name: "hasmenuclickhandler", + type: "boolean", + lang: "angular", + description: "Set to true to handle the menu click event via _menuClick event custom event handler. Defaults to false.", + }, + { + name: "_menuClick", + type: "CustomEvent", + lang: "angular", + description: "Function invoked when the menu hamburger button (on mobile/tablet device) is clicked." + }, + { + name: "onMenuClick", + type: "() => void", + lang: "react", + description: "Function invoked when the menu hamburger button (on mobile/tablet device) is clicked." + } ]; function onSandboxChange(bindings: ComponentBinding[], props: Record) { @@ -112,6 +130,10 @@ export default function AppHeaderPage() { setAppHeaderBindings(bindings); } + const [deviceWidth, setDeviceWidth] = useState("5000"); + function handleMenuClick() { + alert("Menu not being displayed and you can do anything"); + } return ( <> -

    Component

    +

    + Component +

    @@ -133,7 +157,9 @@ export default function AppHeaderPage() { {/*Examples*/} - +

    Header with navigation

    @@ -181,6 +207,105 @@ export default function AppHeaderPage() { Sign in + +

    Header with menu click event

    + + setDeviceWidth(value)}> + + + + + Support + + Cases + Payments + Outstanding + + + Sign in + + + + + + + + + + + + Support + + Cases + Payments + Outstanding + + Sign in + + `} + /> + + + + setDeviceWidth(value)}> + + + + + + Support + + Cases + Payments + Outstanding + + Sign in + + `} + /> +
    Date: Wed, 30 Oct 2024 20:53:38 -0400 Subject: [PATCH 21/22] fix(#2114): docs dropdown update existing example --- src/examples/dropdown/DropdownExamples.tsx | 370 +++++++++++++-------- 1 file changed, 227 insertions(+), 143 deletions(-) diff --git a/src/examples/dropdown/DropdownExamples.tsx b/src/examples/dropdown/DropdownExamples.tsx index cc9fa10bf..bc5d70463 100644 --- a/src/examples/dropdown/DropdownExamples.tsx +++ b/src/examples/dropdown/DropdownExamples.tsx @@ -2,12 +2,15 @@ import { useContext, useState } from "react"; import { DropdownItemMountType, GoAButton, + GoAButtonGroup, GoAContainer, GoADivider, GoADropdown, GoADropdownItem, GoAFormItem, GoAInput, + GoARadioGroup, + GoARadioItem, } from "@abgov/react-components"; import { LanguageContext } from "@components/sandbox"; import { CodeSnippet } from "@components/code-snippet/CodeSnippet.tsx"; @@ -29,6 +32,7 @@ export const DropdownExamples = () => { const [mountType, setNewMountType] = useState("append"); const [selectedTask, setSelectedTask] = useState(""); const [taskError, setTaskError] = useState(false); + const [isReset, setIsReset] = useState(false); function onMountTypeChange(value: string) { setNewMountType(value); @@ -47,6 +51,16 @@ export const DropdownExamples = () => { mount: mountType as DropdownItemMountType, }; setTasks([...tasks, task]); + setIsReset(false); + } + + function reset() { + setTasks([]); + setNewMountType("append"); + setNewTask(""); + setSelectedTask(""); + setTaskError(false); + setIsReset(true); } // ------------------------------------------------------------------ @@ -75,54 +89,63 @@ export const DropdownExamples = () => { -

    Dynamic options

    +

    Dynamically add an item to a dropdown list

    + label="Name of item" + error={taskError ? "Please enter item name" : undefined} + helpText="Add an item to the dropdown list below"> setNewTask(value)} - name="task" - placeholder="Ex: Schedule a meeting" + name="item" + placeholder="" value={newTask}> - - onMountTypeChange(values as string)} + + - - - - + onChange={(_name, value) => onMountTypeChange(value)} + value={mountType} + orientation="horizontal"> + + + - - Add task - + + + + Add new item + + + Reset list + + - - setSelectedTask(values as string)} - value={selectedTask} - name="selectedTask"> - {tasks.map(task => ( - - ))} - + + +
    + setSelectedTask(values as string)} + value={selectedTask} + name="selectedTask"> + {tasks.map(task => ( + + ))} + +
    @@ -133,86 +156,124 @@ export const DropdownExamples = () => { tags="angular" allowCopy={true} code={` - type Task = { - value: string; - label: string; - mount: string; - }; - - export class SomeComponent { - tasks: Task[] = [ - { label: "Finish Report", value: "finish-report", mount: "append" }, - { label: "Attend Meeting", value: "attend-meeting", mount: "append" }, - { label: "Reply Emails", value: "reply-emails", mount: "append" } - ]; - newTask = ""; - mountType = "append"; - selectedTask = ""; - taskErrorMessage = ""; - - onMountTypeChange(event: Event) { - this.mountType = (event as CustomEvent).detail.value; - } - - onNewTaskChange(event: Event) { - this.newTask = (event as CustomEvent).detail.value; - } - - onSelectedTaskChange(event: Event) { - this.selectedTask = (event as CustomEvent).detail.value; - } - - addTask() { - if (this.newTask === "") { - this.taskErrorMessage = "Please enter a task name"; - return; - } - this.taskErrorMessage = ""; - const task: Task = { - label: this.newTask, - value: this.newTask.toLowerCase().replace(' ', '-'), - mount: this.mountType - }; - this.tasks.push(task); - } - }`} + type DropdownItemMountType = "append" | "prepend" | "reset"; + interface Task { + value: string; + label: string; + mount: DropdownItemMountType; + } + + export class SomeComponent { + tasks: Task[] = [ + { label: "Finish Report", value: "finish-report", mount: "append" }, + { label: "Attend Meeting", value: "attend-meeting", mount: "append" }, + { label: "Reply Emails", value: "reply-emails", mount: "append" }, + ]; + newTask = ""; + mountType: DropdownItemMountType = "append"; + selectedTask = ""; + taskError = false; + renderTrigger = true; + constructor() {} + onMountTypeChange(event: Event): void { + this.mountType = (event as CustomEvent).detail.value as DropdownItemMountType; + } + onNewTaskChange(event: Event): void { + this.newTask = (event as CustomEvent).detail.value; + this.taskError = false; + } + onSelectedTaskChange(event: Event): void { + this.selectedTask = (event as CustomEvent).detail.value; + } + addTask(): void { + if (this.newTask === "") { + this.taskError = true; + return; + } + this.taskError = false; + const task: Task = { + label: this.newTask, + value: this.newTask.toLowerCase().replace(" ", "-"), + mount: this.mountType, + }; + this.tasks = + this.mountType === "prepend" ? [task, ...this.tasks] : [...this.tasks, task]; + this.newTask = ""; + } + reset(): void { + this.newTask = ""; + this.selectedTask = ""; + this.taskError = false; + this.tasks = []; + this.forceRerender(); + } + forceRerender(): void { + this.renderTrigger = false; + setTimeout(() => { + this.renderTrigger = true; + }, 0); + } + trackByFn(index: number, item: Task): string { + return item.value; + } + }`} /> - - - - - - - - - - - - Add task - - - - - - - - + +
    + + + + + + + + + + + + + Add new item + + + Reset list + + + + + + + + + + + +
    +
    `} /> @@ -255,6 +316,14 @@ export const DropdownExamples = () => { }; setTasks([...tasks, task]); } + + function reset() { + setTasks([]); + setNewMountType("append"); + setNewTask(""); + setSelectedTask(""); + setTaskError(false); + } `} /> @@ -263,41 +332,56 @@ export const DropdownExamples = () => { tags="react" allowCopy={true} code={` - - setNewTask(value)} - > - - - - onMountTypeChange(values as string)} - name="mountType" - value={mountType}> - - - - - - - - Add task - - - - - setSelectedTask(values as string)} - value={selectedTask} - name="selectedTask"> - {tasks.map(task => ( - - ))} - - + +
    + + setNewTask(value)} + name="item" + placeholder="" + value={newTask}> + + + onMountTypeChange(value)} + value={mountType} + orientation="horizontal"> + + + + + + + Add new item + + + Reset list + + + + + setSelectedTask(values as string)} + value={selectedTask} + name="selectedTask"> + {tasks.map(task => ( + + ))} + + +
    +
    `} /> From f4f6f607e5d6dd6770881866e15cc25d280b2664 Mon Sep 17 00:00:00 2001 From: Dustin Nielsen Date: Fri, 1 Nov 2024 10:03:05 -0600 Subject: [PATCH 22/22] fix: Updating production component versions --- package-lock.json | 16 ++++++++-------- package.json | 4 ++-- src/routes/get-started/ReportBug.tsx | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6efb7a928..5333e0b02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,8 @@ "name": "code-sandbox", "version": "0.0.0", "dependencies": { - "@abgov/react-components": "5.0.0-alpha.11", - "@abgov/web-components": "1.17.0-alpha.119", + "@abgov/react-components": "5.3.0", + "@abgov/web-components": "1.28.0", "@faker-js/faker": "^8.3.1", "highlight.js": "^11.8.0", "octokit": "^4.0.2", @@ -42,9 +42,9 @@ } }, "node_modules/@abgov/react-components": { - "version": "5.0.0-alpha.11", - "resolved": "https://registry.npmjs.org/@abgov/react-components/-/react-components-5.0.0-alpha.11.tgz", - "integrity": "sha512-c2v2EPQ9+wIzltLY/IyyikMbA6u8cyF0kJBtnSZxn9L0zTMvazEZzGELIPPt3Lk/keiTJPFRNaI9KEw4339xUA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@abgov/react-components/-/react-components-5.3.0.tgz", + "integrity": "sha512-AQbrEv4mMIYKThUT/lslAiZn1OtfcM2RQhMkKbRm/Y06Uf81hzkB9LhlkWw+tnWtgbRgXUTXxOxGkyQTbQ0NlA==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", @@ -52,9 +52,9 @@ } }, "node_modules/@abgov/web-components": { - "version": "1.17.0-alpha.119", - "resolved": "https://registry.npmjs.org/@abgov/web-components/-/web-components-1.17.0-alpha.119.tgz", - "integrity": "sha512-4nBn8gSTR6RurJvbqf5/FFHs+NjLnD434+r4UEwBt3AQfWyf7nRldH+OU/HOB+Fq2EGUm+n+YAHKwTA0I6bo8g==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@abgov/web-components/-/web-components-1.28.0.tgz", + "integrity": "sha512-0ReCvggXcDkuWT6+/sM2dNEl2a38XL2MlpZm7XCSq2P+/bCjBPVvkHwqEXj/VbwHvbHyGhsKtdSSh9rdmfggwg==", "peerDependencies": { "@sveltejs/vite-plugin-svelte": "3.x", "glob": "10.x", diff --git a/package.json b/package.json index 0a557d802..2d09a195f 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "prettier": "npx prettier . --write" }, "dependencies": { - "@abgov/react-components": "5.0.0-alpha.11", - "@abgov/web-components": "1.17.0-alpha.119", + "@abgov/react-components": "5.3.0", + "@abgov/web-components": "1.28.0", "@faker-js/faker": "^8.3.1", "highlight.js": "^11.8.0", "octokit": "^4.0.2", diff --git a/src/routes/get-started/ReportBug.tsx b/src/routes/get-started/ReportBug.tsx index 66358c2ea..38fc014ec 100644 --- a/src/routes/get-started/ReportBug.tsx +++ b/src/routes/get-started/ReportBug.tsx @@ -191,9 +191,9 @@ export default function ReportBugPage() {
      -
    • Web Components - 1.27.0
    • +
    • Web Components - 1.28.0
    • Angular Components - 3.2.0
    • -
    • React Components - 5.2.0
    • +
    • React Components - 5.3.0