UNPKG

funda-ui

Version:

React components using pure Bootstrap 5+ which does not contain any external style and script libraries.

251 lines (249 loc) 6.79 kB
/* ====================================================== <!-- Stepper --> /* ====================================================== */ .stepper-container { --stepper-color-default: #333; --stepper-color-active: white; --stepper-color-complete: #2563eb; --stepper-indicator-default: white; --stepper-indicator-active: #2563eb; --stepper-indicator-complete: #22c55e; --stepper-border-default: #ccc; --stepper-border-active: #2563eb; --stepper-border-complete: #22c55e; --stepper-line-default: #dfdfdf; --stepper-line-active: #2563eb; --stepper-line-complete: #22c55e; --stepper-indicator-font-size: 0.875rem; --stepper-indicator-offset: 60px; --stepper-title-size: 0.875rem; --stepper-indicator-size: 32px; position: relative; /* Navigation Header (only horizontal) */ /* Main Navigation - Each step item (with circle + title) */ /* Line */ /* Indicator */ /* Title */ /* Panels Area */ /* Buttons */ /* Panel */ } .stepper-container .stepper-header { display: flex; align-items: flex-start; flex-wrap: nowrap; position: relative; max-width: calc(100% - var(--stepper-indicator-size)); /* background line */ } .stepper-container .stepper-header::before { content: ""; position: absolute; top: 16px; /* Subtract the height of the title */ left: 0; right: 0; height: 2px; background-color: var(--stepper-line-default); z-index: 1; width: 100%; } .stepper-container .stepper-header::after { content: ""; position: absolute; top: 16px; /* Subtract the height of the title */ left: 0; height: 2px; background-color: var(--stepper-line-complete); z-index: 2; transition: width 0.3s ease-in-out; width: 0; } .stepper-container .stepper-header::after { width: var(--stepper-progress-width, 0%); max-width: 100%; } .stepper-container .step-item { flex: none; display: flex; flex-direction: column; align-items: center; max-width: 0; position: relative; z-index: 3; } .stepper-container .step-item.step-item--clickable { cursor: pointer; } .stepper-container .step-line { flex: 1; height: 2px; background-color: var(--stepper-line-default); margin: 0 4px; position: relative; top: -10px; z-index: 0; overflow: hidden; opacity: 0; } .stepper-container .step-line--active { background-color: var(--stepper-line-default); } .stepper-container .step-line--complete { background-color: var(--stepper-line-default); } .stepper-container .step-line::after { content: ""; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--stepper-line-complete); transform: scaleX(0); transform-origin: left; transition: transform 0.3s ease-in-out; } .stepper-container .step-line--active::after, .stepper-container .step-line--complete::after { transform: scaleX(1); } .stepper-container .step-indicator { width: var(--stepper-indicator-size); height: var(--stepper-indicator-size); margin: 0 auto 0.25rem; border-radius: 9999px; display: flex; align-items: center; justify-content: center; border: 2px solid #ccc; font-size: var(--stepper-indicator-font-size); /* default */ background-color: var(--stepper-indicator-default); color: var(--stepper-color-default); border-color: var(--stepper-border-default); } .stepper-container .step-indicator--active { background-color: var(--stepper-indicator-active); color: var(--stepper-color-active); border-color: var(--stepper-border-active); } .stepper-container .step-indicator--complete { background-color: var(--stepper-indicator-complete); color: var(--stepper-color-active); border-color: var(--stepper-border-complete); } .stepper-container .step-title { white-space: nowrap; font-size: var(--stepper-title-size); margin-left: calc(var(--stepper-indicator-offset) / 2); /* default */ color: var(--stepper-color-default); } .stepper-container .step-title--active { color: var(--stepper-indicator-active); } .stepper-container .step-title--complete { color: var(--stepper-indicator-complete); } .stepper-container .stepper-buttons { display: flex; justify-content: space-between; margin-top: 1rem; } .stepper-container .stepper-panel { width: 100%; } .stepper-container .stepper-panel-header { font-size: 1.25rem; font-weight: bold; margin-bottom: 1rem; display: none; } .stepper-container .stepper-panel-content { width: 100%; } /*------ Verticle ------*/ .stepper-container.stepper-container--vertical { display: flex; flex-direction: column; gap: 2.5rem; /* line length */ max-height: calc(100% - var(--stepper-indicator-size)); /* background line */ /* Layout */ /* Title */ /* Panel */ /* Line */ } .stepper-container.stepper-container--vertical::before { content: ""; position: absolute; top: 0; left: calc(var(--stepper-indicator-size) / 2); width: 2px; height: 100%; background-color: var(--stepper-line-default); z-index: 1; } .stepper-container.stepper-container--vertical::after { content: ""; position: absolute; top: 0; left: calc(var(--stepper-indicator-size) / 2); width: 2px; background-color: var(--stepper-line-complete); z-index: 2; transition: height 0.3s ease-in-out; height: 0; } .stepper-container.stepper-container--vertical::after { height: var(--stepper-progress-height, 0%); max-height: 100%; } .stepper-container.stepper-container--vertical .vertical-step-row { display: flex; align-items: flex-start; } .stepper-container.stepper-container--vertical .vertical-step-left { flex-shrink: 0; width: var(--stepper-indicator-size); height: var(--stepper-indicator-size); position: relative; /* Main Navigation - Each step item (with circle + title) */ /* Line */ } .stepper-container.stepper-container--vertical .vertical-step-left .step-item { margin-top: 0; } .stepper-container.stepper-container--vertical .vertical-step-left .step-line { position: absolute; left: 20px; opacity: 0; } .stepper-container.stepper-container--vertical .vertical-step-right { flex: 1; left: 70px; width: calc(100% - 70px); position: absolute; top: 0; /* required */ } .stepper-container.stepper-container--vertical .step-title { display: none; margin-left: 0.3rem; } .stepper-container.stepper-container--vertical .stepper-panel-header { display: block; } .stepper-container.stepper-container--vertical .step-line { flex: auto; width: 2px; height: 40px; margin-top: 4px; top: auto; left: -24px; } .stepper-container.stepper-container--vertical .step-line::after { transform-origin: top; transform: scaleY(0); } .stepper-container.stepper-container--vertical .step-line--active::after, .stepper-container.stepper-container--vertical .step-line--complete::after { transform: scaleY(1); }