diff --git a/src/__storyshots__/Updated Components/Tabs/TabStepper-Playground.snap b/src/__storyshots__/Updated Components/Tabs/TabStepper-Playground.snap
new file mode 100644
index 000000000..14d9ec281
--- /dev/null
+++ b/src/__storyshots__/Updated Components/Tabs/TabStepper-Playground.snap
@@ -0,0 +1,548 @@
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-1 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.emotion-1 [role='tab'] {
+ position: relative;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.015625rem;
+}
+
+.emotion-1 [role='tab'][data-selected] {
+ font-family: Roboto;
+ font-weight: 700;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.00625rem;
+}
+
+.emotion-1 [role='tab']:not([data-selected]):hover {
+ background: #F2F4FF;
+ -webkit-transition: background ease-in-out 0.2s;
+ transition: background ease-in-out 0.2s;
+}
+
+.emotion-1 [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+ border-radius: 0.125rem;
+ border: 0.25rem solid #A566FF;
+}
+
+.emotion-1 [role='tab'][data-status='warning'] [data-role='title'] {
+ color: #BF1250;
+}
+
+.emotion-1 [role='tab'][data-selected]:not([data-status='warning']) [data-role='title'] {
+ color: #194DCC;
+}
+
+.emotion-1[data-orientation='horizontal'] {
+ gap: 1.25rem;
+ border-bottom: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'] {
+ padding: 0.25rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab']:after {
+ inset: -3px -8px;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected] {
+ border-bottom: 0.125rem solid #175BF5;
+ margin-bottom: -0.125rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-1[data-orientation='vertical'] {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 1rem;
+ border-left: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'] {
+ padding: 0.5rem 0.75rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected] {
+ border-left: 0.125rem solid #175BF5;
+ margin-left: -0.125rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-2 {
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+}
+
+.emotion-3 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.5rem;
+}
+
+.emotion-4 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -moz-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ gap: 1.25rem;
+}
+
+.emotion-11 {
+ width: 488px;
+ height: 220px;
+}
+
+.emotion-12 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 16px;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ gap: 16px;
+}
+
+.emotion-13 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ position: relative;
+ -webkit-transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ box-shadow: 0 0 0 0.0625rem #8EAAEC;
+ border-radius: 0.25rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ opacity: 1;
+ cursor: text;
+ height: 3.25rem;
+ min-width: 8.75rem;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-13:hover {
+ background-color: rgba(200,206,255,0.20);
+}
+
+.emotion-13:focus-within {
+ box-shadow: 0 0 0 0.125rem #175BF5;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-14 {
+ position: relative;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ vertical-align: top;
+ width: -webkit-fill-available;
+ width: -moz-available;
+ width: fill-available;
+ padding: 0rem 0rem 0rem 0.75rem;
+}
+
+.emotion-14>div {
+ position: relative;
+}
+
+.emotion-15 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.emotion-16 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+ background: transparent;
+ border: none;
+ color: #111530;
+ padding: 0;
+ display: block;
+ position: relative;
+ top: 0.4375rem;
+ z-index: 1;
+ text-overflow: ellipsis;
+ width: 0;
+ min-width: 100%;
+}
+
+.emotion-16::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-16::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-16:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-16::placeholder {
+ color: transparent;
+}
+
+.emotion-16:focus {
+ outline: none;
+}
+
+.emotion-16:focus::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-16:focus::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-16:focus:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-16:focus::placeholder {
+ color: transparent;
+}
+
+.emotion-16:not(:focus):placeholder-shown+label {
+ font-weight: normal;
+}
+
+.emotion-16:focus-within+label,
+.emotion-16:not(:placeholder-shown)+label {
+ font-weight: 700!important;
+ -webkit-transform: translate(0.1875rem, -35%) scale(0.8);
+ -moz-transform: translate(0.1875rem, -35%) scale(0.8);
+ -ms-transform: translate(0.1875rem, -35%) scale(0.8);
+ transform: translate(0.1875rem, -35%) scale(0.8);
+}
+
+.emotion-16:focus-within+label {
+ font-weight: 700!important;
+ color: #194DCC;
+}
+
+.emotion-16:disabled {
+ cursor: not-allowed;
+}
+
+.emotion-17 {
+ -webkit-transition: -webkit-transform 0.25s,opacity 0.25s ease-in-out;
+ transition: transform 0.25s,opacity 0.25s ease-in-out;
+ transform-origin: 0 0;
+ width: 100%;
+ position: absolute;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-transform: translate(0.1875rem, 0);
+ -moz-transform: translate(0.1875rem, 0);
+ -ms-transform: translate(0.1875rem, 0);
+ transform: translate(0.1875rem, 0);
+ color: #52567a;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ top: 0;
+ bottom: 0;
+ right: 0.1875rem;
+ margin: auto;
+ white-space: nowrap;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ First Name
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+ Middle Name
+
+
+
+
+
+
+
+
+
+
+
+
+ Last Name
+
+ *
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/__storyshots__/Updated Components/Tabs/TabStepper-SimpleTabStepper.snap b/src/__storyshots__/Updated Components/Tabs/TabStepper-SimpleTabStepper.snap
new file mode 100644
index 000000000..9da296189
--- /dev/null
+++ b/src/__storyshots__/Updated Components/Tabs/TabStepper-SimpleTabStepper.snap
@@ -0,0 +1,254 @@
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-1 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.emotion-1 [role='tab'] {
+ position: relative;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-1 [role='tab']:not([data-selected]):hover {
+ background: #F2F4FF;
+ -webkit-transition: background ease-in-out 0.2s;
+ transition: background ease-in-out 0.2s;
+}
+
+.emotion-1 [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+ border-radius: 0.25rem;
+ border: 0.25rem solid #A566FF;
+}
+
+.emotion-1 [role='tab'][data-status='warning'] [data-role='title'] {
+ color: #FF4D8D;
+}
+
+.emotion-1 [role='tab'][data-selected]:not([data-status='warning']) [data-role='title'] {
+ color: #194DCC;
+}
+
+.emotion-1[data-orientation='horizontal'] {
+ gap: 1.25rem;
+ border-bottom: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'] {
+ padding: 0.25rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab']:after {
+ inset: -8px -12px;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected] {
+ border-bottom: 0.125rem solid #175BF5;
+ margin-bottom: -0.125rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-1[data-orientation='vertical'] {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 1rem;
+ border-left: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'] {
+ padding: 0.5rem 0.75rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected] {
+ border-left: 0.125rem solid #175BF5;
+ margin-left: -0.125rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-2 {
+ cursor: pointer;
+}
+
+.emotion-3 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.25rem;
+}
+
+.emotion-4 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -moz-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ font-family: Roboto;
+ font-weight: 700;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+}
+
+.emotion-5 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1rem;
+ font-size: 0.75rem;
+ letter-spacing: 0.015625rem;
+ color: #52567a;
+}
+
+
+
+
+
+
+
+ Step 1
+
+
+ This is subtitle for step 1
+
+
+
+
+
+
+ Step 2
+
+
+ This is subtitle for step 2
+
+
+
+
+
+
+ Step 3
+
+
+ This is subtitle for step 3
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperOrientation.snap b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperOrientation.snap
new file mode 100644
index 000000000..71525e04b
--- /dev/null
+++ b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperOrientation.snap
@@ -0,0 +1,569 @@
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-1 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.emotion-1 [role='tab'] {
+ position: relative;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.015625rem;
+}
+
+.emotion-1 [role='tab'][data-selected] {
+ font-family: Roboto;
+ font-weight: 700;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.00625rem;
+}
+
+.emotion-1 [role='tab']:not([data-selected]):hover {
+ background: #F2F4FF;
+ -webkit-transition: background ease-in-out 0.2s;
+ transition: background ease-in-out 0.2s;
+}
+
+.emotion-1 [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+ border-radius: 0.125rem;
+ border: 0.25rem solid #A566FF;
+}
+
+.emotion-1 [role='tab'][data-status='warning'] [data-role='title'] {
+ color: #BF1250;
+}
+
+.emotion-1 [role='tab'][data-selected]:not([data-status='warning']) [data-role='title'] {
+ color: #194DCC;
+}
+
+.emotion-1[data-orientation='horizontal'] {
+ gap: 1.25rem;
+ border-bottom: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'] {
+ padding: 0.25rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab']:after {
+ inset: -3px -8px;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected] {
+ border-bottom: 0.125rem solid #175BF5;
+ margin-bottom: -0.125rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-1[data-orientation='vertical'] {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 1rem;
+ border-left: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'] {
+ padding: 0.5rem 0.75rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected] {
+ border-left: 0.125rem solid #175BF5;
+ margin-left: -0.125rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-2 {
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+}
+
+.emotion-3 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.5rem;
+}
+
+.emotion-4 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -moz-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ gap: 1.25rem;
+}
+
+.emotion-5 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1rem;
+ font-size: 0.75rem;
+ letter-spacing: 0.015625rem;
+ color: #52567a;
+}
+
+.emotion-14 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 16px;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ gap: 16px;
+}
+
+.emotion-15 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ position: relative;
+ -webkit-transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ box-shadow: 0 0 0 0.0625rem #8EAAEC;
+ border-radius: 0.25rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ opacity: 1;
+ cursor: text;
+ height: 3.25rem;
+ min-width: 8.75rem;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-15:hover {
+ background-color: rgba(200,206,255,0.20);
+}
+
+.emotion-15:focus-within {
+ box-shadow: 0 0 0 0.125rem #175BF5;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-16 {
+ position: relative;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ vertical-align: top;
+ width: -webkit-fill-available;
+ width: -moz-available;
+ width: fill-available;
+ padding: 0rem 0rem 0rem 0.75rem;
+}
+
+.emotion-16>div {
+ position: relative;
+}
+
+.emotion-17 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.emotion-18 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+ background: transparent;
+ border: none;
+ color: #111530;
+ padding: 0;
+ display: block;
+ position: relative;
+ top: 0.4375rem;
+ z-index: 1;
+ text-overflow: ellipsis;
+ width: 0;
+ min-width: 100%;
+}
+
+.emotion-18::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-18:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18::placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus {
+ outline: none;
+}
+
+.emotion-18:focus::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus::placeholder {
+ color: transparent;
+}
+
+.emotion-18:not(:focus):placeholder-shown+label {
+ font-weight: normal;
+}
+
+.emotion-18:focus-within+label,
+.emotion-18:not(:placeholder-shown)+label {
+ font-weight: 700!important;
+ -webkit-transform: translate(0.1875rem, -35%) scale(0.8);
+ -moz-transform: translate(0.1875rem, -35%) scale(0.8);
+ -ms-transform: translate(0.1875rem, -35%) scale(0.8);
+ transform: translate(0.1875rem, -35%) scale(0.8);
+}
+
+.emotion-18:focus-within+label {
+ font-weight: 700!important;
+ color: #194DCC;
+}
+
+.emotion-18:disabled {
+ cursor: not-allowed;
+}
+
+.emotion-19 {
+ -webkit-transition: -webkit-transform 0.25s,opacity 0.25s ease-in-out;
+ transition: transform 0.25s,opacity 0.25s ease-in-out;
+ transform-origin: 0 0;
+ width: 100%;
+ position: absolute;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-transform: translate(0.1875rem, 0);
+ -moz-transform: translate(0.1875rem, 0);
+ -ms-transform: translate(0.1875rem, 0);
+ transform: translate(0.1875rem, 0);
+ color: #52567a;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ top: 0;
+ bottom: 0;
+ right: 0.1875rem;
+ margin: auto;
+ white-space: nowrap;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+}
+
+
+
+
+
+
+
+ Step 1
+
+
+ This is subtitle for step 1
+
+
+
+
+
+
+ Step 2
+
+
+ This is subtitle for step 2
+
+
+
+
+
+
+ Step 3
+
+
+ This is subtitle for step 3
+
+
+
+
+
+
+
+
+
+
+
+
+ First Name
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+ Middle Name
+
+
+
+
+
+
+
+
+
+
+
+
+ Last Name
+
+ *
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperStatuses.snap b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperStatuses.snap
new file mode 100644
index 000000000..71525e04b
--- /dev/null
+++ b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperStatuses.snap
@@ -0,0 +1,569 @@
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-1 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.emotion-1 [role='tab'] {
+ position: relative;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.015625rem;
+}
+
+.emotion-1 [role='tab'][data-selected] {
+ font-family: Roboto;
+ font-weight: 700;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.00625rem;
+}
+
+.emotion-1 [role='tab']:not([data-selected]):hover {
+ background: #F2F4FF;
+ -webkit-transition: background ease-in-out 0.2s;
+ transition: background ease-in-out 0.2s;
+}
+
+.emotion-1 [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+ border-radius: 0.125rem;
+ border: 0.25rem solid #A566FF;
+}
+
+.emotion-1 [role='tab'][data-status='warning'] [data-role='title'] {
+ color: #BF1250;
+}
+
+.emotion-1 [role='tab'][data-selected]:not([data-status='warning']) [data-role='title'] {
+ color: #194DCC;
+}
+
+.emotion-1[data-orientation='horizontal'] {
+ gap: 1.25rem;
+ border-bottom: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'] {
+ padding: 0.25rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab']:after {
+ inset: -3px -8px;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected] {
+ border-bottom: 0.125rem solid #175BF5;
+ margin-bottom: -0.125rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-1[data-orientation='vertical'] {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 1rem;
+ border-left: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'] {
+ padding: 0.5rem 0.75rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected] {
+ border-left: 0.125rem solid #175BF5;
+ margin-left: -0.125rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-2 {
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+}
+
+.emotion-3 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.5rem;
+}
+
+.emotion-4 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -moz-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ gap: 1.25rem;
+}
+
+.emotion-5 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1rem;
+ font-size: 0.75rem;
+ letter-spacing: 0.015625rem;
+ color: #52567a;
+}
+
+.emotion-14 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 16px;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ gap: 16px;
+}
+
+.emotion-15 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ position: relative;
+ -webkit-transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ box-shadow: 0 0 0 0.0625rem #8EAAEC;
+ border-radius: 0.25rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ opacity: 1;
+ cursor: text;
+ height: 3.25rem;
+ min-width: 8.75rem;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-15:hover {
+ background-color: rgba(200,206,255,0.20);
+}
+
+.emotion-15:focus-within {
+ box-shadow: 0 0 0 0.125rem #175BF5;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-16 {
+ position: relative;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ vertical-align: top;
+ width: -webkit-fill-available;
+ width: -moz-available;
+ width: fill-available;
+ padding: 0rem 0rem 0rem 0.75rem;
+}
+
+.emotion-16>div {
+ position: relative;
+}
+
+.emotion-17 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.emotion-18 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+ background: transparent;
+ border: none;
+ color: #111530;
+ padding: 0;
+ display: block;
+ position: relative;
+ top: 0.4375rem;
+ z-index: 1;
+ text-overflow: ellipsis;
+ width: 0;
+ min-width: 100%;
+}
+
+.emotion-18::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-18:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18::placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus {
+ outline: none;
+}
+
+.emotion-18:focus::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus::placeholder {
+ color: transparent;
+}
+
+.emotion-18:not(:focus):placeholder-shown+label {
+ font-weight: normal;
+}
+
+.emotion-18:focus-within+label,
+.emotion-18:not(:placeholder-shown)+label {
+ font-weight: 700!important;
+ -webkit-transform: translate(0.1875rem, -35%) scale(0.8);
+ -moz-transform: translate(0.1875rem, -35%) scale(0.8);
+ -ms-transform: translate(0.1875rem, -35%) scale(0.8);
+ transform: translate(0.1875rem, -35%) scale(0.8);
+}
+
+.emotion-18:focus-within+label {
+ font-weight: 700!important;
+ color: #194DCC;
+}
+
+.emotion-18:disabled {
+ cursor: not-allowed;
+}
+
+.emotion-19 {
+ -webkit-transition: -webkit-transform 0.25s,opacity 0.25s ease-in-out;
+ transition: transform 0.25s,opacity 0.25s ease-in-out;
+ transform-origin: 0 0;
+ width: 100%;
+ position: absolute;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-transform: translate(0.1875rem, 0);
+ -moz-transform: translate(0.1875rem, 0);
+ -ms-transform: translate(0.1875rem, 0);
+ transform: translate(0.1875rem, 0);
+ color: #52567a;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ top: 0;
+ bottom: 0;
+ right: 0.1875rem;
+ margin: auto;
+ white-space: nowrap;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+}
+
+
+
+
+
+
+
+ Step 1
+
+
+ This is subtitle for step 1
+
+
+
+
+
+
+ Step 2
+
+
+ This is subtitle for step 2
+
+
+
+
+
+
+ Step 3
+
+
+ This is subtitle for step 3
+
+
+
+
+
+
+
+
+
+
+
+
+ First Name
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+ Middle Name
+
+
+
+
+
+
+
+
+
+
+
+
+ Last Name
+
+ *
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperTypes.snap b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperTypes.snap
new file mode 100644
index 000000000..87654bc28
--- /dev/null
+++ b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperTypes.snap
@@ -0,0 +1,372 @@
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 32px;
+}
+
+.emotion-1 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-2 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.emotion-2 [role='tab'] {
+ position: relative;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.015625rem;
+}
+
+.emotion-2 [role='tab'][data-selected] {
+ font-family: Roboto;
+ font-weight: 700;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.00625rem;
+}
+
+.emotion-2 [role='tab']:not([data-selected]):hover {
+ background: #F2F4FF;
+ -webkit-transition: background ease-in-out 0.2s;
+ transition: background ease-in-out 0.2s;
+}
+
+.emotion-2 [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+ border-radius: 0.125rem;
+ border: 0.25rem solid #A566FF;
+}
+
+.emotion-2 [role='tab'][data-status='warning'] [data-role='title'] {
+ color: #BF1250;
+}
+
+.emotion-2 [role='tab'][data-selected]:not([data-status='warning']) [data-role='title'] {
+ color: #194DCC;
+}
+
+.emotion-2[data-orientation='horizontal'] {
+ gap: 1.25rem;
+ border-bottom: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-2[data-orientation='horizontal'] [role='tab'] {
+ padding: 0.25rem;
+}
+
+.emotion-2[data-orientation='horizontal'] [role='tab']:after {
+ inset: -3px -8px;
+}
+
+.emotion-2[data-orientation='horizontal'] [role='tab'][data-selected] {
+ border-bottom: 0.125rem solid #175BF5;
+ margin-bottom: -0.125rem;
+}
+
+.emotion-2[data-orientation='horizontal'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-2[data-orientation='vertical'] {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 1rem;
+ border-left: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-2[data-orientation='vertical'] [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+}
+
+.emotion-2[data-orientation='vertical'] [role='tab'] {
+ padding: 0.5rem 0.75rem;
+}
+
+.emotion-2[data-orientation='vertical'] [role='tab'][data-selected] {
+ border-left: 0.125rem solid #175BF5;
+ margin-left: -0.125rem;
+}
+
+.emotion-2[data-orientation='vertical'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-3 {
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+}
+
+.emotion-4 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.5rem;
+}
+
+.emotion-5 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -moz-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ gap: 1.25rem;
+}
+
+.emotion-17 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1rem;
+ font-size: 0.75rem;
+ letter-spacing: 0.015625rem;
+ color: #52567a;
+}
+
+
+
+
+
+
+
+
+
+ Step 1
+
+
+ This is subtitle for step 1
+
+
+
+
+
+
+ Step 2
+
+
+ This is subtitle for step 2
+
+
+
+
+
+
+ Step 3
+
+
+ This is subtitle for step 3
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperWithContent.snap b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperWithContent.snap
new file mode 100644
index 000000000..71525e04b
--- /dev/null
+++ b/src/__storyshots__/Updated Components/Tabs/TabStepper-TabStepperWithContent.snap
@@ -0,0 +1,569 @@
+.emotion-0 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.emotion-1 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+}
+
+.emotion-1 [role='tab'] {
+ position: relative;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.015625rem;
+}
+
+.emotion-1 [role='tab'][data-selected] {
+ font-family: Roboto;
+ font-weight: 700;
+ line-height: 1.375rem;
+ font-size: 1rem;
+ letter-spacing: 0.00625rem;
+}
+
+.emotion-1 [role='tab']:not([data-selected]):hover {
+ background: #F2F4FF;
+ -webkit-transition: background ease-in-out 0.2s;
+ transition: background ease-in-out 0.2s;
+}
+
+.emotion-1 [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+ border-radius: 0.125rem;
+ border: 0.25rem solid #A566FF;
+}
+
+.emotion-1 [role='tab'][data-status='warning'] [data-role='title'] {
+ color: #BF1250;
+}
+
+.emotion-1 [role='tab'][data-selected]:not([data-status='warning']) [data-role='title'] {
+ color: #194DCC;
+}
+
+.emotion-1[data-orientation='horizontal'] {
+ gap: 1.25rem;
+ border-bottom: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'] {
+ padding: 0.25rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab']:after {
+ inset: -3px -8px;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected] {
+ border-bottom: 0.125rem solid #175BF5;
+ margin-bottom: -0.125rem;
+}
+
+.emotion-1[data-orientation='horizontal'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-1[data-orientation='vertical'] {
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 1rem;
+ border-left: 0.125rem solid rgba(200,206,255,0.70);
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'] {
+ padding: 0.5rem 0.75rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected] {
+ border-left: 0.125rem solid #175BF5;
+ margin-left: -0.125rem;
+}
+
+.emotion-1[data-orientation='vertical'] [role='tab'][data-selected][data-status='warning'] {
+ border-color: #FF4D8D;
+}
+
+.emotion-2 {
+ cursor: pointer;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+}
+
+.emotion-3 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ gap: 0.25rem;
+ padding: 0.5rem;
+}
+
+.emotion-4 {
+ display: -webkit-box;
+ display: -moz-box;
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-align-items: center;
+ -moz-box-align: center;
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ gap: 1.25rem;
+}
+
+.emotion-5 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1rem;
+ font-size: 0.75rem;
+ letter-spacing: 0.015625rem;
+ color: #52567a;
+}
+
+.emotion-14 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ padding: 16px;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ gap: 16px;
+}
+
+.emotion-15 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ position: relative;
+ -webkit-transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ transition: background-color 0.25s,box-shadow 0.25s,border-color 0.25s;
+ box-shadow: 0 0 0 0.0625rem #8EAAEC;
+ border-radius: 0.25rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ opacity: 1;
+ cursor: text;
+ height: 3.25rem;
+ min-width: 8.75rem;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-15:hover {
+ background-color: rgba(200,206,255,0.20);
+}
+
+.emotion-15:focus-within {
+ box-shadow: 0 0 0 0.125rem #175BF5;
+ background-color: rgba(200,206,255,0.30);
+}
+
+.emotion-16 {
+ position: relative;
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ vertical-align: top;
+ width: -webkit-fill-available;
+ width: -moz-available;
+ width: fill-available;
+ padding: 0rem 0rem 0rem 0.75rem;
+}
+
+.emotion-16>div {
+ position: relative;
+}
+
+.emotion-17 {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.emotion-18 {
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+ background: transparent;
+ border: none;
+ color: #111530;
+ padding: 0;
+ display: block;
+ position: relative;
+ top: 0.4375rem;
+ z-index: 1;
+ text-overflow: ellipsis;
+ width: 0;
+ min-width: 100%;
+}
+
+.emotion-18::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-18:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18::placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus {
+ outline: none;
+}
+
+.emotion-18:focus::-webkit-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus::-moz-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus:-ms-input-placeholder {
+ color: transparent;
+}
+
+.emotion-18:focus::placeholder {
+ color: transparent;
+}
+
+.emotion-18:not(:focus):placeholder-shown+label {
+ font-weight: normal;
+}
+
+.emotion-18:focus-within+label,
+.emotion-18:not(:placeholder-shown)+label {
+ font-weight: 700!important;
+ -webkit-transform: translate(0.1875rem, -35%) scale(0.8);
+ -moz-transform: translate(0.1875rem, -35%) scale(0.8);
+ -ms-transform: translate(0.1875rem, -35%) scale(0.8);
+ transform: translate(0.1875rem, -35%) scale(0.8);
+}
+
+.emotion-18:focus-within+label {
+ font-weight: 700!important;
+ color: #194DCC;
+}
+
+.emotion-18:disabled {
+ cursor: not-allowed;
+}
+
+.emotion-19 {
+ -webkit-transition: -webkit-transform 0.25s,opacity 0.25s ease-in-out;
+ transition: transform 0.25s,opacity 0.25s ease-in-out;
+ transform-origin: 0 0;
+ width: 100%;
+ position: absolute;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-transform: translate(0.1875rem, 0);
+ -moz-transform: translate(0.1875rem, 0);
+ -ms-transform: translate(0.1875rem, 0);
+ transform: translate(0.1875rem, 0);
+ color: #52567a;
+ -webkit-align-items: center;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ top: 0;
+ bottom: 0;
+ right: 0.1875rem;
+ margin: auto;
+ white-space: nowrap;
+ font-family: Roboto;
+ font-weight: 400;
+ line-height: 1.25rem;
+ font-size: 0.875rem;
+ letter-spacing: 0.015625rem;
+}
+
+
+
+
+
+
+
+ Step 1
+
+
+ This is subtitle for step 1
+
+
+
+
+
+
+ Step 2
+
+
+ This is subtitle for step 2
+
+
+
+
+
+
+ Step 3
+
+
+ This is subtitle for step 3
+
+
+
+
+
+
+
+
+
+
+
+
+ First Name
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+ Middle Name
+
+
+
+
+
+
+
+
+
+
+
+
+ Last Name
+
+ *
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/__storyshots__/Updated Components/Tabs/Tabs-Playground.snap b/src/__storyshots__/Updated Components/Tabs/Tabs-Playground.snap
index de5cb07dd..da40e0d91 100644
--- a/src/__storyshots__/Updated Components/Tabs/Tabs-Playground.snap
+++ b/src/__storyshots__/Updated Components/Tabs/Tabs-Playground.snap
@@ -1,7 +1,4 @@
.emotion-0 {
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -9,6 +6,9 @@
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
}
.emotion-1 {
diff --git a/src/__storyshots__/Updated Components/Tabs/Tabs-SimpleTabs.snap b/src/__storyshots__/Updated Components/Tabs/Tabs-SimpleTabs.snap
index 4a19a43e0..cce0493bc 100644
--- a/src/__storyshots__/Updated Components/Tabs/Tabs-SimpleTabs.snap
+++ b/src/__storyshots__/Updated Components/Tabs/Tabs-SimpleTabs.snap
@@ -1,7 +1,4 @@
.emotion-0 {
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -9,6 +6,9 @@
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
}
.emotion-1 {
diff --git a/src/__storyshots__/Updated Components/Tabs/Tabs-TabsOrientation.snap b/src/__storyshots__/Updated Components/Tabs/Tabs-TabsOrientation.snap
index de5cb07dd..da40e0d91 100644
--- a/src/__storyshots__/Updated Components/Tabs/Tabs-TabsOrientation.snap
+++ b/src/__storyshots__/Updated Components/Tabs/Tabs-TabsOrientation.snap
@@ -1,7 +1,4 @@
.emotion-0 {
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -9,6 +6,9 @@
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
}
.emotion-1 {
diff --git a/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithContent.snap b/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithContent.snap
index de5cb07dd..da40e0d91 100644
--- a/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithContent.snap
+++ b/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithContent.snap
@@ -1,7 +1,4 @@
.emotion-0 {
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -9,6 +6,9 @@
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
}
.emotion-1 {
diff --git a/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithCounter.snap b/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithCounter.snap
index cb2783f42..a305fb55d 100644
--- a/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithCounter.snap
+++ b/src/__storyshots__/Updated Components/Tabs/Tabs-TabsWithCounter.snap
@@ -1,7 +1,4 @@
.emotion-0 {
- width: -webkit-fit-content;
- width: -moz-fit-content;
- width: fit-content;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
@@ -9,6 +6,9 @@
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
+ width: -webkit-fit-content;
+ width: -moz-fit-content;
+ width: fit-content;
}
.emotion-1 {
diff --git a/src/components/TabStepper/TabStepper.mdx b/src/components/TabStepper/TabStepper.mdx
new file mode 100644
index 000000000..5100a0988
--- /dev/null
+++ b/src/components/TabStepper/TabStepper.mdx
@@ -0,0 +1,78 @@
+import { Meta, Canvas, ArgTypes } from '@storybook/blocks';
+import TabStepper from './TabStepper';
+import * as TabStepperStories from './TabStepper.stories';
+import { TabStepItemStory } from './utils/TabStepperStoryComponents';
+
+
+
+
+
+## Overview
+
+A TabStepper is a multi-step process that helps users to complete a task or achieve a goal by breaking it down into smaller, more manageable steps.
+
+
+ This component is a monolith that covers most basic use cases. If you want to customize your
+ TabStepper to fit your specific needs, visit the Components section to learn how you can use the
+ tab stepper modules to create your own solutions.
+
+
+
+
+### TabStepper
+
+
+
+## TabStepItem
+
+
+
+## Usage
+
+
+
+
+
+## TabStepper types
+
+TabStepper can be simple (with only a title) or also display a subtitle.
+
+
+
+## TabStepper with content
+
+In order to add content to your TabStepper and render it conditionally based on the selected TabStep, you can use the TabPanel component. Otherwise you can just use the TabStepper component without children and implement a custom panel functionality.
+
+
+
+## Orientation
+
+TabStepper can be horizontal or vertical. Use the `orientation` prop to toggle this feature.
+
+
+
+## TabStepper statuses
+
+There are 3 statuses for the TabStep: `pending` (the default one), `warning` and `done`. You can set the statuses thought the TabStepper's `items` prop, or the TabStep's `status` prop when creating a composition.
+
+
+
+## Playground
+
+
diff --git a/src/components/TabStepper/TabStepper.stories.tsx b/src/components/TabStepper/TabStepper.stories.tsx
new file mode 100644
index 000000000..b7e9d575a
--- /dev/null
+++ b/src/components/TabStepper/TabStepper.stories.tsx
@@ -0,0 +1,256 @@
+import React from 'react';
+import TabStepper from '~/components/TabStepper';
+import { TabKey, TabPanel } from '../Tabs';
+import { TabStepItem } from './types';
+import { getContent } from './constants';
+
+export default {
+ title: 'Updated Components/Tabs/TabStepper',
+ component: TabStepper,
+
+ argTypes: {
+ orientation: { type: 'radio', options: ['horizontal', 'vertical'] },
+ status: { type: 'select', options: ['pending', 'warning', 'done'] },
+ status1: { name: 'Step 1 Status', type: 'select', options: ['pending', 'warning', 'done'] },
+ status2: { name: 'Step 2 Status', type: 'select', options: ['pending', 'warning', 'done'] },
+ status3: { name: 'Step 3 Status', type: 'select', options: ['pending', 'warning', 'done'] },
+ hasSubtitle: { name: 'has Subtitle', type: 'boolean' },
+ },
+
+ args: {
+ orientation: 'horizontal',
+ status: 'pending',
+ status1: 'pending',
+ status2: 'pending',
+ status3: 'pending',
+ hasSubtitle: false,
+ },
+};
+
+export const TabStepperTypes = {
+ render: () => {
+ const [key1, setKey1] = React.useState('step_1');
+ const [key2, setKey2] = React.useState('step_1');
+
+ const getItems = (hasSubtitle: boolean): TabStepItem[] => {
+ return [
+ {
+ id: 'step_1',
+ title: 'Step 1',
+ ...(hasSubtitle && { subtitle: 'This is subtitle for step 1' }),
+ },
+ {
+ id: 'step_2',
+ title: 'Step 2',
+ ...(hasSubtitle && { subtitle: 'This is subtitle for step 2' }),
+ },
+ {
+ id: 'step_3',
+ title: 'Step 3',
+ ...(hasSubtitle && { subtitle: 'This is subtitle for step 3' }),
+ },
+ ];
+ };
+
+ return (
+
+
+
+
+ );
+ },
+
+ name: 'TabStepper types',
+
+ parameters: {
+ controls: { disable: true },
+ },
+};
+
+export const TabStepperWithContent = {
+ render: () => {
+ const [key, setKey] = React.useState('step_1');
+
+ const items: TabStepItem[] = [
+ {
+ id: 'step_1',
+ title: 'Step 1',
+ subtitle: 'This is subtitle for step 1',
+ },
+ {
+ id: 'step_2',
+ title: 'Step 2',
+ subtitle: 'This is subtitle for step 2',
+ },
+ {
+ id: 'step_3',
+ title: 'Step 3',
+ subtitle: 'This is subtitle for step 3',
+ },
+ ];
+
+ return (
+
+ {items.map((item) => (
+
+ {getContent(item.id, 'horizontal')}
+
+ ))}
+
+ );
+ },
+
+ name: 'TabStepper with content',
+
+ parameters: {
+ controls: { disable: true },
+ },
+};
+
+export const TabStepperOrientation = {
+ render: (args) => {
+ const { orientation } = args;
+
+ const [key, setKey] = React.useState('step_1');
+
+ const items: TabStepItem[] = [
+ {
+ id: 'step_1',
+ title: 'Step 1',
+ subtitle: 'This is subtitle for step 1',
+ },
+ {
+ id: 'step_2',
+ title: 'Step 2',
+ subtitle: 'This is subtitle for step 2',
+ },
+ {
+ id: 'step_3',
+ title: 'Step 3',
+ subtitle: 'This is subtitle for step 3',
+ },
+ ];
+
+ return (
+
+ {items.map((item) => (
+
+ {getContent(item.id, orientation)}
+
+ ))}
+
+ );
+ },
+
+ name: 'Orientation',
+
+ parameters: {
+ controls: { include: ['orientation'] },
+ },
+};
+
+export const TabStepperStatuses = {
+ render: (args) => {
+ const { status } = args;
+
+ const [key, setKey] = React.useState('step_1');
+
+ const items: TabStepItem[] = [
+ {
+ id: 'step_1',
+ title: 'Step 1',
+ subtitle: 'This is subtitle for step 1',
+ status,
+ },
+ {
+ id: 'step_2',
+ title: 'Step 2',
+ subtitle: 'This is subtitle for step 2',
+ status,
+ },
+ {
+ id: 'step_3',
+ title: 'Step 3',
+ subtitle: 'This is subtitle for step 3',
+ status,
+ },
+ ];
+
+ return (
+
+ {items.map((item) => (
+
+ {getContent(item.id, 'horizontal')}
+
+ ))}
+
+ );
+ },
+
+ name: 'TabStepper statuses',
+
+ parameters: {
+ controls: { include: ['status'] },
+ },
+};
+
+export const Playground = {
+ render: (args) => {
+ const { orientation, status1, status2, status3, hasSubtitle } = args;
+
+ const [key, setKey] = React.useState('step_1');
+
+ const getItems = (hasSubtitle: boolean): TabStepItem[] => {
+ return [
+ {
+ id: 'step_1',
+ title: 'Step 1',
+ ...(hasSubtitle && { subtitle: 'This is subtitle for step 1' }),
+ status: status1,
+ },
+ {
+ id: 'step_2',
+ title: 'Step 2',
+ ...(hasSubtitle && { subtitle: 'This is subtitle for step 2' }),
+ status: status2,
+ },
+ {
+ id: 'step_3',
+ title: 'Step 3',
+ ...(hasSubtitle && { subtitle: 'This is subtitle for step 3' }),
+ status: status3,
+ },
+ ];
+ };
+
+ return (
+
+
+ {getItems(hasSubtitle).map((item) => (
+
+ {getContent(item.id, orientation)}
+
+ ))}
+
+
+ );
+ },
+
+ name: 'Playground',
+
+ parameters: {
+ controls: {
+ include: ['orientation', 'Step 1 Status', 'Step 2 Status', 'Step 3 Status', 'has Subtitle'],
+ },
+ },
+};
diff --git a/src/components/TabStepper/TabStepper.tsx b/src/components/TabStepper/TabStepper.tsx
new file mode 100644
index 000000000..3106961cc
--- /dev/null
+++ b/src/components/TabStepper/TabStepper.tsx
@@ -0,0 +1,40 @@
+import React from 'react';
+
+import { TabStep, TabStepList } from './components';
+import type { StepperProps } from './types';
+import { TabsContainer } from '../Tabs';
+
+const TabStepper = React.forwardRef((props, ref) => {
+ const {
+ orientation = 'horizontal',
+ selectedKey,
+ onSelectionChange,
+ items,
+ dataTestPrefixId = 'ictinus',
+ children,
+ } = props;
+
+ return (
+
+
+ {items.map((item) => (
+
+ ))}
+
+ {children}
+
+ );
+});
+
+TabStepper.displayName = 'TabStepper';
+
+export default TabStepper;
diff --git a/src/components/TabStepper/components/TabStep/TabStep.mdx b/src/components/TabStepper/components/TabStep/TabStep.mdx
new file mode 100644
index 000000000..860ff7a7e
--- /dev/null
+++ b/src/components/TabStepper/components/TabStep/TabStep.mdx
@@ -0,0 +1,56 @@
+import { Meta, Canvas, ArgTypes } from '@storybook/blocks';
+import TabStep from './TabStep';
+
+
+
+
+
+## Overview
+
+TabStep component is used to render the main content of the TabsStepper.
+
+## Props
+
+
+
+## Usage
+
+Use TabStep as a leaf component to render the content of the TabStep as children.
+
+
+ Check also
+ [TabsContainer](../?path=/docs/updated-components-tabs-components-tabscontainer--overview) and
+ [TabStepList](../?path=/docs/updated-components-tabs-components-tabsteplist--overview) as they are
+ needed for the implementation.
+
+
+```js
+ const [selectedKey, setSelectedKey] = React.useState('step_1');
+
+ return (
+ //
+ //
+
+ Tab 1
+
+
+ Tab 2
+
+
+ Tab 3
+
+ //
+ //
+
+```
diff --git a/src/components/TabStepper/components/TabStep/TabStep.stories.tsx b/src/components/TabStepper/components/TabStep/TabStep.stories.tsx
new file mode 100644
index 000000000..6d777f51b
--- /dev/null
+++ b/src/components/TabStepper/components/TabStep/TabStep.stories.tsx
@@ -0,0 +1,13 @@
+import TabStep from '.';
+
+export default {
+ title: 'Updated Components/Tabs/Components/TabStep',
+ component: TabStep,
+
+ parameters: {
+ storyshots: {
+ disable: true,
+ },
+ controls: { disable: true },
+ },
+};
diff --git a/src/components/TabStepper/components/TabStep/TabStep.style.ts b/src/components/TabStepper/components/TabStep/TabStep.style.ts
new file mode 100644
index 000000000..02e954636
--- /dev/null
+++ b/src/components/TabStepper/components/TabStep/TabStep.style.ts
@@ -0,0 +1,33 @@
+import { css } from '@emotion/react';
+
+import type { Theme } from '~/theme';
+import { flex, flexCenterVertical } from '~/theme/functions';
+
+export const stepStyles = () =>
+ css`
+ cursor: pointer;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ `;
+
+export const stepContainer = () => (theme: Theme) =>
+ css`
+ ${flex};
+ flex-direction: column;
+ gap: ${theme.globals.spacing.get('3')};
+ padding: ${theme.globals.spacing.get('4')};
+ `;
+
+export const stepTitle = () => (theme: Theme) =>
+ css`
+ ${flexCenterVertical};
+ justify-content: space-between;
+ gap: ${theme.globals.spacing.get('7')};
+ `;
+
+export const stepSubtitle = () => (theme: Theme) =>
+ css`
+ ${theme.tokens.typography.get('normal.body03')}
+ color: ${theme.tokens.colors.get('textColor.default.secondary')}
+ `;
diff --git a/src/components/TabStepper/components/TabStep/TabStep.tsx b/src/components/TabStepper/components/TabStep/TabStep.tsx
new file mode 100644
index 000000000..96b971928
--- /dev/null
+++ b/src/components/TabStepper/components/TabStep/TabStep.tsx
@@ -0,0 +1,65 @@
+import React from 'react';
+import { Tab as ReactAriaTab } from 'react-aria-components';
+
+import { stepContainer, stepStyles, stepSubtitle, stepTitle } from './TabStep.style';
+import type { TabStepProps } from '../../types';
+
+import type { AcceptedIconNames } from '~/components/Icon';
+import Icon from '~/components/Icon';
+import useTheme from '~/hooks/useTheme';
+import type { SemanticColorsKey } from '~/theme/tokens/semantic/colors';
+
+const STATUS_ICON = {
+ done: {
+ name: 'success' as AcceptedIconNames,
+ color: 'indicators.brand' as SemanticColorsKey,
+ },
+ warning: {
+ name: 'warning' as AcceptedIconNames,
+ color: 'indicators.error' as SemanticColorsKey,
+ },
+};
+
+const TabStep = React.forwardRef((props, ref) => {
+ const { children, id, title, subtitle, status = 'pending', dataTestPrefixId, ...rest } = props;
+
+ const hasIcon = status !== 'pending';
+
+ const theme = useTheme();
+
+ const icon = status !== 'pending' ? STATUS_ICON[status] : null;
+
+ return (
+
+ {children ?? (
+
+ {title && (
+
+ {title}
+ {hasIcon && (
+
+ )}
+
+ )}
+ {subtitle && (
+
+ {subtitle}
+
+ )}
+
+ )}
+
+ );
+});
+
+TabStep.displayName = 'TabStep';
+
+export default TabStep;
diff --git a/src/components/TabStepper/components/TabStep/index.ts b/src/components/TabStepper/components/TabStep/index.ts
new file mode 100644
index 000000000..f24fb1bab
--- /dev/null
+++ b/src/components/TabStepper/components/TabStep/index.ts
@@ -0,0 +1 @@
+export { default } from './TabStep';
diff --git a/src/components/TabStepper/components/TabStepList/TabStepList.mdx b/src/components/TabStepper/components/TabStepList/TabStepList.mdx
new file mode 100644
index 000000000..e7efe125b
--- /dev/null
+++ b/src/components/TabStepper/components/TabStepList/TabStepList.mdx
@@ -0,0 +1,61 @@
+import { Meta, Canvas, ArgTypes } from '@storybook/blocks';
+import TabStepList from './TabStepList';
+
+
+
+
+
+## Overview
+
+TabStepList is the wrapper of the TabStep components. Here you can use the sx prop to add custom styles for the TabSteps.
+
+## Props
+
+
+
+## Usage
+
+Use the TabStepList to add aria-label and style overrides.
+
+
+ Check also
+ [TabsContainer](../?path=/docs/updated-components-tabs-components-tabscontainer--overview) and
+ [TabStep](../?path=/docs/updated-components-tabs-components-tabstep--overview) as they are needed
+ for the implementation.
+
+
+
+ When using custom tab stepper components for children, use `role='tab'` on every child tab in
+ order for the TabStepList styles to be applied.
+
+
+```js
+ const [selectedKey, setSelectedKey] = React.useState('step_1');
+
+ return (
+ //
+
+ //
+ // Tab 1
+ //
+ //
+ // Tab 2
+ //
+ //
+ // Tab 3
+ //
+
+ //
+
+```
diff --git a/src/components/TabStepper/components/TabStepList/TabStepList.stories.tsx b/src/components/TabStepper/components/TabStepList/TabStepList.stories.tsx
new file mode 100644
index 000000000..32d7db1fd
--- /dev/null
+++ b/src/components/TabStepper/components/TabStepList/TabStepList.stories.tsx
@@ -0,0 +1,13 @@
+import TabStepList from '.';
+
+export default {
+ title: 'Updated Components/Tabs/Components/TabStepList',
+ component: TabStepList,
+
+ parameters: {
+ storyshots: {
+ disable: true,
+ },
+ controls: { disable: true },
+ },
+};
diff --git a/src/components/TabStepper/components/TabStepList/TabStepList.style.ts b/src/components/TabStepper/components/TabStepList/TabStepList.style.ts
new file mode 100644
index 000000000..62a3ae208
--- /dev/null
+++ b/src/components/TabStepper/components/TabStepList/TabStepList.style.ts
@@ -0,0 +1,98 @@
+import type { CSSObject } from '@emotion/react';
+import { css } from '@emotion/react';
+
+import type { Theme } from '~/theme';
+
+export const containerStyles = (sx?: CSSObject) => (theme: Theme) =>
+ css`
+ display: flex;
+
+ [role='tab'] {
+ position: relative;
+ width: fit-content;
+ ${theme.tokens.typography.get('normal.body01')}
+ }
+
+ [role='tab'][data-selected] {
+ ${theme.tokens.typography.get('normal.title01')}
+ }
+
+ [role='tab']:not([data-selected]):hover {
+ background: ${theme.tokens.colors.get('backgroundColor.alt')};
+ transition: background ease-in-out 0.2s;
+ }
+
+ [role='tab'][data-focus-visible]:after {
+ content: '';
+ position: absolute;
+
+ border-radius: ${theme.dimension.borderRadius.get('sm')};
+ border: ${theme.dimension.borderWidth.get('focused')} solid
+ ${theme.tokens.colors.get('borderColor.interactive.focused')};
+ }
+
+ [role='tab'][data-status='warning'] {
+ [data-role='title'] {
+ color: ${theme.tokens.colors.get('textColor.default.error')};
+ }
+ }
+
+ [role='tab'][data-selected]:not([data-status='warning']) {
+ [data-role='title'] {
+ color: ${theme.tokens.colors.get('textColor.default.active')};
+ }
+ }
+
+ &[data-orientation='horizontal'] {
+ gap: ${theme.globals.spacing.get('7')};
+ border-bottom: ${theme.globals.borderWidth.get('2')} solid
+ ${theme.tokens.colors.get('borderColor.decorative.default')};
+
+ [role='tab'] {
+ padding: ${theme.globals.spacing.get('3')};
+ }
+
+ [role='tab']:after {
+ inset: -3px -8px;
+ }
+
+ [role='tab'][data-selected] {
+ border-bottom: ${theme.globals.borderWidth.get('2')} solid
+ ${theme.tokens.colors.get('borderColor.interactive.active')};
+
+ &[data-status='warning'] {
+ border-color: ${theme.tokens.colors.get('borderColor.interactive.error')};
+ }
+
+ margin-bottom: -${theme.globals.borderWidth.get('2')};
+ }
+ }
+
+ &[data-orientation='vertical'] {
+ flex-direction: column;
+ gap: ${theme.globals.spacing.get('6')};
+ border-left: ${theme.globals.borderWidth.get('2')} solid
+ ${theme.tokens.colors.get('borderColor.decorative.default')};
+
+ [role='tab'][data-focus-visible]:after {
+ inset: -4px -2px;
+ }
+
+ [role='tab'] {
+ padding: ${theme.globals.spacing.get('4')} ${theme.globals.spacing.get('5')};
+ }
+
+ [role='tab'][data-selected] {
+ border-left: ${theme.globals.borderWidth.get('2')} solid
+ ${theme.tokens.colors.get('borderColor.interactive.active')};
+
+ &[data-status='warning'] {
+ border-color: ${theme.tokens.colors.get('indicators.error')};
+ }
+
+ margin-left: -${theme.globals.borderWidth.get('2')};
+ }
+ }
+
+ ${sx};
+ `;
diff --git a/src/components/TabStepper/components/TabStepList/TabStepList.tsx b/src/components/TabStepper/components/TabStepList/TabStepList.tsx
new file mode 100644
index 000000000..78843666f
--- /dev/null
+++ b/src/components/TabStepper/components/TabStepList/TabStepList.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { TabList as AriaTabList } from 'react-aria-components';
+
+import { containerStyles } from './TabStepList.style';
+import type { TabStepListProps } from '../../types';
+
+const TabStepList = React.forwardRef((props, ref) => {
+ const { children, sx, ...rest } = props;
+
+ return (
+
+ {children}
+
+ );
+});
+
+TabStepList.displayName = 'TabStepList';
+
+export default TabStepList;
diff --git a/src/components/TabStepper/components/TabStepList/index.ts b/src/components/TabStepper/components/TabStepList/index.ts
new file mode 100644
index 000000000..2664d3964
--- /dev/null
+++ b/src/components/TabStepper/components/TabStepList/index.ts
@@ -0,0 +1 @@
+export { default } from './TabStepList';
diff --git a/src/components/TabStepper/components/index.ts b/src/components/TabStepper/components/index.ts
new file mode 100644
index 000000000..0fc4a6653
--- /dev/null
+++ b/src/components/TabStepper/components/index.ts
@@ -0,0 +1,2 @@
+export { default as TabStep } from './TabStep';
+export { default as TabStepList } from './TabStepList';
diff --git a/src/components/TabStepper/constants.tsx b/src/components/TabStepper/constants.tsx
new file mode 100644
index 000000000..873fea06f
--- /dev/null
+++ b/src/components/TabStepper/constants.tsx
@@ -0,0 +1,46 @@
+import type { TabOrientation } from 'index';
+import { TextArea, TextField } from 'index';
+
+import { Radio, RadioGroup } from '../Controls';
+
+export const getContent = (key: string, orientation: TabOrientation) => {
+ if (key === 'step_1') {
+ return (
+
+
+
+
+
+ );
+ }
+
+ if (key === 'step_2') {
+ return (
+
+ Option 1
+ Option 2
+ Option 3
+
+ );
+ }
+
+ return (
+
+
+
+ );
+};
diff --git a/src/components/TabStepper/index.ts b/src/components/TabStepper/index.ts
new file mode 100644
index 000000000..d8d7a2e7a
--- /dev/null
+++ b/src/components/TabStepper/index.ts
@@ -0,0 +1,3 @@
+export { default } from './TabStepper';
+export * from './components';
+export * from './types';
diff --git a/src/components/TabStepper/types.ts b/src/components/TabStepper/types.ts
new file mode 100644
index 000000000..f75edf3fa
--- /dev/null
+++ b/src/components/TabStepper/types.ts
@@ -0,0 +1,35 @@
+import type { CSSObject } from '@emotion/react';
+import type { AriaAttributes } from 'react';
+
+import type { TabsProps } from '../Tabs';
+
+import type { TestProps } from '~/utils/types';
+
+export type TabStepItem = {
+ /** A unique id for the tab step item */
+ id: string;
+ /** The title of the step */
+ title?: string;
+ /** The subtitle of the step */
+ subtitle?: string;
+ /** The status of the step */
+ status?: 'pending' | 'done' | 'warning';
+};
+
+export type StepperProps = {
+ /** The items (steps) */
+ items: TabStepItem[];
+ children?: any;
+} & Pick &
+ TestProps;
+
+export type TabStepProps = {
+ children?: any;
+} & TabStepItem &
+ TestProps;
+
+export type TabStepListProps = {
+ /** Style overrides for TabSteps */
+ sx?: CSSObject;
+ children: any;
+} & AriaAttributes;
diff --git a/src/components/TabStepper/utils/TabStepperStoryComponents.tsx b/src/components/TabStepper/utils/TabStepperStoryComponents.tsx
new file mode 100644
index 000000000..e215ccd1d
--- /dev/null
+++ b/src/components/TabStepper/utils/TabStepperStoryComponents.tsx
@@ -0,0 +1,4 @@
+import type { TabStepItem } from '../types';
+
+/** This is just a dummy component to be used in Storybook for showing the TabItem type on props */
+export const TabStepItemStory: React.FC = () => null;
diff --git a/src/components/Tabs/Tabs.stories.tsx b/src/components/Tabs/Tabs.stories.tsx
index ce2fee268..766ce2450 100644
--- a/src/components/Tabs/Tabs.stories.tsx
+++ b/src/components/Tabs/Tabs.stories.tsx
@@ -50,7 +50,7 @@ export const TabsWithContent = {
items={getItems(false)}
>
{Object.keys(content).map((friend) => (
-
+
{content[friend]}
))}
@@ -81,7 +81,7 @@ export const TabsOrientation = {
items={getItems(false)}
>
{Object.keys(content).map((friend) => (
-
+
{content[friend]}
))}
@@ -109,7 +109,7 @@ export const TabsWithCounter = {
items={getItems(true)}
>
{Object.keys(content).map((friend) => (
-
+
{content[friend]}
))}
@@ -140,7 +140,7 @@ export const Playground = {
items={getItems(hasCounter)}
>
{Object.keys(content).map((friend) => (
-
+
{content[friend]}
))}
diff --git a/src/components/Tabs/Tabs.tsx b/src/components/Tabs/Tabs.tsx
index 1803c288a..981200e30 100644
--- a/src/components/Tabs/Tabs.tsx
+++ b/src/components/Tabs/Tabs.tsx
@@ -29,7 +29,7 @@ const Tabs = React.forwardRef((props, ref) => {
const isActive = id === selectedKey;
return (
-
+
{label}
{Boolean(counter) && (
//
-
+
Tab 1
-
+
Tab 2
-
+
Tab 3
//
diff --git a/src/components/Tabs/components/Tab/Tab.tsx b/src/components/Tabs/components/Tab/Tab.tsx
index abd3ff432..2b8763131 100644
--- a/src/components/Tabs/components/Tab/Tab.tsx
+++ b/src/components/Tabs/components/Tab/Tab.tsx
@@ -5,10 +5,10 @@ import { containerStyles } from './Tab.style';
import type { TabProps } from '../../types';
const Tab = React.forwardRef((props, ref) => {
- const { children, tabId, ...rest } = props;
+ const { children, ...rest } = props;
return (
-
+
{children}
);
diff --git a/src/components/Tabs/components/TabList/TabList.mdx b/src/components/Tabs/components/TabList/TabList.mdx
index d4e45444f..21130bc1c 100644
--- a/src/components/Tabs/components/TabList/TabList.mdx
+++ b/src/components/Tabs/components/TabList/TabList.mdx
@@ -46,13 +46,13 @@ Use the TabList to add aria-label and style overrides.
// onSelectionChange={setSelectedKey}
// >
- //
+ //
// Tab 1
//
- //
+ //
// Tab 2
//
- //
+ //
// Tab 3
//
diff --git a/src/components/Tabs/components/TabPanel/TabPanel.mdx b/src/components/Tabs/components/TabPanel/TabPanel.mdx
index 9d7d22c6c..ccb919736 100644
--- a/src/components/Tabs/components/TabPanel/TabPanel.mdx
+++ b/src/components/Tabs/components/TabPanel/TabPanel.mdx
@@ -24,7 +24,7 @@ TabPanel component is used to conditionally render the content that corresponds
Use TabPanels as children of (monolith) Tabs or under Tab components in a composition to toggle content when selecting tabs.
-The tabId should be the same as in the Tab component that the TabPanel corresponds to
+The id should be the same as in the Tab component that the TabPanel corresponds to
```js
const [selectedKey, setSelectedKey] = React.useState('tab_1');
@@ -36,18 +36,18 @@ Use TabPanels as children of (monolith) Tabs or under Tab components in a compos
// onSelectionChange={setSelectedKey}
// >
//
- //
+ //
// Tab 1
//
- //
+ //
// Tab 2
//
- //
+ //
// Tab 3
//
- This is Tab 1 content
- This is Tab 2 content
- This is Tab 3 content
+ This is Tab 1 content
+ This is Tab 2 content
+ This is Tab 3 content
//
//
diff --git a/src/components/Tabs/components/TabPanel/TabPanel.tsx b/src/components/Tabs/components/TabPanel/TabPanel.tsx
index 690b6672c..21d9ad7ec 100644
--- a/src/components/Tabs/components/TabPanel/TabPanel.tsx
+++ b/src/components/Tabs/components/TabPanel/TabPanel.tsx
@@ -4,10 +4,10 @@ import { TabPanel as ReactAriaTabPanel } from 'react-aria-components';
import type { TabPanelProps } from '../../types';
const TabPanel = React.forwardRef((props, ref) => {
- const { children, tabId, ...rest } = props;
+ const { children, ...rest } = props;
return (
-
+
{children}
);
diff --git a/src/components/Tabs/components/TabsContainer/TabsContainer.mdx b/src/components/Tabs/components/TabsContainer/TabsContainer.mdx
index f53c4e2c5..af3b1811f 100644
--- a/src/components/Tabs/components/TabsContainer/TabsContainer.mdx
+++ b/src/components/Tabs/components/TabsContainer/TabsContainer.mdx
@@ -14,7 +14,7 @@ import TabsContainer from './TabsContainer';
## Overview
-TabsContainer is the root component of the Tabs. It contains the orientation and selection states.
+TabsContainer is the root component of the Tabs and TabStepper. It contains the orientation and selection states.
## Props
@@ -24,10 +24,12 @@ TabsContainer is the root component of the Tabs. It contains the orientation and
Use a state for the selectedKey and pass the state as props to TabsContainer
+### Tabs
+
Check also [TabsList](../?path=/docs/updated-components-tabs-components-tablist--overview) and
[Tab](../?path=/docs/updated-components-tabs-components-tab--overview) as they are needed for the
- implementation.
+ implementation of Tabs
```js
@@ -40,16 +42,48 @@ Use a state for the selectedKey and pass the state as props to TabsContainer
onSelectionChange={setSelectedKey}
>
//
- //
+ //
// Tab 1
//
- //
+ //
// Tab 2
//
- //
+ //
// Tab 3
//
//
```
+
+### TabStepper
+
+
+ Check also [TabStepList](../?path=/docs/updated-components-tabs-components-tabsteplist--overview)
+ and [TabStep](../?path=/docs/updated-components-tabs-components-tabstep--overview) as they are
+ needed for the implementation of TabStepper
+
+
+```js
+ const [selectedKey, setSelectedKey] = React.useState('step_1');
+
+ return (
+
+ //
+ //
+ // Tab 1
+ //
+ //
+ // Tab 2
+ //
+ //
+ // Tab 3
+ //
+ //
+
+
+```
diff --git a/src/components/Tabs/components/TabsContainer/TabsContainer.style.ts b/src/components/Tabs/components/TabsContainer/TabsContainer.style.ts
index 88e640678..487b58d90 100644
--- a/src/components/Tabs/components/TabsContainer/TabsContainer.style.ts
+++ b/src/components/Tabs/components/TabsContainer/TabsContainer.style.ts
@@ -3,7 +3,9 @@ import { css } from '@emotion/react';
import type { TabOrientation } from '../../types';
export const tabsContainerStyles = (orientation: TabOrientation) => css`
- width: fit-content;
display: flex;
flex-direction: ${orientation === 'horizontal' ? 'column' : 'row'};
+
+ ${orientation === 'horizontal' && `width: fit-content;`}
+ ${orientation === 'vertical' && `height: fit-content;`}
`;
diff --git a/src/components/Tabs/types.ts b/src/components/Tabs/types.ts
index 32713329e..39cd75940 100644
--- a/src/components/Tabs/types.ts
+++ b/src/components/Tabs/types.ts
@@ -9,7 +9,7 @@ export type { Orientation as TabOrientation } from 'react-aria';
export type { Key as TabKey } from 'react-aria-components';
export type TabItem = {
- /** A unique if for the tab item */
+ /** A unique id for the tab item */
id: string;
/** The label of the tab */
label: string;
@@ -32,7 +32,7 @@ export type TabsProps = {
export type TabsContainerProps = {
/** The orientation of the Tab */
- orientation: TabOrientation;
+ orientation?: TabOrientation;
/** The id of the selected tab */
selectedKey: TabKey;
/** Callback to change the selected tab */
@@ -42,7 +42,7 @@ export type TabsContainerProps = {
export type TabProps = {
/** The id of the tab; it's also used as an indicator of the tab when using selection state */
- tabId?: string;
+ id: string;
children: any;
};
@@ -54,7 +54,7 @@ export type TabListProps = {
export type TabPanelProps = {
/** The id of the tab the content corresponds to */
- tabId: string;
+ id: string;
/** The content of the tab panel */
children: any;
};
diff --git a/src/index.ts b/src/index.ts
index 26f1c42c1..36ff9c062 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -103,6 +103,8 @@ export { default as Tag } from './components/Tag';
export * from './components/Tag';
export { default as Tabs } from './components/Tabs';
export * from './components/Tabs';
+export { default as TabStepper } from './components/TabStepper';
+export * from './components/TabStepper';
export { default as TextField } from './components/TextField';
export * from './components/TextField';
export { default as Search } from './components/Search';