voa-ds-core 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/icons-zJ6d3Dsx.js +43 -0
- package/dist/cjs/icons-zJ6d3Dsx.js.map +1 -0
- package/dist/cjs/index-TzstRlIU.js +1895 -0
- package/dist/cjs/index-TzstRlIU.js.map +1 -0
- package/dist/cjs/index.cjs.js +3 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +13 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/voa-accordion.cjs.entry.js +75 -0
- package/dist/cjs/voa-accordion.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-alert.cjs.entry.js +73 -0
- package/dist/cjs/voa-alert.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-avatar.cjs.entry.js +80 -0
- package/dist/cjs/voa-avatar.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-badge.cjs.entry.js +99 -0
- package/dist/cjs/voa-badge.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-breadcrumbs-divider.cjs.entry.js +40 -0
- package/dist/cjs/voa-breadcrumbs-divider.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-breadcrumbs-item.cjs.entry.js +27 -0
- package/dist/cjs/voa-breadcrumbs-item.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-breadcrumbs.cjs.entry.js +26 -0
- package/dist/cjs/voa-breadcrumbs.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-button.cjs.entry.js +90 -0
- package/dist/cjs/voa-button.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-card.cjs.entry.js +18 -0
- package/dist/cjs/voa-card.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-checkbox.cjs.entry.js +124 -0
- package/dist/cjs/voa-checkbox.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-container-multi-select.cjs.entry.js +90 -0
- package/dist/cjs/voa-container-multi-select.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-datepicker.cjs.entry.js +22 -0
- package/dist/cjs/voa-datepicker.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-drawer.cjs.entry.js +23 -0
- package/dist/cjs/voa-drawer.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-dropdown.cjs.entry.js +27 -0
- package/dist/cjs/voa-dropdown.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-input-addon.cjs.entry.js +123 -0
- package/dist/cjs/voa-input-addon.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-input.cjs.entry.js +191 -0
- package/dist/cjs/voa-input.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-keybinding.cjs.entry.js +30 -0
- package/dist/cjs/voa-keybinding.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-link.cjs.entry.js +19 -0
- package/dist/cjs/voa-link.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-list.cjs.entry.js +19 -0
- package/dist/cjs/voa-list.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-modal.cjs.entry.js +23 -0
- package/dist/cjs/voa-modal.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-option.cjs.entry.js +85 -0
- package/dist/cjs/voa-option.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-pagination-item.cjs.entry.js +53 -0
- package/dist/cjs/voa-pagination-item.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-pagination.cjs.entry.js +82 -0
- package/dist/cjs/voa-pagination.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-progress.cjs.entry.js +19 -0
- package/dist/cjs/voa-progress.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-radio.cjs.entry.js +61 -0
- package/dist/cjs/voa-radio.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-select-base.cjs.entry.js +177 -0
- package/dist/cjs/voa-select-base.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-select.cjs.entry.js +142 -0
- package/dist/cjs/voa-select.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-skeleton.cjs.entry.js +24 -0
- package/dist/cjs/voa-skeleton.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-stepper.cjs.entry.js +26 -0
- package/dist/cjs/voa-stepper.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-switch.cjs.entry.js +107 -0
- package/dist/cjs/voa-switch.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-tab-item.cjs.entry.js +85 -0
- package/dist/cjs/voa-tab-item.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-tab.cjs.entry.js +129 -0
- package/dist/cjs/voa-tab.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-table.cjs.entry.js +20 -0
- package/dist/cjs/voa-table.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-tag.cjs.entry.js +45 -0
- package/dist/cjs/voa-tag.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-text-area.cjs.entry.js +118 -0
- package/dist/cjs/voa-text-area.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-timepicker.cjs.entry.js +18 -0
- package/dist/cjs/voa-timepicker.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-tooltip-arrow.cjs.entry.js +32 -0
- package/dist/cjs/voa-tooltip-arrow.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-tooltip.cjs.entry.js +78 -0
- package/dist/cjs/voa-tooltip.entry.cjs.js.map +1 -0
- package/dist/cjs/voa-upload.cjs.entry.js +18 -0
- package/dist/cjs/voa-upload.entry.cjs.js.map +1 -0
- package/dist/cjs/voa.cjs.js +25 -0
- package/dist/cjs/voa.cjs.js.map +1 -0
- package/dist/collection/Stories/SaasDashboard.stories.js +527 -0
- package/dist/collection/Stories/SaasDashboard.stories.js.map +1 -0
- package/dist/collection/Stories/styles/voa-radio.styles.js +155 -0
- package/dist/collection/Stories/styles/voa-radio.styles.js.map +1 -0
- package/dist/collection/collection-manifest.json +50 -0
- package/dist/collection/components/GetStarted/AddingNewBrand.stories.js +214 -0
- package/dist/collection/components/GetStarted/AddingNewBrand.stories.js.map +1 -0
- package/dist/collection/components/GetStarted/ComoUsar.stories.js +486 -0
- package/dist/collection/components/GetStarted/ComoUsar.stories.js.map +1 -0
- package/dist/collection/components/GetStarted/GetStarted.stories.js +202 -0
- package/dist/collection/components/GetStarted/GetStarted.stories.js.map +1 -0
- package/dist/collection/components/SaasDashboard/SaasDashboard.stories.js +693 -0
- package/dist/collection/components/SaasDashboard/SaasDashboard.stories.js.map +1 -0
- package/dist/collection/components/Theme/ThemeProvider.js +71 -0
- package/dist/collection/components/Theme/ThemeProvider.js.map +1 -0
- package/dist/collection/components/Theme/generate-css-variables.js +32 -0
- package/dist/collection/components/Theme/generate-css-variables.js.map +1 -0
- package/dist/collection/components/voa-accordion/voa-accordion.css +75 -0
- package/dist/collection/components/voa-accordion/voa-accordion.js +188 -0
- package/dist/collection/components/voa-accordion/voa-accordion.js.map +1 -0
- package/dist/collection/components/voa-accordion/voa-accordion.stories.js +332 -0
- package/dist/collection/components/voa-accordion/voa-accordion.stories.js.map +1 -0
- package/dist/collection/components/voa-alert/voa-alert.css +78 -0
- package/dist/collection/components/voa-alert/voa-alert.js +342 -0
- package/dist/collection/components/voa-alert/voa-alert.js.map +1 -0
- package/dist/collection/components/voa-alert/voa-alert.stories.js +495 -0
- package/dist/collection/components/voa-alert/voa-alert.stories.js.map +1 -0
- package/dist/collection/components/voa-avatar/voa-avatar.css +103 -0
- package/dist/collection/components/voa-avatar/voa-avatar.js +221 -0
- package/dist/collection/components/voa-avatar/voa-avatar.js.map +1 -0
- package/dist/collection/components/voa-avatar/voa-avatar.stories.js +423 -0
- package/dist/collection/components/voa-avatar/voa-avatar.stories.js.map +1 -0
- package/dist/collection/components/voa-badge/voa-badge.css +59 -0
- package/dist/collection/components/voa-badge/voa-badge.js +266 -0
- package/dist/collection/components/voa-badge/voa-badge.js.map +1 -0
- package/dist/collection/components/voa-badge/voa-badge.stories.js +387 -0
- package/dist/collection/components/voa-badge/voa-badge.stories.js.map +1 -0
- package/dist/collection/components/voa-breadcrumbs/voa-breadcrumbs.css +29 -0
- package/dist/collection/components/voa-breadcrumbs/voa-breadcrumbs.js +58 -0
- package/dist/collection/components/voa-breadcrumbs/voa-breadcrumbs.js.map +1 -0
- package/dist/collection/components/voa-breadcrumbs/voa-breadcrumbs.stories.js +410 -0
- package/dist/collection/components/voa-breadcrumbs/voa-breadcrumbs.stories.js.map +1 -0
- package/dist/collection/components/voa-breadcrumbs-divider/voa-breadcrumbs-divider.css +39 -0
- package/dist/collection/components/voa-breadcrumbs-divider/voa-breadcrumbs-divider.js +77 -0
- package/dist/collection/components/voa-breadcrumbs-divider/voa-breadcrumbs-divider.js.map +1 -0
- package/dist/collection/components/voa-breadcrumbs-item/voa-breadcrumbs-item.css +62 -0
- package/dist/collection/components/voa-breadcrumbs-item/voa-breadcrumbs-item.js +92 -0
- package/dist/collection/components/voa-breadcrumbs-item/voa-breadcrumbs-item.js.map +1 -0
- package/dist/collection/components/voa-button/voa-button.css +95 -0
- package/dist/collection/components/voa-button/voa-button.js +292 -0
- package/dist/collection/components/voa-button/voa-button.js.map +1 -0
- package/dist/collection/components/voa-button/voa-button.stories.js +435 -0
- package/dist/collection/components/voa-button/voa-button.stories.js.map +1 -0
- package/dist/collection/components/voa-card/voa-card.css +22 -0
- package/dist/collection/components/voa-card/voa-card.js +19 -0
- package/dist/collection/components/voa-card/voa-card.js.map +1 -0
- package/dist/collection/components/voa-card/voa-card.stories.js +270 -0
- package/dist/collection/components/voa-card/voa-card.stories.js.map +1 -0
- package/dist/collection/components/voa-checkbox/voa-checkbox.css +75 -0
- package/dist/collection/components/voa-checkbox/voa-checkbox.js +275 -0
- package/dist/collection/components/voa-checkbox/voa-checkbox.js.map +1 -0
- package/dist/collection/components/voa-checkbox/voa-checkbox.stories.js +377 -0
- package/dist/collection/components/voa-checkbox/voa-checkbox.stories.js.map +1 -0
- package/dist/collection/components/voa-datepicker/datepicker.css +7 -0
- package/dist/collection/components/voa-datepicker/datepicker.js +53 -0
- package/dist/collection/components/voa-datepicker/datepicker.js.map +1 -0
- package/dist/collection/components/voa-datepicker/datepicker.stories.js +23 -0
- package/dist/collection/components/voa-datepicker/datepicker.stories.js.map +1 -0
- package/dist/collection/components/voa-drawer/drawer.css +16 -0
- package/dist/collection/components/voa-drawer/drawer.js +55 -0
- package/dist/collection/components/voa-drawer/drawer.js.map +1 -0
- package/dist/collection/components/voa-drawer/drawer.stories.js +25 -0
- package/dist/collection/components/voa-drawer/drawer.stories.js.map +1 -0
- package/dist/collection/components/voa-dropdown/dropdown.css +36 -0
- package/dist/collection/components/voa-dropdown/dropdown.js +58 -0
- package/dist/collection/components/voa-dropdown/dropdown.js.map +1 -0
- package/dist/collection/components/voa-dropdown/dropdown.stories.js +23 -0
- package/dist/collection/components/voa-dropdown/dropdown.stories.js.map +1 -0
- package/dist/collection/components/voa-input/voa-input.css +90 -0
- package/dist/collection/components/voa-input/voa-input.js +640 -0
- package/dist/collection/components/voa-input/voa-input.js.map +1 -0
- package/dist/collection/components/voa-input/voa-input.stories.js +448 -0
- package/dist/collection/components/voa-input/voa-input.stories.js.map +1 -0
- package/dist/collection/components/voa-input-addon/voa-input-addon.css +58 -0
- package/dist/collection/components/voa-input-addon/voa-input-addon.js +346 -0
- package/dist/collection/components/voa-input-addon/voa-input-addon.js.map +1 -0
- package/dist/collection/components/voa-input-addon/voa-input-addon.stories.js +380 -0
- package/dist/collection/components/voa-input-addon/voa-input-addon.stories.js.map +1 -0
- package/dist/collection/components/voa-keybinding/voa-keybinding.css +25 -0
- package/dist/collection/components/voa-keybinding/voa-keybinding.js +87 -0
- package/dist/collection/components/voa-keybinding/voa-keybinding.js.map +1 -0
- package/dist/collection/components/voa-keybinding/voa-keybinding.stories.js +241 -0
- package/dist/collection/components/voa-keybinding/voa-keybinding.stories.js.map +1 -0
- package/dist/collection/components/voa-link/link.css +9 -0
- package/dist/collection/components/voa-link/link.js +65 -0
- package/dist/collection/components/voa-link/link.js.map +1 -0
- package/dist/collection/components/voa-link/link.stories.js +21 -0
- package/dist/collection/components/voa-link/link.stories.js.map +1 -0
- package/dist/collection/components/voa-list/list.css +14 -0
- package/dist/collection/components/voa-list/list.js +44 -0
- package/dist/collection/components/voa-list/list.js.map +1 -0
- package/dist/collection/components/voa-list/list.stories.js +16 -0
- package/dist/collection/components/voa-list/list.stories.js.map +1 -0
- package/dist/collection/components/voa-modal/modal.css +40 -0
- package/dist/collection/components/voa-modal/modal.js +55 -0
- package/dist/collection/components/voa-modal/modal.js.map +1 -0
- package/dist/collection/components/voa-modal/modal.stories.js +18 -0
- package/dist/collection/components/voa-modal/modal.stories.js.map +1 -0
- package/dist/collection/components/voa-option/voa-option.css +55 -0
- package/dist/collection/components/voa-option/voa-option.js +222 -0
- package/dist/collection/components/voa-option/voa-option.js.map +1 -0
- package/dist/collection/components/voa-option/voa-option.stories.js +581 -0
- package/dist/collection/components/voa-option/voa-option.stories.js.map +1 -0
- package/dist/collection/components/voa-pagination/voa-pagination-item.css +34 -0
- package/dist/collection/components/voa-pagination/voa-pagination-item.js +137 -0
- package/dist/collection/components/voa-pagination/voa-pagination-item.js.map +1 -0
- package/dist/collection/components/voa-pagination/voa-pagination.css +20 -0
- package/dist/collection/components/voa-pagination/voa-pagination.js +174 -0
- package/dist/collection/components/voa-pagination/voa-pagination.js.map +1 -0
- package/dist/collection/components/voa-pagination/voa-pagination.stories.js +257 -0
- package/dist/collection/components/voa-pagination/voa-pagination.stories.js.map +1 -0
- package/dist/collection/components/voa-progress/progress.css +12 -0
- package/dist/collection/components/voa-progress/progress.js +46 -0
- package/dist/collection/components/voa-progress/progress.js.map +1 -0
- package/dist/collection/components/voa-progress/progress.stories.js +16 -0
- package/dist/collection/components/voa-progress/progress.stories.js.map +1 -0
- package/dist/collection/components/voa-radio/voa-radio.css +82 -0
- package/dist/collection/components/voa-radio/voa-radio.js +227 -0
- package/dist/collection/components/voa-radio/voa-radio.js.map +1 -0
- package/dist/collection/components/voa-radio/voa-radio.stories.js +363 -0
- package/dist/collection/components/voa-radio/voa-radio.stories.js.map +1 -0
- package/dist/collection/components/voa-select/voa-container-multi-select.css +177 -0
- package/dist/collection/components/voa-select/voa-container-multi-select.js +192 -0
- package/dist/collection/components/voa-select/voa-container-multi-select.js.map +1 -0
- package/dist/collection/components/voa-select/voa-container-multi-select.stories.js +218 -0
- package/dist/collection/components/voa-select/voa-container-multi-select.stories.js.map +1 -0
- package/dist/collection/components/voa-select/voa-select-base.css +170 -0
- package/dist/collection/components/voa-select/voa-select-base.js +357 -0
- package/dist/collection/components/voa-select/voa-select-base.js.map +1 -0
- package/dist/collection/components/voa-select/voa-select.css +109 -0
- package/dist/collection/components/voa-select/voa-select.js +449 -0
- package/dist/collection/components/voa-select/voa-select.js.map +1 -0
- package/dist/collection/components/voa-select/voa-select.stories.js +581 -0
- package/dist/collection/components/voa-select/voa-select.stories.js.map +1 -0
- package/dist/collection/components/voa-skeleton/skeleton.css +30 -0
- package/dist/collection/components/voa-skeleton/skeleton.js +90 -0
- package/dist/collection/components/voa-skeleton/skeleton.js.map +1 -0
- package/dist/collection/components/voa-skeleton/skeleton.stories.js +36 -0
- package/dist/collection/components/voa-skeleton/skeleton.stories.js.map +1 -0
- package/dist/collection/components/voa-stepper/stepper.css +23 -0
- package/dist/collection/components/voa-stepper/stepper.js +93 -0
- package/dist/collection/components/voa-stepper/stepper.js.map +1 -0
- package/dist/collection/components/voa-stepper/stepper.stories.js +21 -0
- package/dist/collection/components/voa-stepper/stepper.stories.js.map +1 -0
- package/dist/collection/components/voa-switch/voa-switch.css +81 -0
- package/dist/collection/components/voa-switch/voa-switch.js +232 -0
- package/dist/collection/components/voa-switch/voa-switch.js.map +1 -0
- package/dist/collection/components/voa-switch/voa-switch.stories.js +359 -0
- package/dist/collection/components/voa-switch/voa-switch.stories.js.map +1 -0
- package/dist/collection/components/voa-tab/voa-tab.css +32 -0
- package/dist/collection/components/voa-tab/voa-tab.js +209 -0
- package/dist/collection/components/voa-tab/voa-tab.js.map +1 -0
- package/dist/collection/components/voa-tab/voa-tab.stories.js +405 -0
- package/dist/collection/components/voa-tab/voa-tab.stories.js.map +1 -0
- package/dist/collection/components/voa-tab-item/voa-tab-item.css +52 -0
- package/dist/collection/components/voa-tab-item/voa-tab-item.js +261 -0
- package/dist/collection/components/voa-tab-item/voa-tab-item.js.map +1 -0
- package/dist/collection/components/voa-table/table.css +15 -0
- package/dist/collection/components/voa-table/table.js +63 -0
- package/dist/collection/components/voa-table/table.js.map +1 -0
- package/dist/collection/components/voa-table/table.stories.js +21 -0
- package/dist/collection/components/voa-table/table.stories.js.map +1 -0
- package/dist/collection/components/voa-tag/voa-tag.css +31 -0
- package/dist/collection/components/voa-tag/voa-tag.js +183 -0
- package/dist/collection/components/voa-tag/voa-tag.js.map +1 -0
- package/dist/collection/components/voa-tag/voa-tag.stories.js +347 -0
- package/dist/collection/components/voa-tag/voa-tag.stories.js.map +1 -0
- package/dist/collection/components/voa-text-area/voa-text-area.css +68 -0
- package/dist/collection/components/voa-text-area/voa-text-area.js +519 -0
- package/dist/collection/components/voa-text-area/voa-text-area.js.map +1 -0
- package/dist/collection/components/voa-text-area/voa-text-area.stories.js +390 -0
- package/dist/collection/components/voa-text-area/voa-text-area.stories.js.map +1 -0
- package/dist/collection/components/voa-timepicker/timepicker.css +7 -0
- package/dist/collection/components/voa-timepicker/timepicker.js +42 -0
- package/dist/collection/components/voa-timepicker/timepicker.js.map +1 -0
- package/dist/collection/components/voa-timepicker/timepicker.stories.js +16 -0
- package/dist/collection/components/voa-timepicker/timepicker.stories.js.map +1 -0
- package/dist/collection/components/voa-tooltip/voa-tooltip.css +283 -0
- package/dist/collection/components/voa-tooltip/voa-tooltip.js +230 -0
- package/dist/collection/components/voa-tooltip/voa-tooltip.js.map +1 -0
- package/dist/collection/components/voa-tooltip/voa-tooltip.stories.js +471 -0
- package/dist/collection/components/voa-tooltip/voa-tooltip.stories.js.map +1 -0
- package/dist/collection/components/voa-tooltip-arrow/voa-tooltip-arrow.css +158 -0
- package/dist/collection/components/voa-tooltip-arrow/voa-tooltip-arrow.js +89 -0
- package/dist/collection/components/voa-tooltip-arrow/voa-tooltip-arrow.js.map +1 -0
- package/dist/collection/components/voa-upload/upload.css +28 -0
- package/dist/collection/components/voa-upload/upload.js +19 -0
- package/dist/collection/components/voa-upload/upload.js.map +1 -0
- package/dist/collection/components/voa-upload/upload.stories.js +8 -0
- package/dist/collection/components/voa-upload/upload.stories.js.map +1 -0
- package/dist/collection/icons/arrow.svg +3 -0
- package/dist/collection/icons/bell.svg +1 -0
- package/dist/collection/icons/calendar.svg +1 -0
- package/dist/collection/icons/check.svg +4 -0
- package/dist/collection/icons/chevron-right.svg +3 -0
- package/dist/collection/icons/circle.svg +4 -0
- package/dist/collection/icons/clear.svg +1 -0
- package/dist/collection/icons/close.svg +3 -0
- package/dist/collection/icons/error.svg +3 -0
- package/dist/collection/icons/eye-off.svg +1 -0
- package/dist/collection/icons/eye.svg +1 -0
- package/dist/collection/icons/home.svg +3 -0
- package/dist/collection/icons/index.js +18 -0
- package/dist/collection/icons/index.js.map +1 -0
- package/dist/collection/icons/info.svg +3 -0
- package/dist/collection/icons/loading.svg +1 -0
- package/dist/collection/icons/person.svg +4 -0
- package/dist/collection/icons/resize-handle.svg +3 -0
- package/dist/collection/icons/search.svg +1 -0
- package/dist/collection/icons/settings.svg +1 -0
- package/dist/collection/icons/warning.svg +3 -0
- package/dist/collection/token/base/colors.js +42 -0
- package/dist/collection/token/base/colors.js.map +1 -0
- package/dist/collection/token/base/mediaQueries.js +12 -0
- package/dist/collection/token/base/mediaQueries.js.map +1 -0
- package/dist/collection/token/base/radius.js +8 -0
- package/dist/collection/token/base/radius.js.map +1 -0
- package/dist/collection/token/base/spacing.js +13 -0
- package/dist/collection/token/base/spacing.js.map +1 -0
- package/dist/collection/token/branding/coi.js +58 -0
- package/dist/collection/token/branding/coi.js.map +1 -0
- package/dist/collection/token/branding/devops.js +58 -0
- package/dist/collection/token/branding/devops.js.map +1 -0
- package/dist/collection/token/branding/godrive.js +58 -0
- package/dist/collection/token/branding/godrive.js.map +1 -0
- package/dist/collection/token/branding/index.js +9 -0
- package/dist/collection/token/branding/index.js.map +1 -0
- package/dist/collection/token/branding/type.js +2 -0
- package/dist/collection/token/branding/type.js.map +1 -0
- package/dist/collection/token/colors.js +84 -0
- package/dist/collection/token/colors.js.map +1 -0
- package/dist/collection/tokens/global.css +867 -0
- package/dist/collection/tokens/voa-tokens.css +776 -0
- package/dist/collection/utils/icons.js +35 -0
- package/dist/collection/utils/icons.js.map +1 -0
- package/dist/collection/utils/utils.js +4 -0
- package/dist/collection/utils/utils.js.map +1 -0
- package/dist/custom-elements/index.d.ts +33 -0
- package/dist/custom-elements/index.js +1463 -0
- package/dist/custom-elements/index.js.map +1 -0
- package/dist/custom-elements/p-B2P7cgN3.js +125 -0
- package/dist/custom-elements/p-B2P7cgN3.js.map +1 -0
- package/dist/custom-elements/p-CQr0ZKZZ.js +75 -0
- package/dist/custom-elements/p-CQr0ZKZZ.js.map +1 -0
- package/dist/custom-elements/p-Cp28eWhS.js +40 -0
- package/dist/custom-elements/p-Cp28eWhS.js.map +1 -0
- package/dist/custom-elements/p-DKnM_Ozb.js +207 -0
- package/dist/custom-elements/p-DKnM_Ozb.js.map +1 -0
- package/dist/custom-elements/p-DPyVgztA.js +51 -0
- package/dist/custom-elements/p-DPyVgztA.js.map +1 -0
- package/dist/custom-elements/p-Dto9R8Te.js +117 -0
- package/dist/custom-elements/p-Dto9R8Te.js.map +1 -0
- package/dist/custom-elements/voa-accordion.d.ts +11 -0
- package/dist/custom-elements/voa-accordion.js +104 -0
- package/dist/custom-elements/voa-accordion.js.map +1 -0
- package/dist/custom-elements/voa-alert.d.ts +11 -0
- package/dist/custom-elements/voa-alert.js +111 -0
- package/dist/custom-elements/voa-alert.js.map +1 -0
- package/dist/custom-elements/voa-avatar.d.ts +11 -0
- package/dist/custom-elements/voa-avatar.js +108 -0
- package/dist/custom-elements/voa-avatar.js.map +1 -0
- package/dist/custom-elements/voa-badge.d.ts +11 -0
- package/dist/custom-elements/voa-badge.js +9 -0
- package/dist/custom-elements/voa-badge.js.map +1 -0
- package/dist/custom-elements/voa-breadcrumbs-divider.d.ts +11 -0
- package/dist/custom-elements/voa-breadcrumbs-divider.js +63 -0
- package/dist/custom-elements/voa-breadcrumbs-divider.js.map +1 -0
- package/dist/custom-elements/voa-breadcrumbs-item.d.ts +11 -0
- package/dist/custom-elements/voa-breadcrumbs-item.js +52 -0
- package/dist/custom-elements/voa-breadcrumbs-item.js.map +1 -0
- package/dist/custom-elements/voa-breadcrumbs.d.ts +11 -0
- package/dist/custom-elements/voa-breadcrumbs.js +49 -0
- package/dist/custom-elements/voa-breadcrumbs.js.map +1 -0
- package/dist/custom-elements/voa-button.d.ts +11 -0
- package/dist/custom-elements/voa-button.js +9 -0
- package/dist/custom-elements/voa-button.js.map +1 -0
- package/dist/custom-elements/voa-card.d.ts +11 -0
- package/dist/custom-elements/voa-card.js +39 -0
- package/dist/custom-elements/voa-card.js.map +1 -0
- package/dist/custom-elements/voa-checkbox.d.ts +11 -0
- package/dist/custom-elements/voa-checkbox.js +149 -0
- package/dist/custom-elements/voa-checkbox.js.map +1 -0
- package/dist/custom-elements/voa-container-multi-select.d.ts +11 -0
- package/dist/custom-elements/voa-container-multi-select.js +122 -0
- package/dist/custom-elements/voa-container-multi-select.js.map +1 -0
- package/dist/custom-elements/voa-datepicker.d.ts +11 -0
- package/dist/custom-elements/voa-datepicker.js +46 -0
- package/dist/custom-elements/voa-datepicker.js.map +1 -0
- package/dist/custom-elements/voa-drawer.d.ts +11 -0
- package/dist/custom-elements/voa-drawer.js +47 -0
- package/dist/custom-elements/voa-drawer.js.map +1 -0
- package/dist/custom-elements/voa-dropdown.d.ts +11 -0
- package/dist/custom-elements/voa-dropdown.js +52 -0
- package/dist/custom-elements/voa-dropdown.js.map +1 -0
- package/dist/custom-elements/voa-input-addon.d.ts +11 -0
- package/dist/custom-elements/voa-input-addon.js +160 -0
- package/dist/custom-elements/voa-input-addon.js.map +1 -0
- package/dist/custom-elements/voa-input.d.ts +11 -0
- package/dist/custom-elements/voa-input.js +237 -0
- package/dist/custom-elements/voa-input.js.map +1 -0
- package/dist/custom-elements/voa-keybinding.d.ts +11 -0
- package/dist/custom-elements/voa-keybinding.js +9 -0
- package/dist/custom-elements/voa-keybinding.js.map +1 -0
- package/dist/custom-elements/voa-link.d.ts +11 -0
- package/dist/custom-elements/voa-link.js +43 -0
- package/dist/custom-elements/voa-link.js.map +1 -0
- package/dist/custom-elements/voa-list.d.ts +11 -0
- package/dist/custom-elements/voa-list.js +42 -0
- package/dist/custom-elements/voa-list.js.map +1 -0
- package/dist/custom-elements/voa-modal.d.ts +11 -0
- package/dist/custom-elements/voa-modal.js +47 -0
- package/dist/custom-elements/voa-modal.js.map +1 -0
- package/dist/custom-elements/voa-option.d.ts +11 -0
- package/dist/custom-elements/voa-option.js +109 -0
- package/dist/custom-elements/voa-option.js.map +1 -0
- package/dist/custom-elements/voa-pagination-item.d.ts +11 -0
- package/dist/custom-elements/voa-pagination-item.js +9 -0
- package/dist/custom-elements/voa-pagination-item.js.map +1 -0
- package/dist/custom-elements/voa-pagination.d.ts +11 -0
- package/dist/custom-elements/voa-pagination.js +116 -0
- package/dist/custom-elements/voa-pagination.js.map +1 -0
- package/dist/custom-elements/voa-progress.d.ts +11 -0
- package/dist/custom-elements/voa-progress.js +42 -0
- package/dist/custom-elements/voa-progress.js.map +1 -0
- package/dist/custom-elements/voa-radio.d.ts +11 -0
- package/dist/custom-elements/voa-radio.js +88 -0
- package/dist/custom-elements/voa-radio.js.map +1 -0
- package/dist/custom-elements/voa-select-base.d.ts +11 -0
- package/dist/custom-elements/voa-select-base.js +9 -0
- package/dist/custom-elements/voa-select-base.js.map +1 -0
- package/dist/custom-elements/voa-select.d.ts +11 -0
- package/dist/custom-elements/voa-select.js +189 -0
- package/dist/custom-elements/voa-select.js.map +1 -0
- package/dist/custom-elements/voa-skeleton.d.ts +11 -0
- package/dist/custom-elements/voa-skeleton.js +48 -0
- package/dist/custom-elements/voa-skeleton.js.map +1 -0
- package/dist/custom-elements/voa-stepper.d.ts +11 -0
- package/dist/custom-elements/voa-stepper.js +51 -0
- package/dist/custom-elements/voa-stepper.js.map +1 -0
- package/dist/custom-elements/voa-switch.d.ts +11 -0
- package/dist/custom-elements/voa-switch.js +131 -0
- package/dist/custom-elements/voa-switch.js.map +1 -0
- package/dist/custom-elements/voa-tab-item.d.ts +11 -0
- package/dist/custom-elements/voa-tab-item.js +114 -0
- package/dist/custom-elements/voa-tab-item.js.map +1 -0
- package/dist/custom-elements/voa-tab.d.ts +11 -0
- package/dist/custom-elements/voa-tab.js +156 -0
- package/dist/custom-elements/voa-tab.js.map +1 -0
- package/dist/custom-elements/voa-table.d.ts +11 -0
- package/dist/custom-elements/voa-table.js +44 -0
- package/dist/custom-elements/voa-table.js.map +1 -0
- package/dist/custom-elements/voa-tag.d.ts +11 -0
- package/dist/custom-elements/voa-tag.js +73 -0
- package/dist/custom-elements/voa-tag.js.map +1 -0
- package/dist/custom-elements/voa-text-area.d.ts +11 -0
- package/dist/custom-elements/voa-text-area.js +155 -0
- package/dist/custom-elements/voa-text-area.js.map +1 -0
- package/dist/custom-elements/voa-timepicker.d.ts +11 -0
- package/dist/custom-elements/voa-timepicker.js +41 -0
- package/dist/custom-elements/voa-timepicker.js.map +1 -0
- package/dist/custom-elements/voa-tooltip-arrow.d.ts +11 -0
- package/dist/custom-elements/voa-tooltip-arrow.js +56 -0
- package/dist/custom-elements/voa-tooltip-arrow.js.map +1 -0
- package/dist/custom-elements/voa-tooltip.d.ts +11 -0
- package/dist/custom-elements/voa-tooltip.js +107 -0
- package/dist/custom-elements/voa-tooltip.js.map +1 -0
- package/dist/custom-elements/voa-upload.d.ts +11 -0
- package/dist/custom-elements/voa-upload.js +39 -0
- package/dist/custom-elements/voa-upload.js.map +1 -0
- package/dist/esm/icons-Bjdap-bM.js +40 -0
- package/dist/esm/icons-Bjdap-bM.js.map +1 -0
- package/dist/esm/index-Dh8480Ec.js +1867 -0
- package/dist/esm/index-Dh8480Ec.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +11 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/voa-accordion.entry.js +73 -0
- package/dist/esm/voa-accordion.entry.js.map +1 -0
- package/dist/esm/voa-alert.entry.js +71 -0
- package/dist/esm/voa-alert.entry.js.map +1 -0
- package/dist/esm/voa-avatar.entry.js +78 -0
- package/dist/esm/voa-avatar.entry.js.map +1 -0
- package/dist/esm/voa-badge.entry.js +97 -0
- package/dist/esm/voa-badge.entry.js.map +1 -0
- package/dist/esm/voa-breadcrumbs-divider.entry.js +38 -0
- package/dist/esm/voa-breadcrumbs-divider.entry.js.map +1 -0
- package/dist/esm/voa-breadcrumbs-item.entry.js +25 -0
- package/dist/esm/voa-breadcrumbs-item.entry.js.map +1 -0
- package/dist/esm/voa-breadcrumbs.entry.js +24 -0
- package/dist/esm/voa-breadcrumbs.entry.js.map +1 -0
- package/dist/esm/voa-button.entry.js +88 -0
- package/dist/esm/voa-button.entry.js.map +1 -0
- package/dist/esm/voa-card.entry.js +16 -0
- package/dist/esm/voa-card.entry.js.map +1 -0
- package/dist/esm/voa-checkbox.entry.js +122 -0
- package/dist/esm/voa-checkbox.entry.js.map +1 -0
- package/dist/esm/voa-container-multi-select.entry.js +88 -0
- package/dist/esm/voa-container-multi-select.entry.js.map +1 -0
- package/dist/esm/voa-datepicker.entry.js +20 -0
- package/dist/esm/voa-datepicker.entry.js.map +1 -0
- package/dist/esm/voa-drawer.entry.js +21 -0
- package/dist/esm/voa-drawer.entry.js.map +1 -0
- package/dist/esm/voa-dropdown.entry.js +25 -0
- package/dist/esm/voa-dropdown.entry.js.map +1 -0
- package/dist/esm/voa-input-addon.entry.js +121 -0
- package/dist/esm/voa-input-addon.entry.js.map +1 -0
- package/dist/esm/voa-input.entry.js +189 -0
- package/dist/esm/voa-input.entry.js.map +1 -0
- package/dist/esm/voa-keybinding.entry.js +28 -0
- package/dist/esm/voa-keybinding.entry.js.map +1 -0
- package/dist/esm/voa-link.entry.js +17 -0
- package/dist/esm/voa-link.entry.js.map +1 -0
- package/dist/esm/voa-list.entry.js +17 -0
- package/dist/esm/voa-list.entry.js.map +1 -0
- package/dist/esm/voa-modal.entry.js +21 -0
- package/dist/esm/voa-modal.entry.js.map +1 -0
- package/dist/esm/voa-option.entry.js +83 -0
- package/dist/esm/voa-option.entry.js.map +1 -0
- package/dist/esm/voa-pagination-item.entry.js +51 -0
- package/dist/esm/voa-pagination-item.entry.js.map +1 -0
- package/dist/esm/voa-pagination.entry.js +80 -0
- package/dist/esm/voa-pagination.entry.js.map +1 -0
- package/dist/esm/voa-progress.entry.js +17 -0
- package/dist/esm/voa-progress.entry.js.map +1 -0
- package/dist/esm/voa-radio.entry.js +59 -0
- package/dist/esm/voa-radio.entry.js.map +1 -0
- package/dist/esm/voa-select-base.entry.js +175 -0
- package/dist/esm/voa-select-base.entry.js.map +1 -0
- package/dist/esm/voa-select.entry.js +140 -0
- package/dist/esm/voa-select.entry.js.map +1 -0
- package/dist/esm/voa-skeleton.entry.js +22 -0
- package/dist/esm/voa-skeleton.entry.js.map +1 -0
- package/dist/esm/voa-stepper.entry.js +24 -0
- package/dist/esm/voa-stepper.entry.js.map +1 -0
- package/dist/esm/voa-switch.entry.js +105 -0
- package/dist/esm/voa-switch.entry.js.map +1 -0
- package/dist/esm/voa-tab-item.entry.js +83 -0
- package/dist/esm/voa-tab-item.entry.js.map +1 -0
- package/dist/esm/voa-tab.entry.js +127 -0
- package/dist/esm/voa-tab.entry.js.map +1 -0
- package/dist/esm/voa-table.entry.js +18 -0
- package/dist/esm/voa-table.entry.js.map +1 -0
- package/dist/esm/voa-tag.entry.js +43 -0
- package/dist/esm/voa-tag.entry.js.map +1 -0
- package/dist/esm/voa-text-area.entry.js +116 -0
- package/dist/esm/voa-text-area.entry.js.map +1 -0
- package/dist/esm/voa-timepicker.entry.js +16 -0
- package/dist/esm/voa-timepicker.entry.js.map +1 -0
- package/dist/esm/voa-tooltip-arrow.entry.js +30 -0
- package/dist/esm/voa-tooltip-arrow.entry.js.map +1 -0
- package/dist/esm/voa-tooltip.entry.js +76 -0
- package/dist/esm/voa-tooltip.entry.js.map +1 -0
- package/dist/esm/voa-upload.entry.js +16 -0
- package/dist/esm/voa-upload.entry.js.map +1 -0
- package/dist/esm/voa.js +21 -0
- package/dist/esm/voa.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/styles/voa-components.css +4839 -0
- package/dist/types/Stories/SaasDashboard.stories.d.ts +22 -0
- package/dist/types/Stories/styles/voa-radio.styles.d.ts +1 -0
- package/dist/types/components/GetStarted/AddingNewBrand.stories.d.ts +4 -0
- package/dist/types/components/GetStarted/ComoUsar.stories.d.ts +4 -0
- package/dist/types/components/GetStarted/GetStarted.stories.d.ts +4 -0
- package/dist/types/components/SaasDashboard/SaasDashboard.stories.d.ts +17 -0
- package/dist/types/components/Theme/ThemeProvider.d.ts +26 -0
- package/dist/types/components/Theme/generate-css-variables.d.ts +2 -0
- package/dist/types/components/voa-accordion/voa-accordion.d.ts +29 -0
- package/dist/types/components/voa-accordion/voa-accordion.stories.d.ts +70 -0
- package/dist/types/components/voa-alert/voa-alert.d.ts +82 -0
- package/dist/types/components/voa-alert/voa-alert.stories.d.ts +88 -0
- package/dist/types/components/voa-avatar/voa-avatar.d.ts +48 -0
- package/dist/types/components/voa-avatar/voa-avatar.stories.d.ts +73 -0
- package/dist/types/components/voa-badge/voa-badge.d.ts +91 -0
- package/dist/types/components/voa-badge/voa-badge.stories.d.ts +21 -0
- package/dist/types/components/voa-breadcrumbs/voa-breadcrumbs.d.ts +13 -0
- package/dist/types/components/voa-breadcrumbs/voa-breadcrumbs.stories.d.ts +57 -0
- package/dist/types/components/voa-breadcrumbs-divider/voa-breadcrumbs-divider.d.ts +19 -0
- package/dist/types/components/voa-breadcrumbs-item/voa-breadcrumbs-item.d.ts +17 -0
- package/dist/types/components/voa-button/voa-button.d.ts +69 -0
- package/dist/types/components/voa-button/voa-button.stories.d.ts +78 -0
- package/dist/types/components/voa-card/voa-card.d.ts +3 -0
- package/dist/types/components/voa-card/voa-card.stories.d.ts +30 -0
- package/dist/types/components/voa-checkbox/voa-checkbox.d.ts +73 -0
- package/dist/types/components/voa-checkbox/voa-checkbox.stories.d.ts +126 -0
- package/dist/types/components/voa-datepicker/datepicker.d.ts +6 -0
- package/dist/types/components/voa-datepicker/datepicker.stories.d.ts +4 -0
- package/dist/types/components/voa-drawer/drawer.d.ts +6 -0
- package/dist/types/components/voa-drawer/drawer.stories.d.ts +4 -0
- package/dist/types/components/voa-dropdown/dropdown.d.ts +8 -0
- package/dist/types/components/voa-dropdown/dropdown.stories.d.ts +4 -0
- package/dist/types/components/voa-input/voa-input.d.ts +153 -0
- package/dist/types/components/voa-input/voa-input.stories.d.ts +140 -0
- package/dist/types/components/voa-input-addon/voa-input-addon.d.ts +70 -0
- package/dist/types/components/voa-input-addon/voa-input-addon.stories.d.ts +139 -0
- package/dist/types/components/voa-keybinding/voa-keybinding.d.ts +22 -0
- package/dist/types/components/voa-keybinding/voa-keybinding.stories.d.ts +58 -0
- package/dist/types/components/voa-link/link.d.ts +5 -0
- package/dist/types/components/voa-link/link.stories.d.ts +4 -0
- package/dist/types/components/voa-list/list.d.ts +4 -0
- package/dist/types/components/voa-list/list.stories.d.ts +4 -0
- package/dist/types/components/voa-modal/modal.d.ts +6 -0
- package/dist/types/components/voa-modal/modal.stories.d.ts +4 -0
- package/dist/types/components/voa-option/voa-option.d.ts +58 -0
- package/dist/types/components/voa-option/voa-option.stories.d.ts +114 -0
- package/dist/types/components/voa-pagination/voa-pagination-item.d.ts +23 -0
- package/dist/types/components/voa-pagination/voa-pagination.d.ts +21 -0
- package/dist/types/components/voa-pagination/voa-pagination.stories.d.ts +28 -0
- package/dist/types/components/voa-progress/progress.d.ts +4 -0
- package/dist/types/components/voa-progress/progress.stories.d.ts +4 -0
- package/dist/types/components/voa-radio/voa-radio.d.ts +56 -0
- package/dist/types/components/voa-radio/voa-radio.stories.d.ts +42 -0
- package/dist/types/components/voa-select/voa-container-multi-select.d.ts +53 -0
- package/dist/types/components/voa-select/voa-container-multi-select.stories.d.ts +33 -0
- package/dist/types/components/voa-select/voa-select-base.d.ts +76 -0
- package/dist/types/components/voa-select/voa-select.d.ts +115 -0
- package/dist/types/components/voa-select/voa-select.stories.d.ts +100 -0
- package/dist/types/components/voa-skeleton/skeleton.d.ts +7 -0
- package/dist/types/components/voa-skeleton/skeleton.stories.d.ts +6 -0
- package/dist/types/components/voa-stepper/stepper.d.ts +9 -0
- package/dist/types/components/voa-stepper/stepper.stories.d.ts +4 -0
- package/dist/types/components/voa-switch/voa-switch.d.ts +28 -0
- package/dist/types/components/voa-switch/voa-switch.stories.d.ts +124 -0
- package/dist/types/components/voa-tab/voa-tab.d.ts +38 -0
- package/dist/types/components/voa-tab/voa-tab.stories.d.ts +81 -0
- package/dist/types/components/voa-tab-item/voa-tab-item.d.ts +66 -0
- package/dist/types/components/voa-table/table.d.ts +5 -0
- package/dist/types/components/voa-table/table.stories.d.ts +4 -0
- package/dist/types/components/voa-tag/voa-tag.d.ts +40 -0
- package/dist/types/components/voa-tag/voa-tag.stories.d.ts +66 -0
- package/dist/types/components/voa-text-area/voa-text-area.d.ts +47 -0
- package/dist/types/components/voa-text-area/voa-text-area.stories.d.ts +74 -0
- package/dist/types/components/voa-timepicker/timepicker.d.ts +4 -0
- package/dist/types/components/voa-timepicker/timepicker.stories.d.ts +4 -0
- package/dist/types/components/voa-tooltip/voa-tooltip.d.ts +54 -0
- package/dist/types/components/voa-tooltip/voa-tooltip.stories.d.ts +69 -0
- package/dist/types/components/voa-tooltip-arrow/voa-tooltip-arrow.d.ts +24 -0
- package/dist/types/components/voa-upload/upload.d.ts +3 -0
- package/dist/types/components/voa-upload/upload.stories.d.ts +4 -0
- package/dist/types/components.d.ts +2731 -0
- package/dist/types/icons/index.d.ts +16 -0
- package/dist/types/stencil-public-runtime.d.ts +1756 -0
- package/dist/types/token/base/colors.d.ts +2 -0
- package/dist/types/token/base/mediaQueries.d.ts +11 -0
- package/dist/types/token/base/radius.d.ts +7 -0
- package/dist/types/token/base/spacing.d.ts +12 -0
- package/dist/types/token/branding/coi.d.ts +2 -0
- package/dist/types/token/branding/devops.d.ts +2 -0
- package/dist/types/token/branding/godrive.d.ts +2 -0
- package/dist/types/token/branding/index.d.ts +2 -0
- package/dist/types/token/branding/type.d.ts +102 -0
- package/dist/types/token/colors.d.ts +16 -0
- package/dist/types/utils/icons.d.ts +45 -0
- package/dist/types/utils/utils.d.ts +1 -0
- package/dist/voa/index.esm.js +2 -0
- package/dist/voa/index.esm.js.map +1 -0
- package/dist/voa/loader.esm.js.map +1 -0
- package/dist/voa/p-01b6b7f5.entry.js +2 -0
- package/dist/voa/p-01b6b7f5.entry.js.map +1 -0
- package/dist/voa/p-0470367c.entry.js +2 -0
- package/dist/voa/p-0470367c.entry.js.map +1 -0
- package/dist/voa/p-17dfc5c3.entry.js +2 -0
- package/dist/voa/p-17dfc5c3.entry.js.map +1 -0
- package/dist/voa/p-19e64a8c.entry.js +2 -0
- package/dist/voa/p-19e64a8c.entry.js.map +1 -0
- package/dist/voa/p-3830cf95.entry.js +2 -0
- package/dist/voa/p-3830cf95.entry.js.map +1 -0
- package/dist/voa/p-3a2ad02b.entry.js +2 -0
- package/dist/voa/p-3a2ad02b.entry.js.map +1 -0
- package/dist/voa/p-41fce5ed.entry.js +2 -0
- package/dist/voa/p-41fce5ed.entry.js.map +1 -0
- package/dist/voa/p-4fdf73ab.entry.js +2 -0
- package/dist/voa/p-4fdf73ab.entry.js.map +1 -0
- package/dist/voa/p-52c0c7b6.entry.js +2 -0
- package/dist/voa/p-52c0c7b6.entry.js.map +1 -0
- package/dist/voa/p-5e5cadf6.entry.js +2 -0
- package/dist/voa/p-5e5cadf6.entry.js.map +1 -0
- package/dist/voa/p-61ff0737.entry.js +2 -0
- package/dist/voa/p-61ff0737.entry.js.map +1 -0
- package/dist/voa/p-6216d4ee.entry.js +2 -0
- package/dist/voa/p-6216d4ee.entry.js.map +1 -0
- package/dist/voa/p-6dbe9bf2.entry.js +2 -0
- package/dist/voa/p-6dbe9bf2.entry.js.map +1 -0
- package/dist/voa/p-77a4cdda.entry.js +2 -0
- package/dist/voa/p-77a4cdda.entry.js.map +1 -0
- package/dist/voa/p-788024a5.entry.js +2 -0
- package/dist/voa/p-788024a5.entry.js.map +1 -0
- package/dist/voa/p-8ba8f569.entry.js +2 -0
- package/dist/voa/p-8ba8f569.entry.js.map +1 -0
- package/dist/voa/p-8e0271ec.entry.js +2 -0
- package/dist/voa/p-8e0271ec.entry.js.map +1 -0
- package/dist/voa/p-8e20a0ce.entry.js +2 -0
- package/dist/voa/p-8e20a0ce.entry.js.map +1 -0
- package/dist/voa/p-9409e8a0.entry.js +2 -0
- package/dist/voa/p-9409e8a0.entry.js.map +1 -0
- package/dist/voa/p-Dh8480Ec.js +3 -0
- package/dist/voa/p-Dh8480Ec.js.map +1 -0
- package/dist/voa/p-Du_B3oI3.js +2 -0
- package/dist/voa/p-Du_B3oI3.js.map +1 -0
- package/dist/voa/p-a9d14872.entry.js +2 -0
- package/dist/voa/p-a9d14872.entry.js.map +1 -0
- package/dist/voa/p-b305463b.entry.js +2 -0
- package/dist/voa/p-b305463b.entry.js.map +1 -0
- package/dist/voa/p-b36a6198.entry.js +2 -0
- package/dist/voa/p-b36a6198.entry.js.map +1 -0
- package/dist/voa/p-b7133c1f.entry.js +2 -0
- package/dist/voa/p-b7133c1f.entry.js.map +1 -0
- package/dist/voa/p-ba6839f4.entry.js +2 -0
- package/dist/voa/p-ba6839f4.entry.js.map +1 -0
- package/dist/voa/p-c1226e48.entry.js +2 -0
- package/dist/voa/p-c1226e48.entry.js.map +1 -0
- package/dist/voa/p-c1481257.entry.js +2 -0
- package/dist/voa/p-c1481257.entry.js.map +1 -0
- package/dist/voa/p-c3867e8e.entry.js +2 -0
- package/dist/voa/p-c3867e8e.entry.js.map +1 -0
- package/dist/voa/p-c9b7e0e5.entry.js +2 -0
- package/dist/voa/p-c9b7e0e5.entry.js.map +1 -0
- package/dist/voa/p-cc7ec720.entry.js +2 -0
- package/dist/voa/p-cc7ec720.entry.js.map +1 -0
- package/dist/voa/p-d5d426cc.entry.js +2 -0
- package/dist/voa/p-d5d426cc.entry.js.map +1 -0
- package/dist/voa/p-dce8719e.entry.js +2 -0
- package/dist/voa/p-dce8719e.entry.js.map +1 -0
- package/dist/voa/p-de0944ab.entry.js +2 -0
- package/dist/voa/p-de0944ab.entry.js.map +1 -0
- package/dist/voa/p-decd2e4d.entry.js +2 -0
- package/dist/voa/p-decd2e4d.entry.js.map +1 -0
- package/dist/voa/p-e56f72ee.entry.js +2 -0
- package/dist/voa/p-e56f72ee.entry.js.map +1 -0
- package/dist/voa/p-f28e13b2.entry.js +2 -0
- package/dist/voa/p-f28e13b2.entry.js.map +1 -0
- package/dist/voa/p-f432a015.entry.js +2 -0
- package/dist/voa/p-f432a015.entry.js.map +1 -0
- package/dist/voa/p-f5c3d298.entry.js +2 -0
- package/dist/voa/p-f5c3d298.entry.js.map +1 -0
- package/dist/voa/p-faec36a5.entry.js +2 -0
- package/dist/voa/p-faec36a5.entry.js.map +1 -0
- package/dist/voa/p-fd7aa1e3.entry.js +2 -0
- package/dist/voa/p-fd7aa1e3.entry.js.map +1 -0
- package/dist/voa/tokens/global.css +867 -0
- package/dist/voa/tokens/voa-tokens.css +776 -0
- package/dist/voa/voa-accordion.entry.esm.js.map +1 -0
- package/dist/voa/voa-alert.entry.esm.js.map +1 -0
- package/dist/voa/voa-avatar.entry.esm.js.map +1 -0
- package/dist/voa/voa-badge.entry.esm.js.map +1 -0
- package/dist/voa/voa-breadcrumbs-divider.entry.esm.js.map +1 -0
- package/dist/voa/voa-breadcrumbs-item.entry.esm.js.map +1 -0
- package/dist/voa/voa-breadcrumbs.entry.esm.js.map +1 -0
- package/dist/voa/voa-button.entry.esm.js.map +1 -0
- package/dist/voa/voa-card.entry.esm.js.map +1 -0
- package/dist/voa/voa-checkbox.entry.esm.js.map +1 -0
- package/dist/voa/voa-container-multi-select.entry.esm.js.map +1 -0
- package/dist/voa/voa-datepicker.entry.esm.js.map +1 -0
- package/dist/voa/voa-drawer.entry.esm.js.map +1 -0
- package/dist/voa/voa-dropdown.entry.esm.js.map +1 -0
- package/dist/voa/voa-input-addon.entry.esm.js.map +1 -0
- package/dist/voa/voa-input.entry.esm.js.map +1 -0
- package/dist/voa/voa-keybinding.entry.esm.js.map +1 -0
- package/dist/voa/voa-link.entry.esm.js.map +1 -0
- package/dist/voa/voa-list.entry.esm.js.map +1 -0
- package/dist/voa/voa-modal.entry.esm.js.map +1 -0
- package/dist/voa/voa-option.entry.esm.js.map +1 -0
- package/dist/voa/voa-pagination-item.entry.esm.js.map +1 -0
- package/dist/voa/voa-pagination.entry.esm.js.map +1 -0
- package/dist/voa/voa-progress.entry.esm.js.map +1 -0
- package/dist/voa/voa-radio.entry.esm.js.map +1 -0
- package/dist/voa/voa-select-base.entry.esm.js.map +1 -0
- package/dist/voa/voa-select.entry.esm.js.map +1 -0
- package/dist/voa/voa-skeleton.entry.esm.js.map +1 -0
- package/dist/voa/voa-stepper.entry.esm.js.map +1 -0
- package/dist/voa/voa-switch.entry.esm.js.map +1 -0
- package/dist/voa/voa-tab-item.entry.esm.js.map +1 -0
- package/dist/voa/voa-tab.entry.esm.js.map +1 -0
- package/dist/voa/voa-table.entry.esm.js.map +1 -0
- package/dist/voa/voa-tag.entry.esm.js.map +1 -0
- package/dist/voa/voa-text-area.entry.esm.js.map +1 -0
- package/dist/voa/voa-timepicker.entry.esm.js.map +1 -0
- package/dist/voa/voa-tooltip-arrow.entry.esm.js.map +1 -0
- package/dist/voa/voa-tooltip.entry.esm.js.map +1 -0
- package/dist/voa/voa-upload.entry.esm.js.map +1 -0
- package/dist/voa/voa.css +1 -0
- package/dist/voa/voa.esm.js +2 -0
- package/dist/voa/voa.esm.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,4839 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VOA Design System - Consolidated Component Styles
|
|
3
|
+
*
|
|
4
|
+
*
|
|
5
|
+
* IMPORTANTE: Importe este arquivo APÓS os tokens:
|
|
6
|
+
* @import 'voa-ds-core/dist/voa/voa.css';
|
|
7
|
+
* @import 'voa-ds-core/components';
|
|
8
|
+
*
|
|
9
|
+
* Versão: 1.0.3
|
|
10
|
+
* Gerado automaticamente em: 2026-01-26T13:39:29.503Z
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/* ============================================
|
|
15
|
+
voa-accordion.external.css
|
|
16
|
+
============================================ */
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Estilização Externa do VoaAccordion
|
|
20
|
+
*
|
|
21
|
+
* Este arquivo demonstra como estilizar o componente voa-accordion
|
|
22
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
23
|
+
*
|
|
24
|
+
* Baseado no design do Figma:
|
|
25
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=397-201
|
|
26
|
+
*
|
|
27
|
+
* Para usar, importe este arquivo após os tokens:
|
|
28
|
+
* * *
|
|
29
|
+
* ============================================
|
|
30
|
+
* ARQUITETURA DE ANIMAÇÃO
|
|
31
|
+
* ============================================
|
|
32
|
+
*
|
|
33
|
+
* Este componente segue a filosofia "Headless" onde:
|
|
34
|
+
* - Stencil fornece a MECÂNICA (estado, estrutura Grid)
|
|
35
|
+
* - Consumidor fornece a MOTION (timing, easing, comportamento)
|
|
36
|
+
*
|
|
37
|
+
* TÉCNICA: CSS Grid Trick
|
|
38
|
+
* - Usa grid-template-rows: 0fr → 1fr para animar altura
|
|
39
|
+
* - Permite animação suave de altura 0 para auto
|
|
40
|
+
* - Mais performático que max-height ou height
|
|
41
|
+
*
|
|
42
|
+
* TIMING:
|
|
43
|
+
* - Conteúdo: 250ms cubic-bezier(0.4, 0, 0.2, 1) - Material Design easing
|
|
44
|
+
* - Ícone: 200ms cubic-bezier(0.4, 0, 0.2, 1) - Interação rápida
|
|
45
|
+
* - Header: 200ms cubic-bezier(0.4, 0, 0.2, 1) - Hover suave
|
|
46
|
+
*
|
|
47
|
+
* ACESSIBILIDADE:
|
|
48
|
+
* - Suporta prefers-reduced-motion para usuários sensíveis a movimento
|
|
49
|
+
* - Remove todas as animações quando reduzido é preferido
|
|
50
|
+
*
|
|
51
|
+
* CUSTOMIZAÇÃO:
|
|
52
|
+
* - Consumidor pode sobrescrever timing via CSS Parts
|
|
53
|
+
* - Consumidor pode adicionar diferentes tipos de animação (slide, fade, etc.)
|
|
54
|
+
* - Consumidor controla acessibilidade globalmente
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/* ============================================
|
|
58
|
+
BASE - Container principal do accordion
|
|
59
|
+
============================================ */
|
|
60
|
+
voa-accordion::part(base) {
|
|
61
|
+
/* Background - Semantic Token */
|
|
62
|
+
background-color: var(--structure-colors-bg-base);
|
|
63
|
+
|
|
64
|
+
/* Padding do container - Semantic Token */
|
|
65
|
+
padding: var(--structure-large-spacing-sm);
|
|
66
|
+
|
|
67
|
+
/* Gap entre header e content (5px conforme Figma) */
|
|
68
|
+
gap: 5px;
|
|
69
|
+
|
|
70
|
+
/* Border quando divider=true */
|
|
71
|
+
border-top: none;
|
|
72
|
+
border-right: none;
|
|
73
|
+
border-bottom: none;
|
|
74
|
+
border-left: none;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Aplicar border-top quando divider=true */
|
|
78
|
+
voa-accordion[divider]::part(base) {
|
|
79
|
+
border-top: 1px solid var(--structure-colors-border-color-secondary);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* ============================================
|
|
83
|
+
HEADER - Botão clicável do cabeçalho
|
|
84
|
+
============================================ */
|
|
85
|
+
voa-accordion::part(header) {
|
|
86
|
+
/* Reset de estilos do botão */
|
|
87
|
+
background: transparent;
|
|
88
|
+
border: none;
|
|
89
|
+
padding: 0;
|
|
90
|
+
margin: 0;
|
|
91
|
+
|
|
92
|
+
/* Tipografia do header (herdada do title) */
|
|
93
|
+
font-family: var(--voa-font-family-sans, var(--font-family-sans, 'Lato', sans-serif));
|
|
94
|
+
|
|
95
|
+
/* Cursor pointer */
|
|
96
|
+
cursor: pointer;
|
|
97
|
+
|
|
98
|
+
/* Transição suave para hover - Matches design system pattern */
|
|
99
|
+
transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
voa-accordion::part(header):hover {
|
|
103
|
+
opacity: 0.8;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
voa-accordion::part(header):focus-visible {
|
|
107
|
+
outline: 2px solid var(--brand-base);
|
|
108
|
+
outline-offset: 2px;
|
|
109
|
+
border-radius: var(--radius-xs);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* ============================================
|
|
113
|
+
HEADER-CONTENT - Container flex do header
|
|
114
|
+
============================================ */
|
|
115
|
+
/* Layout flex já definido no CSS estrutural */
|
|
116
|
+
/* Padding horizontal apenas para size=lg (definido abaixo) */
|
|
117
|
+
|
|
118
|
+
/* Padding horizontal para size=lg */
|
|
119
|
+
voa-accordion[size="lg"]::part(header-content) {
|
|
120
|
+
padding-inline: var(--structure-large-spacing-sm);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* ============================================
|
|
124
|
+
TITLE - Texto do título
|
|
125
|
+
============================================ */
|
|
126
|
+
voa-accordion::part(title) {
|
|
127
|
+
/* Tipografia: 16px, SemiBold (600), line-height 24px */
|
|
128
|
+
font-family: var(--voa-font-family-sans, var(--font-family-sans, 'Lato', sans-serif));
|
|
129
|
+
font-size: var(--typography-base-type-scale-6, 16px);
|
|
130
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
131
|
+
line-height: 24px;
|
|
132
|
+
|
|
133
|
+
/* Cor do texto - Semantic Token */
|
|
134
|
+
color: var(--text-primary);
|
|
135
|
+
|
|
136
|
+
/* Espaçamento */
|
|
137
|
+
margin: 0;
|
|
138
|
+
padding: 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* ============================================
|
|
142
|
+
ICON - Ícone expand/collapse
|
|
143
|
+
============================================ */
|
|
144
|
+
voa-accordion::part(icon) {
|
|
145
|
+
/* Cor do ícone - Semantic Token */
|
|
146
|
+
color: var(--text-primary);
|
|
147
|
+
|
|
148
|
+
/* Tamanho fixo 16x16px */
|
|
149
|
+
width: 16px;
|
|
150
|
+
height: 16px;
|
|
151
|
+
|
|
152
|
+
/* Transição suave para rotação - Consumer controls timing
|
|
153
|
+
Matches design system pattern: 200ms for quick interactions */
|
|
154
|
+
transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Rotação do ícone quando aberto (opcional, para melhor UX) */
|
|
158
|
+
voa-accordion[open]::part(icon) {
|
|
159
|
+
transform: rotate(180deg);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* ============================================
|
|
163
|
+
CONTENT - Container do conteúdo expansível
|
|
164
|
+
============================================ */
|
|
165
|
+
voa-accordion::part(content) {
|
|
166
|
+
/* Tipografia do conteúdo: 14px, Regular (400), line-height 16px */
|
|
167
|
+
font-family: var(--voa-font-family-sans, var(--font-family-sans, 'Lato', sans-serif));
|
|
168
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
169
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
170
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
171
|
+
|
|
172
|
+
/* Cor do texto - Semantic Token */
|
|
173
|
+
color: var(--text-primary);
|
|
174
|
+
|
|
175
|
+
/* Padding padrão (size=md) */
|
|
176
|
+
padding: 0;
|
|
177
|
+
|
|
178
|
+
/* ANIMATION: The visual transition logic lives here.
|
|
179
|
+
Consumer controls timing, easing, and behavior.
|
|
180
|
+
|
|
181
|
+
Using Material Design-inspired easing for smooth height transitions:
|
|
182
|
+
- Height animation: 250ms with ease-out for natural deceleration
|
|
183
|
+
- Opacity: synchronized with height for smooth fade effect
|
|
184
|
+
- Matches design system patterns (similar to switch/button timing) */
|
|
185
|
+
transition: grid-template-rows 250ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
186
|
+
opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
187
|
+
opacity: 1;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* Padding para size=lg conforme Figma */
|
|
191
|
+
voa-accordion[size="lg"]::part(content) {
|
|
192
|
+
padding-inline: var(--structure-large-spacing-sm);
|
|
193
|
+
padding-block: var(--structure-large-radius-xl);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* Espaçamento interno do conteúdo */
|
|
197
|
+
voa-accordion::part(content)>* {
|
|
198
|
+
margin: 0;
|
|
199
|
+
padding: 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* Espaçamento entre parágrafos no conteúdo */
|
|
203
|
+
voa-accordion::part(content)>*+* {
|
|
204
|
+
margin-top: var(--structure-large-spacing-xs);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* ============================================
|
|
208
|
+
ESTADOS E VARIAÇÕES - ANIMAÇÃO
|
|
209
|
+
============================================ */
|
|
210
|
+
|
|
211
|
+
/* Accordion fechado - anima para altura 0
|
|
212
|
+
Usa múltiplos seletores para garantir compatibilidade
|
|
213
|
+
com diferentes formas de controle de estado */
|
|
214
|
+
voa-accordion:not([open])::part(content),
|
|
215
|
+
voa-accordion.voa-accordion--closed::part(content) {
|
|
216
|
+
/* Grid trick: 0fr = altura zero, permitindo animação suave */
|
|
217
|
+
grid-template-rows: 0fr;
|
|
218
|
+
/* Opacidade zero para fade out suave */
|
|
219
|
+
opacity: 0;
|
|
220
|
+
/* Garante que o conteúdo não seja interativo quando fechado */
|
|
221
|
+
pointer-events: none;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* Accordion aberto - anima para altura auto (1fr) */
|
|
225
|
+
voa-accordion[open]::part(content),
|
|
226
|
+
voa-accordion.voa-accordion--open::part(content) {
|
|
227
|
+
/* Grid trick: 1fr = altura automática baseada no conteúdo */
|
|
228
|
+
grid-template-rows: 1fr;
|
|
229
|
+
/* Opacidade total para fade in suave */
|
|
230
|
+
opacity: 1;
|
|
231
|
+
/* Restaura interatividade quando aberto */
|
|
232
|
+
pointer-events: auto;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* ============================================
|
|
236
|
+
ACESSIBILIDADE
|
|
237
|
+
============================================ */
|
|
238
|
+
|
|
239
|
+
/* Focus visível para navegação por teclado */
|
|
240
|
+
voa-accordion::part(header):focus-visible {
|
|
241
|
+
outline: 2px solid var(--brand-base);
|
|
242
|
+
outline-offset: 2px;
|
|
243
|
+
border-radius: var(--radius-xs);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* ============================================
|
|
247
|
+
ACESSIBILIDADE - PREFERS REDUCED MOTION
|
|
248
|
+
============================================ */
|
|
249
|
+
|
|
250
|
+
/* Prefers Reduced Motion - Mandatory for accessibility
|
|
251
|
+
Disables animations for users who prefer reduced motion.
|
|
252
|
+
This ensures the component remains accessible to users with
|
|
253
|
+
vestibular disorders or motion sensitivity. */
|
|
254
|
+
@media (prefers-reduced-motion: reduce) {
|
|
255
|
+
/* Remove todas as transições de animação */
|
|
256
|
+
voa-accordion::part(content) {
|
|
257
|
+
transition: none;
|
|
258
|
+
/* Mantém estados visuais, apenas remove animação */
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
voa-accordion::part(icon) {
|
|
262
|
+
transition: none;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
voa-accordion::part(header) {
|
|
266
|
+
transition: none;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* Garante que o estado final seja aplicado imediatamente */
|
|
270
|
+
voa-accordion:not([open])::part(content),
|
|
271
|
+
voa-accordion.voa-accordion--closed::part(content) {
|
|
272
|
+
grid-template-rows: 0fr;
|
|
273
|
+
opacity: 0;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
voa-accordion[open]::part(content),
|
|
277
|
+
voa-accordion.voa-accordion--open::part(content) {
|
|
278
|
+
grid-template-rows: 1fr;
|
|
279
|
+
opacity: 1;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/* ============================================
|
|
284
|
+
EXEMPLOS DE CUSTOMIZAÇÃO
|
|
285
|
+
============================================ */
|
|
286
|
+
|
|
287
|
+
/* Exemplo: Accordion com cor de fundo customizada */
|
|
288
|
+
/*
|
|
289
|
+
voa-accordion.custom-bg::part(base) {
|
|
290
|
+
background-color: var(--structure-colors-bg-container, #f5f5f5);
|
|
291
|
+
}
|
|
292
|
+
*/
|
|
293
|
+
|
|
294
|
+
/* Exemplo: Accordion com espaçamento customizado */
|
|
295
|
+
/*
|
|
296
|
+
voa-accordion.custom-spacing::part(base) {
|
|
297
|
+
padding: var(--structure-large-spacing-md, 1rem);
|
|
298
|
+
gap: var(--spacing-spacing-sm, 0.5rem);
|
|
299
|
+
}
|
|
300
|
+
*/
|
|
301
|
+
|
|
302
|
+
/* Exemplo: Accordion com tipografia customizada */
|
|
303
|
+
/*
|
|
304
|
+
voa-accordion.custom-typography::part(title) {
|
|
305
|
+
font-size: var(--typography-base-type-scale-5, 20px);
|
|
306
|
+
font-weight: var(--typography-base-type-scale-4-weight, 700);
|
|
307
|
+
}
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
/* ============================================
|
|
311
|
+
voa-alert.external.css
|
|
312
|
+
============================================ */
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Estilização Externa do VoaAlert
|
|
316
|
+
*
|
|
317
|
+
* Este arquivo demonstra como estilizar o componente voa-alert
|
|
318
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
319
|
+
*
|
|
320
|
+
* Baseado no design do Figma:
|
|
321
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=397-2706
|
|
322
|
+
*
|
|
323
|
+
* Para usar, importe este arquivo após os tokens:
|
|
324
|
+
* * */
|
|
325
|
+
|
|
326
|
+
/* ============================================
|
|
327
|
+
BASE - Container principal do alert
|
|
328
|
+
============================================ */
|
|
329
|
+
voa-alert::part(base) {
|
|
330
|
+
/* Border radius padrão - Semantic Token */
|
|
331
|
+
border-radius: var(--radius-sm);
|
|
332
|
+
|
|
333
|
+
/* Border - Separado em propriedades explícitas para permitir override apenas da cor */
|
|
334
|
+
border-width: 1.5px;
|
|
335
|
+
border-style: solid;
|
|
336
|
+
/* Cor padrão da borda - será sobrescrita por regras específicas de tipo */
|
|
337
|
+
border-color: var(--structure-colors-border-color);
|
|
338
|
+
|
|
339
|
+
/* Padding padrão para variant default - Semantic Token */
|
|
340
|
+
padding: var(--spacing-spacing-md);
|
|
341
|
+
|
|
342
|
+
/* Gap entre conteúdo e botões - Semantic Token */
|
|
343
|
+
gap: var(--spacing-spacing-md, 1rem);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/* Variante inline: padding e border-radius diferentes */
|
|
347
|
+
voa-alert[variant="inline"]::part(base) {
|
|
348
|
+
/* Padding inline: 20px horizontal, 14px vertical - conforme Figma */
|
|
349
|
+
padding: var(--spacing-spacing-lg, 14px) var(--spacing-spacing-xl, 20px);
|
|
350
|
+
border-radius: var(--radius-md);
|
|
351
|
+
/* Gap entre elementos na variante inline - Figma especifica 10px */
|
|
352
|
+
gap: 10px;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* ============================================
|
|
356
|
+
CORES POR TIPO - Background e Border
|
|
357
|
+
============================================ */
|
|
358
|
+
|
|
359
|
+
/* Basic */
|
|
360
|
+
voa-alert[type="basic"]::part(base) {
|
|
361
|
+
background-color: var(--structure-colors-bg-container);
|
|
362
|
+
border-color: var(--structure-colors-border-color);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/* Success */
|
|
366
|
+
voa-alert[type="success"]::part(base) {
|
|
367
|
+
background-color: var(--palette-green-green-2);
|
|
368
|
+
border-color: var(--palette-green-green-4);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/* Info */
|
|
372
|
+
voa-alert[type="info"]::part(base) {
|
|
373
|
+
background-color: var(--palette-blue-blue-2);
|
|
374
|
+
border-color: var(--palette-blue-blue-3);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/* Warning */
|
|
378
|
+
voa-alert[type="warning"]::part(base) {
|
|
379
|
+
background-color: var(--palette-yellow-yellow-2);
|
|
380
|
+
border-color: var(--palette-yellow-yellow-4);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/* Warning Inline */
|
|
384
|
+
voa-alert[type="warning-inline"]::part(base) {
|
|
385
|
+
background-color: var(--palette-yellow-yellow-1);
|
|
386
|
+
border-color: var(--palette-yellow-yellow-4);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/* Error */
|
|
390
|
+
voa-alert[type="error"]::part(base) {
|
|
391
|
+
background-color: var(--palette-red-red-2);
|
|
392
|
+
border-color: var(--palette-red-red-4);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/* Variante inline - ajustes de border para alguns tipos */
|
|
396
|
+
voa-alert[variant="inline"][type="info"]::part(base) {
|
|
397
|
+
border-color: var(--palette-blue-blue-4);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
voa-alert[variant="inline"][type="success"]::part(base) {
|
|
401
|
+
border-color: var(--palette-green-green-3);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
voa-alert[variant="inline"][type="error"]::part(base) {
|
|
405
|
+
border-color: var(--palette-red-red-5);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/* ============================================
|
|
409
|
+
CONTENT-WRAPPER - Wrapper do conteúdo principal
|
|
410
|
+
============================================ */
|
|
411
|
+
voa-alert::part(content-wrapper) {
|
|
412
|
+
/* Gap entre ícone e conteúdo - Figma especifica 16px (radius-lg) */
|
|
413
|
+
gap: var(--radius-lg, 16px);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
voa-alert[variant="inline"]::part(content-wrapper) {
|
|
417
|
+
/* Gap entre ícone e conteúdo na variante inline - Figma especifica 10px */
|
|
418
|
+
gap: 10px;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/* ============================================
|
|
422
|
+
ICON - Container do ícone
|
|
423
|
+
============================================ */
|
|
424
|
+
voa-alert::part(icon) {
|
|
425
|
+
/* Tamanho do ícone para variant default */
|
|
426
|
+
width: 24px;
|
|
427
|
+
height: 24px;
|
|
428
|
+
flex-shrink: 0;
|
|
429
|
+
|
|
430
|
+
/* Cor do ícone - será definida por tipo */
|
|
431
|
+
color: currentColor;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
voa-alert[variant="inline"]::part(icon) {
|
|
435
|
+
/* Tamanho do ícone para variant inline */
|
|
436
|
+
width: 20px;
|
|
437
|
+
height: 20px;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/* Cores dos ícones por tipo - Semantic Tokens quando disponíveis */
|
|
441
|
+
voa-alert[type="success"]::part(icon),
|
|
442
|
+
voa-alert[type="success"]::part(icon) svg {
|
|
443
|
+
color: var(--semantic-colors-success);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
voa-alert[type="info"]::part(icon),
|
|
447
|
+
voa-alert[type="info"]::part(icon) svg {
|
|
448
|
+
color: var(--palette-blue-blue-9);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
voa-alert[type="warning"]::part(icon),
|
|
452
|
+
voa-alert[type="warning"]::part(icon) svg,
|
|
453
|
+
voa-alert[type="warning-inline"]::part(icon),
|
|
454
|
+
voa-alert[type="warning-inline"]::part(icon) svg {
|
|
455
|
+
color: var(--palette-yellow-yellow-9);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
voa-alert[type="error"]::part(icon),
|
|
459
|
+
voa-alert[type="error"]::part(icon) svg {
|
|
460
|
+
color: var(--palette-red-red-9);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
voa-alert[type="basic"]::part(icon),
|
|
464
|
+
voa-alert[type="basic"]::part(icon) svg {
|
|
465
|
+
color: var(--palette-gray-gray-6);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/* ============================================
|
|
469
|
+
CONTENT - Container do conteúdo
|
|
470
|
+
============================================ */
|
|
471
|
+
voa-alert::part(content) {
|
|
472
|
+
/* Flex para layout vertical (default) ou horizontal (inline) */
|
|
473
|
+
flex: 1;
|
|
474
|
+
|
|
475
|
+
/* Tipografia base - Design Token */
|
|
476
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
477
|
+
color: var(--text-primary);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/* ============================================
|
|
481
|
+
TITLE - Título do alerta
|
|
482
|
+
============================================ */
|
|
483
|
+
voa-alert::part(title) {
|
|
484
|
+
/* Tipografia - Design Tokens */
|
|
485
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
486
|
+
font-size: var(--typography-base-type-scale-6, 16px);
|
|
487
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
488
|
+
line-height: var(--line-height-body-md, 24px);
|
|
489
|
+
color: var(--text-primary);
|
|
490
|
+
|
|
491
|
+
/* Margin */
|
|
492
|
+
margin: 0;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
voa-alert[variant="inline"]::part(title) {
|
|
496
|
+
/* Tipografia inline - menor */
|
|
497
|
+
font-size: var(--typography-base-type-scale-7, 14px);
|
|
498
|
+
line-height: var(--line-height-body-sm, 16px);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/* ============================================
|
|
502
|
+
DESCRIPTION - Descrição do alerta
|
|
503
|
+
============================================ */
|
|
504
|
+
voa-alert::part(description) {
|
|
505
|
+
/* Tipografia - Design Tokens */
|
|
506
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
507
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
508
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
509
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
510
|
+
color: var(--text-secondary);
|
|
511
|
+
|
|
512
|
+
/* Espaçamento do título - Semantic Token */
|
|
513
|
+
margin-top: var(--spacing-spacing-xs, 4px);
|
|
514
|
+
margin-bottom: 0;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/* ============================================
|
|
518
|
+
CONTENT-INNER - Wrapper interno do conteúdo
|
|
519
|
+
============================================ */
|
|
520
|
+
voa-alert::part(content-inner) {
|
|
521
|
+
/* Layout flex vertical para título e descrição */
|
|
522
|
+
display: flex;
|
|
523
|
+
flex-direction: column;
|
|
524
|
+
gap: 0; /* Gap será controlado via margin-top na descrição */
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/* ============================================
|
|
528
|
+
CLOSE-BUTTON - Botão de fechar
|
|
529
|
+
============================================ */
|
|
530
|
+
voa-alert::part(close-button) {
|
|
531
|
+
/* Tamanho do ícone de fechar para variant default */
|
|
532
|
+
width: 16px;
|
|
533
|
+
height: 16px;
|
|
534
|
+
flex-shrink: 0;
|
|
535
|
+
|
|
536
|
+
/* Cor do ícone de fechar - Primitive Token (não há token semântico para isso) */
|
|
537
|
+
color: var(--palette-gray-gray-6);
|
|
538
|
+
|
|
539
|
+
/* Hover */
|
|
540
|
+
transition: opacity 0.2s ease;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
voa-alert::part(close-button):hover {
|
|
544
|
+
opacity: 0.7;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
voa-alert::part(close-button):focus-visible {
|
|
548
|
+
outline: 2px solid var(--brand-base);
|
|
549
|
+
outline-offset: 2px;
|
|
550
|
+
border-radius: 2px;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
voa-alert[variant="inline"]::part(close-button) {
|
|
554
|
+
/* Tamanho do ícone de fechar para variant inline */
|
|
555
|
+
width: 16px;
|
|
556
|
+
height: 16px;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
/* ============================================
|
|
560
|
+
ACTIONS - Container dos botões de ação
|
|
561
|
+
============================================ */
|
|
562
|
+
voa-alert::part(actions) {
|
|
563
|
+
/* Layout flex para botões */
|
|
564
|
+
display: flex;
|
|
565
|
+
justify-content: flex-end;
|
|
566
|
+
align-items: center;
|
|
567
|
+
|
|
568
|
+
/* Gap entre botões - Semantic Token */
|
|
569
|
+
gap: var(--spacing-spacing-sm, 0.5rem);
|
|
570
|
+
|
|
571
|
+
/* Padding top para separar do conteúdo - Semantic Token */
|
|
572
|
+
padding-top: var(--spacing-spacing-xs);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/* ============================================
|
|
576
|
+
BUTTONS - Estilização via exportparts
|
|
577
|
+
============================================ */
|
|
578
|
+
/*
|
|
579
|
+
* Os botões são expostos via exportparts no voa-alert:
|
|
580
|
+
* - primary-btn-base: Parte "base" do botão primário
|
|
581
|
+
* - secondary-btn-base: Parte "base" do botão secundário (ghost)
|
|
582
|
+
*
|
|
583
|
+
* Isso permite estilizar os botões de fora do Shadow DOM.
|
|
584
|
+
*/
|
|
585
|
+
|
|
586
|
+
/* Base styles for both buttons */
|
|
587
|
+
voa-alert::part(primary-btn-base),
|
|
588
|
+
voa-alert::part(secondary-btn-base) {
|
|
589
|
+
/* Tipografia - Design Tokens */
|
|
590
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
591
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
592
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
593
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
594
|
+
text-align: center;
|
|
595
|
+
|
|
596
|
+
/* Border-radius padrão - Semantic Token */
|
|
597
|
+
border-radius: var(--radius-sm);
|
|
598
|
+
|
|
599
|
+
/* Box-sizing */
|
|
600
|
+
box-sizing: border-box;
|
|
601
|
+
|
|
602
|
+
/* Transição suave para estados hover/active */
|
|
603
|
+
transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
|
|
604
|
+
|
|
605
|
+
/* Padding para size="sm" */
|
|
606
|
+
padding-block: var(--spacing-spacing-xs);
|
|
607
|
+
padding-inline: var(--spacing-spacing-xs);
|
|
608
|
+
min-width: 98px;
|
|
609
|
+
gap: var(--spacing-spacing-xs, 0.25rem);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/* Primary Button */
|
|
613
|
+
voa-alert::part(primary-btn-base) {
|
|
614
|
+
background-color: var(--brand-base);
|
|
615
|
+
color: var(--text-on-primary);
|
|
616
|
+
border: var(--border-width-thin) solid var(--brand-base-50);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
voa-alert::part(primary-btn-base):hover {
|
|
620
|
+
background-color: var(--brand-hover);
|
|
621
|
+
border-color: var(--brand-base-50);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
voa-alert::part(primary-btn-base):active {
|
|
625
|
+
background-color: var(--brand-active);
|
|
626
|
+
border-color: var(--brand-base-50);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
voa-alert::part(primary-btn-base):focus-visible {
|
|
630
|
+
outline: 2px solid var(--brand-base);
|
|
631
|
+
outline-offset: 2px;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/* Secondary/Ghost Button - Com cores de danger */
|
|
635
|
+
voa-alert::part(secondary-btn-base) {
|
|
636
|
+
background-color: transparent;
|
|
637
|
+
color: var(--semantic-colors-danger);
|
|
638
|
+
border: 1px solid transparent;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
voa-alert::part(secondary-btn-base):hover {
|
|
642
|
+
background-color: var(--semantic-colors-danger);
|
|
643
|
+
color: var(--text-on-primary);
|
|
644
|
+
border-color: var(--semantic-colors-danger);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
voa-alert::part(secondary-btn-base):active {
|
|
648
|
+
background-color: var(--semantic-colors-danger);
|
|
649
|
+
color: var(--text-on-primary);
|
|
650
|
+
border-color: var(--semantic-colors-danger);
|
|
651
|
+
opacity: 0.9;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
voa-alert::part(secondary-btn-base):focus-visible {
|
|
655
|
+
outline: 2px solid var(--semantic-colors-danger);
|
|
656
|
+
outline-offset: 2px;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/* ============================================
|
|
660
|
+
voa-avatar.external.css
|
|
661
|
+
============================================ */
|
|
662
|
+
|
|
663
|
+
/**
|
|
664
|
+
* Estilização Externa do VoaAvatar
|
|
665
|
+
*
|
|
666
|
+
* Este arquivo demonstra como estilizar o componente voa-avatar
|
|
667
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
668
|
+
*
|
|
669
|
+
* Baseado no design do Figma:
|
|
670
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=397-2809&t=eEPGXVkQRijr3FMg-4
|
|
671
|
+
*
|
|
672
|
+
* Para usar, importe este arquivo após os tokens:
|
|
673
|
+
* * */
|
|
674
|
+
|
|
675
|
+
/* ============================================
|
|
676
|
+
BASE - Container principal do avatar
|
|
677
|
+
============================================ */
|
|
678
|
+
voa-avatar::part(base) {
|
|
679
|
+
/* Background do avatar - Semantic Token (conforme Figma: bg-elevated) */
|
|
680
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
681
|
+
|
|
682
|
+
/* Border-radius circular - Semantic Token (conforme Figma: radius-round) */
|
|
683
|
+
border-radius: var(--radius-round);
|
|
684
|
+
|
|
685
|
+
/* Shadow conforme Figma: 0px 4px 4px 0px rgba(0,0,0,0.25) */
|
|
686
|
+
box-shadow: var(--voa-shadow-avatar);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/* ============================================
|
|
690
|
+
INITIALS - Texto de iniciais
|
|
691
|
+
============================================ */
|
|
692
|
+
voa-avatar::part(initials) {
|
|
693
|
+
/* Cor do texto - Semantic Token (conforme Figma: text-primary) */
|
|
694
|
+
color: var(--text-primary);
|
|
695
|
+
|
|
696
|
+
/* Font-family (Manrope SemiBold conforme Figma) */
|
|
697
|
+
font-family: var(--font-family-sans, 'Manrope', sans-serif);
|
|
698
|
+
font-weight: var(--typography-base-body-sm-bold-weight); /* SemiBold */
|
|
699
|
+
font-style: normal;
|
|
700
|
+
|
|
701
|
+
/* Line-height */
|
|
702
|
+
line-height: 1;
|
|
703
|
+
|
|
704
|
+
/* Text transform já aplicado no CSS estrutural */
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/* Tamanhos de fonte para iniciais baseados no size do avatar */
|
|
708
|
+
voa-avatar[size="xs"]::part(initials) {
|
|
709
|
+
font-size: var(--avatar-font-size-xs); /* Conforme Figma: 8px para xs */
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
voa-avatar[size="sm"]::part(initials) {
|
|
713
|
+
font-size: var(--avatar-font-size-sm); /* Conforme Figma: 12px para sm */
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
voa-avatar[size="md"]::part(initials) {
|
|
717
|
+
font-size: var(--avatar-font-size-md); /* Conforme Figma: 16px para md */
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
voa-avatar[size="lg"]::part(initials) {
|
|
721
|
+
font-size: var(--avatar-font-size-lg); /* Conforme Figma: 24px para lg */
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
voa-avatar[size="xl"]::part(initials) {
|
|
725
|
+
font-size: var(--avatar-font-size-xl); /* Conforme Figma: 28px para xl */
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/* ============================================
|
|
729
|
+
ICON - Ícone SVG padrão
|
|
730
|
+
============================================ */
|
|
731
|
+
voa-avatar::part(icon) {
|
|
732
|
+
/* Cor do ícone - Primitive Token (conforme Figma: rgba(73, 80, 87, 1) = gray-7) */
|
|
733
|
+
/* Nota: Não há token semântico específico para cor de ícone, usando primitivo */
|
|
734
|
+
color: var(--palette-gray-gray-7);
|
|
735
|
+
|
|
736
|
+
/* Fill será aplicado via currentColor */
|
|
737
|
+
fill: currentColor;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
/* ============================================
|
|
741
|
+
IMAGE - Imagem do avatar
|
|
742
|
+
============================================ */
|
|
743
|
+
voa-avatar::part(image) {
|
|
744
|
+
/* Estilos estruturais já aplicados no CSS do componente */
|
|
745
|
+
/* Apenas garantir que a imagem preencha o container */
|
|
746
|
+
object-fit: cover;
|
|
747
|
+
object-position: center;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/* ============================================
|
|
751
|
+
VARIAÇÕES POR TIPO
|
|
752
|
+
============================================ */
|
|
753
|
+
|
|
754
|
+
/* Avatar tipo photo - sem background (apenas imagem) */
|
|
755
|
+
voa-avatar[type="photo"]::part(base) {
|
|
756
|
+
background-color: transparent;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/* Avatar tipo icon - com background */
|
|
760
|
+
voa-avatar[type="icon"]::part(base) {
|
|
761
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
/* Avatar tipo initials - com background */
|
|
765
|
+
voa-avatar[type="initials"]::part(base) {
|
|
766
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* ============================================
|
|
770
|
+
ACESSIBILIDADE
|
|
771
|
+
============================================ */
|
|
772
|
+
|
|
773
|
+
/* Focus visível para navegação por teclado (se o avatar for interativo) */
|
|
774
|
+
voa-avatar::part(base):focus-visible {
|
|
775
|
+
outline: 2px solid var(--brand-base);
|
|
776
|
+
outline-offset: 2px;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/* ============================================
|
|
780
|
+
voa-badge.external.css
|
|
781
|
+
============================================ */
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* Estilização Externa do VoaBadge
|
|
785
|
+
*
|
|
786
|
+
* Este arquivo demonstra como estilizar o componente voa-badge
|
|
787
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
788
|
+
*
|
|
789
|
+
* Baseado no design do Figma:
|
|
790
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=397-3352
|
|
791
|
+
*
|
|
792
|
+
* Para usar, importe este arquivo após os tokens:
|
|
793
|
+
* * *
|
|
794
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
795
|
+
*
|
|
796
|
+
* Figma Token → Style Dictionary Token
|
|
797
|
+
* --------------------------------------------
|
|
798
|
+
* --structure-colors/bg-container → --structure-colors-bg-container
|
|
799
|
+
* --structure-colors/border-color → --structure-colors-border-color
|
|
800
|
+
* --structure-colors/border-color-secondary → --structure-colors-border-color-secondary
|
|
801
|
+
* --structure-colors/fill-secondary → --structure-colors-fill-secondary
|
|
802
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
803
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
804
|
+
* --spacing/spacing-md → --spacing-spacing-md (16px)
|
|
805
|
+
* --spacing/spacing-lg → --spacing-spacing-lg (24px)
|
|
806
|
+
* --spacing/spacing-xxs → --spacing-spacing-xxs (2px)
|
|
807
|
+
* --radius/radius-xs → --radius-xs (4px)
|
|
808
|
+
* --radius/radius-round → --radius-round (1024px)
|
|
809
|
+
* --semantic-colors/danger → --semantic-colors-danger
|
|
810
|
+
* --asset-colors/text-primary → --text-primary
|
|
811
|
+
* --base/family/family-sans → --font-family-sans
|
|
812
|
+
*/
|
|
813
|
+
|
|
814
|
+
/* ============================================
|
|
815
|
+
BASE - Container principal do badge
|
|
816
|
+
============================================ */
|
|
817
|
+
voa-badge::part(base) {
|
|
818
|
+
/* Background padrão - Semantic Token (conforme Figma: structure-colors/bg-container) */
|
|
819
|
+
background-color: var(--structure-colors-bg-container, #f1f3f5);
|
|
820
|
+
|
|
821
|
+
/* Border padrão - Figma: 1.5px solid */
|
|
822
|
+
border: 1.5px solid var(--structure-colors-border-color, #adb5bd);
|
|
823
|
+
|
|
824
|
+
/* Border-radius padrão para state="default" - Semantic Token (conforme Figma: radius/radius-xs) */
|
|
825
|
+
border-radius: var(--radius-xs, 4px);
|
|
826
|
+
|
|
827
|
+
/* Box-sizing */
|
|
828
|
+
box-sizing: border-box;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/* State: Pill - Border-radius completamente arredondado */
|
|
832
|
+
voa-badge[shape="pill"]::part(base) {
|
|
833
|
+
/* Border-radius pill - Semantic Token (conforme Figma: radius/radius-round = 1024px) */
|
|
834
|
+
border-radius: var(--radius-round, 1024px);
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
/* ============================================
|
|
838
|
+
VARIANTE: ICON-ONLY
|
|
839
|
+
Figma: Type=icon-only
|
|
840
|
+
============================================ */
|
|
841
|
+
|
|
842
|
+
/* Icon-only - Size: md, State: default */
|
|
843
|
+
voa-badge[variant="icon-only"]::part(base) {
|
|
844
|
+
/* Padding uniforme - Figma: spacing-xs (4px) */
|
|
845
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
846
|
+
/* Gap entre elementos - Figma: 4px */
|
|
847
|
+
gap: 4px;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/* Icon-only - Size: sm */
|
|
851
|
+
voa-badge[variant="icon-only"][size="sm"]::part(base) {
|
|
852
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
853
|
+
gap: 4px;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
/* ============================================
|
|
857
|
+
VARIANTE: INDICATOR
|
|
858
|
+
Figma: Type=indicator
|
|
859
|
+
============================================ */
|
|
860
|
+
|
|
861
|
+
/* Indicator - Size: md, State: default */
|
|
862
|
+
voa-badge[variant="indicator"]::part(base),
|
|
863
|
+
voa-badge[variant="indicator"][size="md"]::part(base) {
|
|
864
|
+
/* Padding - Figma: px=spacing-xs (4px), py=spacing-xxs (2px) */
|
|
865
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
866
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
867
|
+
/* Height - Figma: spacing-lg (24px) */
|
|
868
|
+
height: var(--spacing-spacing-lg, 24px);
|
|
869
|
+
/* Max-width - Figma: 24px */
|
|
870
|
+
max-width: 24px;
|
|
871
|
+
/* Gap - Figma: 10px */
|
|
872
|
+
gap: 10px;
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
/* Indicator - Size: sm, State: default */
|
|
876
|
+
voa-badge[variant="indicator"][size="sm"]::part(base) {
|
|
877
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
878
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
879
|
+
/* Size - Figma: spacing-md (16px) x spacing-md (16px) */
|
|
880
|
+
width: var(--spacing-spacing-md, 16px);
|
|
881
|
+
height: var(--spacing-spacing-md, 16px);
|
|
882
|
+
max-width: 24px;
|
|
883
|
+
gap: 10px;
|
|
884
|
+
/* Border color secondary para sm - Figma */
|
|
885
|
+
border-color: var(--structure-colors-border-color-secondary, #dee2e6);
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
/* Indicator - Size: md, State: pill */
|
|
889
|
+
voa-badge[variant="indicator"][shape="pill"]::part(base),
|
|
890
|
+
voa-badge[variant="indicator"][shape="pill"][size="md"]::part(base) {
|
|
891
|
+
padding-block: var(--radius-xs, 4px);
|
|
892
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
893
|
+
height: 24px;
|
|
894
|
+
gap: 10px;
|
|
895
|
+
/* items-start no Figma, portanto align-items: flex-start */
|
|
896
|
+
align-items: flex-start;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
/* Indicator - Size: sm, State: pill */
|
|
900
|
+
voa-badge[variant="indicator"][shape="pill"][size="sm"]::part(base) {
|
|
901
|
+
padding-block: var(--radius-xs, 4px);
|
|
902
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
903
|
+
width: var(--spacing-spacing-md, 16px);
|
|
904
|
+
height: var(--spacing-spacing-md, 16px);
|
|
905
|
+
gap: 10px;
|
|
906
|
+
align-items: flex-start;
|
|
907
|
+
border-color: var(--structure-colors-border-color-secondary, #dee2e6);
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/* ============================================
|
|
911
|
+
VARIANTE: INDICATOR-OVERLAY
|
|
912
|
+
Figma: Type=indicator-overlay (fundo vermelho)
|
|
913
|
+
============================================ */
|
|
914
|
+
|
|
915
|
+
/* Indicator-overlay - Base styles */
|
|
916
|
+
voa-badge[variant="indicator-overlay"]::part(base) {
|
|
917
|
+
/* Background vermelho - Semantic Token (conforme Figma: semantic-colors/danger) */
|
|
918
|
+
background-color: var(--semantic-colors-danger, #e51937);
|
|
919
|
+
/* Border com fill-secondary - Figma */
|
|
920
|
+
border-color: var(--structure-colors-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
/* Indicator-overlay - Size: md, State: default */
|
|
924
|
+
voa-badge[variant="indicator-overlay"][size="md"]::part(base) {
|
|
925
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
926
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
927
|
+
height: var(--spacing-spacing-lg, 24px);
|
|
928
|
+
max-width: 24px;
|
|
929
|
+
gap: 10px;
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
/* Indicator-overlay - Size: sm, State: default */
|
|
933
|
+
voa-badge[variant="indicator-overlay"][size="sm"]::part(base) {
|
|
934
|
+
padding-block: var(--spacing-spacing-xxs, 2px);
|
|
935
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
936
|
+
/* Size fixa 16x16 - Figma */
|
|
937
|
+
width: var(--spacing-spacing-md, 16px);
|
|
938
|
+
height: var(--spacing-spacing-md, 16px);
|
|
939
|
+
max-width: 24px;
|
|
940
|
+
gap: 10px;
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
/* Indicator-overlay - Size: md, State: pill */
|
|
944
|
+
voa-badge[variant="indicator-overlay"][shape="pill"]::part(base),
|
|
945
|
+
voa-badge[variant="indicator-overlay"][shape="pill"][size="md"]::part(base) {
|
|
946
|
+
padding-block: var(--radius-xs, 4px);
|
|
947
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
948
|
+
height: 24px;
|
|
949
|
+
gap: 10px;
|
|
950
|
+
align-items: flex-start;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
/* Indicator-overlay - Size: sm, State: pill */
|
|
954
|
+
voa-badge[variant="indicator-overlay"][shape="pill"][size="sm"]::part(base) {
|
|
955
|
+
padding-block: var(--radius-xs, 4px);
|
|
956
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
957
|
+
width: var(--spacing-spacing-md, 16px);
|
|
958
|
+
height: var(--spacing-spacing-md, 16px);
|
|
959
|
+
gap: 10px;
|
|
960
|
+
align-items: flex-start;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
/* ============================================
|
|
964
|
+
VARIANTE: INDICATOR-ONLY
|
|
965
|
+
Figma: Type=indicator-only (apenas ponto vermelho)
|
|
966
|
+
============================================ */
|
|
967
|
+
|
|
968
|
+
voa-badge[variant="indicator-only"]::part(base) {
|
|
969
|
+
/* Background vermelho - Figma */
|
|
970
|
+
background-color: var(--semantic-colors-danger, #e51937);
|
|
971
|
+
/* Border-radius - Figma: radius-xs (4px) */
|
|
972
|
+
border-radius: var(--radius-xs, 4px);
|
|
973
|
+
/* Tamanho fixo - Figma: spacing-sm (8px) x spacing-sm (8px) */
|
|
974
|
+
width: var(--spacing-spacing-sm, 8px);
|
|
975
|
+
height: var(--spacing-spacing-sm, 8px);
|
|
976
|
+
/* Sem border - Figma */
|
|
977
|
+
border: none;
|
|
978
|
+
/* Sem padding */
|
|
979
|
+
padding: 0;
|
|
980
|
+
/* Shadow - Figma: 0px 4px 4px 0px rgba(0,0,0,0.25) */
|
|
981
|
+
box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/* ============================================
|
|
985
|
+
VARIANTE: PLAIN (compatibilidade legado)
|
|
986
|
+
Nota: Não existe no Figma atual, mantido para retrocompatibilidade
|
|
987
|
+
============================================ */
|
|
988
|
+
|
|
989
|
+
voa-badge[variant="plain"]::part(base) {
|
|
990
|
+
padding-block: var(--spacing-spacing-xs, 4px);
|
|
991
|
+
padding-inline: var(--spacing-spacing-sm, 8px);
|
|
992
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
voa-badge[variant="plain"][size="sm"]::part(base) {
|
|
996
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
/* ============================================
|
|
1000
|
+
VARIANTE: ICONS (compatibilidade legado)
|
|
1001
|
+
Nota: Não existe no Figma atual, mantido para retrocompatibilidade
|
|
1002
|
+
============================================ */
|
|
1003
|
+
|
|
1004
|
+
voa-badge[variant="icons"]::part(base) {
|
|
1005
|
+
padding-block: var(--spacing-spacing-xs, 4px);
|
|
1006
|
+
padding-inline: var(--spacing-spacing-sm, 8px);
|
|
1007
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
voa-badge[variant="icons"][size="sm"]::part(base) {
|
|
1011
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
/* ============================================
|
|
1015
|
+
LABEL - Texto do badge
|
|
1016
|
+
============================================ */
|
|
1017
|
+
voa-badge::part(label) {
|
|
1018
|
+
/* Cor do texto - Semantic Token (conforme Figma: asset-colors/text-primary) */
|
|
1019
|
+
color: var(--text-primary, #0b1215);
|
|
1020
|
+
|
|
1021
|
+
/* Font-family - Figma: base/family/family-sans */
|
|
1022
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
1023
|
+
|
|
1024
|
+
/* Font-weight: Regular (400) */
|
|
1025
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
1026
|
+
font-style: normal;
|
|
1027
|
+
|
|
1028
|
+
/* Line-height e font-size por tamanho */
|
|
1029
|
+
line-height: 16px;
|
|
1030
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
/* Size: Small - Tipografia menor */
|
|
1034
|
+
voa-badge[size="sm"]::part(label) {
|
|
1035
|
+
font-size: 11px;
|
|
1036
|
+
line-height: 12px;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
/* ============================================
|
|
1040
|
+
INDICATOR - Contador numérico
|
|
1041
|
+
============================================ */
|
|
1042
|
+
voa-badge::part(indicator) {
|
|
1043
|
+
/* Cor do texto - Figma: asset-colors/text-primary */
|
|
1044
|
+
color: var(--text-primary, #0b1215);
|
|
1045
|
+
|
|
1046
|
+
/* Font-family - Figma: base/family/family-sans com SemiBold */
|
|
1047
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
1048
|
+
|
|
1049
|
+
/* Font-weight: SemiBold (600) - Figma */
|
|
1050
|
+
font-weight: 600;
|
|
1051
|
+
font-style: normal;
|
|
1052
|
+
|
|
1053
|
+
/* Text alignment */
|
|
1054
|
+
text-align: center;
|
|
1055
|
+
white-space: pre-wrap;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
/* Indicator - Size: md */
|
|
1059
|
+
voa-badge[size="md"]::part(indicator),
|
|
1060
|
+
voa-badge[variant="indicator"][size="md"]::part(indicator),
|
|
1061
|
+
voa-badge[variant="indicator-overlay"][size="md"]::part(indicator) {
|
|
1062
|
+
/* Figma: 14px, line-height 16px, size 16x16 */
|
|
1063
|
+
font-size: 14px;
|
|
1064
|
+
line-height: 16px;
|
|
1065
|
+
width: 16px;
|
|
1066
|
+
height: 16px;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
/* Indicator - Size: sm */
|
|
1070
|
+
voa-badge[size="sm"]::part(indicator),
|
|
1071
|
+
voa-badge[variant="indicator"][size="sm"]::part(indicator),
|
|
1072
|
+
voa-badge[variant="indicator-overlay"][size="sm"]::part(indicator) {
|
|
1073
|
+
/* Figma: 10px, line-height 8px, size 8x8 */
|
|
1074
|
+
font-size: 10px;
|
|
1075
|
+
line-height: 8px;
|
|
1076
|
+
width: 8px;
|
|
1077
|
+
height: 8px;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
/* Variante: Indicator-overlay - Texto branco */
|
|
1081
|
+
voa-badge[variant="indicator-overlay"]::part(indicator) {
|
|
1082
|
+
/* Cor do texto branco - Figma: structure-colors/bg-base */
|
|
1083
|
+
color: var(--structure-colors-bg-base, #ffffff);
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
/* ============================================
|
|
1087
|
+
ICON - Ícone do badge
|
|
1088
|
+
============================================ */
|
|
1089
|
+
voa-badge::part(icon),
|
|
1090
|
+
voa-badge::part(icon-leading),
|
|
1091
|
+
voa-badge::part(icon-trailing) {
|
|
1092
|
+
/* Cor do ícone - Figma usa cor específica do ícone (ex: rgba(0, 229, 206, 1) para check) */
|
|
1093
|
+
/* Mantemos currentColor para flexibilidade */
|
|
1094
|
+
color: currentColor;
|
|
1095
|
+
fill: currentColor;
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
/* Icon - Size: md */
|
|
1099
|
+
voa-badge[size="md"]::part(icon),
|
|
1100
|
+
voa-badge[size="md"]::part(icon-leading),
|
|
1101
|
+
voa-badge[size="md"]::part(icon-trailing),
|
|
1102
|
+
voa-badge[variant="icon-only"][size="md"]::part(icon) {
|
|
1103
|
+
/* Figma: 16x16 */
|
|
1104
|
+
width: 16px;
|
|
1105
|
+
height: 16px;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
/* Icon - Size: sm */
|
|
1109
|
+
voa-badge[size="sm"]::part(icon),
|
|
1110
|
+
voa-badge[size="sm"]::part(icon-leading),
|
|
1111
|
+
voa-badge[size="sm"]::part(icon-trailing),
|
|
1112
|
+
voa-badge[variant="icon-only"][size="sm"]::part(icon) {
|
|
1113
|
+
/* Figma: 8x8 para icon-only sm */
|
|
1114
|
+
width: 8px;
|
|
1115
|
+
height: 8px;
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
/* ============================================
|
|
1119
|
+
ACESSIBILIDADE
|
|
1120
|
+
============================================ */
|
|
1121
|
+
|
|
1122
|
+
/* Focus visível para navegação por teclado (se o badge for interativo) */
|
|
1123
|
+
voa-badge::part(base):focus-visible {
|
|
1124
|
+
outline: 2px solid var(--brand-base, #0064cb);
|
|
1125
|
+
outline-offset: 2px;
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
/* ============================================
|
|
1129
|
+
voa-breadcrumbs.external.css
|
|
1130
|
+
============================================ */
|
|
1131
|
+
|
|
1132
|
+
/**
|
|
1133
|
+
* Estilização Externa do VoaBreadcrumbs
|
|
1134
|
+
*
|
|
1135
|
+
* Este arquivo demonstra como estilizar o componente voa-breadcrumbs
|
|
1136
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
1137
|
+
*
|
|
1138
|
+
* Baseado no design do Figma:
|
|
1139
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=443-10022&t=eEPGXVkQRijr3FMg-4
|
|
1140
|
+
*
|
|
1141
|
+
* Para usar, importe este arquivo após os tokens:
|
|
1142
|
+
* * *
|
|
1143
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
1144
|
+
*
|
|
1145
|
+
* Figma Token → Style Dictionary Token
|
|
1146
|
+
* --------------------------------------------
|
|
1147
|
+
* --structure-colors/bg-base → --structure-colors-bg-base
|
|
1148
|
+
* --structure-colors/fill-15 → --structure-colors-fill-15
|
|
1149
|
+
* --structure-colors/border-color-secondary → --structure-colors-border-color-secondary
|
|
1150
|
+
* --radius/radius-round → --radius-round
|
|
1151
|
+
* --radius/radius-lg → --radius-lg
|
|
1152
|
+
* --spacing/spacing-md → --spacing-spacing-md (16px)
|
|
1153
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
1154
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
1155
|
+
* --asset-colors/text-secondary → --text-secondary
|
|
1156
|
+
* --asset-colors/text-hover → --text-hover (ou --brand-base)
|
|
1157
|
+
* --base/family/family-sans → --font-family-sans
|
|
1158
|
+
*/
|
|
1159
|
+
|
|
1160
|
+
/* ============================================
|
|
1161
|
+
BASE - Container principal do breadcrumb
|
|
1162
|
+
============================================ */
|
|
1163
|
+
voa-breadcrumbs::part(base) {
|
|
1164
|
+
/* Background padrão (default) - Semantic Token (conforme Figma: structure-colors/bg-base) */
|
|
1165
|
+
background-color: var(--structure-colors-bg-base);
|
|
1166
|
+
|
|
1167
|
+
/* Padding horizontal - Semantic Token (conforme Figma: spacing/spacing-md = 16px) */
|
|
1168
|
+
padding-inline: var(--spacing-spacing-md);
|
|
1169
|
+
|
|
1170
|
+
/* Padding vertical */
|
|
1171
|
+
padding-block: 0;
|
|
1172
|
+
|
|
1173
|
+
/* Box-sizing */
|
|
1174
|
+
box-sizing: border-box;
|
|
1175
|
+
|
|
1176
|
+
/* Gap entre items - Semantic Token (conforme Figma: spacing/spacing-sm = 8px) */
|
|
1177
|
+
/* Note: Gap is handled by separator margin in the items */
|
|
1178
|
+
gap: 0;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
/* Variante: Round - Estilos específicos */
|
|
1182
|
+
voa-breadcrumbs[type="round"]::part(base) {
|
|
1183
|
+
/* Background round - Semantic Token (conforme Figma: structure-colors/fill-15) */
|
|
1184
|
+
background-color: var(--structure-colors-fill-15);
|
|
1185
|
+
|
|
1186
|
+
/* Border - Semantic Token (conforme Figma: structure-colors/border-color-secondary) */
|
|
1187
|
+
border: var(--border-width-thin) solid var(--structure-colors-border-color-secondary);
|
|
1188
|
+
|
|
1189
|
+
/* Border-radius completamente arredondado - Semantic Token (conforme Figma: radius/radius-round) */
|
|
1190
|
+
border-radius: var(--radius-round);
|
|
1191
|
+
|
|
1192
|
+
/* Padding round - Semantic Token (conforme Figma: radius/radius-lg = 16px) */
|
|
1193
|
+
padding-inline: var(--radius-lg);
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
/* Variante: Outline - Estilos específicos */
|
|
1197
|
+
voa-breadcrumbs[type="outline"]::part(base) {
|
|
1198
|
+
/* Background transparente */
|
|
1199
|
+
background-color: transparent;
|
|
1200
|
+
|
|
1201
|
+
/* Border - Semantic Token */
|
|
1202
|
+
border: var(--border-width-thin) solid var(--structure-colors-border-color-secondary);
|
|
1203
|
+
|
|
1204
|
+
/* Border-radius padrão */
|
|
1205
|
+
border-radius: var(--radius-sm);
|
|
1206
|
+
|
|
1207
|
+
/* Padding similar ao round para compensar a borda */
|
|
1208
|
+
padding-inline: var(--spacing-spacing-md);
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
/* ============================================
|
|
1212
|
+
BREADCRUMBS ITEM - Item do breadcrumb
|
|
1213
|
+
============================================ */
|
|
1214
|
+
|
|
1215
|
+
/* Base do item (Content) */
|
|
1216
|
+
voa-breadcrumbs-item::part(content) {
|
|
1217
|
+
/* Display flex para alinhamento */
|
|
1218
|
+
display: inline-flex;
|
|
1219
|
+
align-items: center;
|
|
1220
|
+
|
|
1221
|
+
/* Padding vertical - Semantic Token (conforme Figma: spacing/spacing-xs = 4px) */
|
|
1222
|
+
padding-block: var(--spacing-spacing-xs);
|
|
1223
|
+
|
|
1224
|
+
/* Text decoration para links */
|
|
1225
|
+
text-decoration: none;
|
|
1226
|
+
|
|
1227
|
+
/* Box-sizing */
|
|
1228
|
+
box-sizing: border-box;
|
|
1229
|
+
|
|
1230
|
+
/* Cursor pointer para links */
|
|
1231
|
+
cursor: pointer;
|
|
1232
|
+
|
|
1233
|
+
/* --- Text Styles from Figma (component-specific overrides) --- */
|
|
1234
|
+
/* Cor do texto - Figma: asset-colors/text-secondary = #00e5ce (teal) */
|
|
1235
|
+
color: #00e5ce;
|
|
1236
|
+
|
|
1237
|
+
/* Font-family - Semantic Token (conforme Figma: base/family/family-sans) */
|
|
1238
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
1239
|
+
|
|
1240
|
+
/* Font-weight: Regular (400) */
|
|
1241
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
1242
|
+
font-style: normal;
|
|
1243
|
+
|
|
1244
|
+
/* Font-size: 10px conforme Figma (Legal/Regular) */
|
|
1245
|
+
font-size: 0.625rem; /* 10px */
|
|
1246
|
+
line-height: 16px;
|
|
1247
|
+
|
|
1248
|
+
/* Text alignment right conforme Figma */
|
|
1249
|
+
text-align: right;
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
/* Item ativo (span) - sem cursor pointer */
|
|
1253
|
+
voa-breadcrumbs-item[active]::part(content) {
|
|
1254
|
+
cursor: default;
|
|
1255
|
+
|
|
1256
|
+
/* --- Active Text Styles from Figma --- */
|
|
1257
|
+
/* Cor do texto ativo - Figma: asset-colors/text-hover = #0064cb (blue) */
|
|
1258
|
+
color: #0064cb;
|
|
1259
|
+
|
|
1260
|
+
/* Font-weight: SemiBold (600) conforme Figma (Legal/Bold) */
|
|
1261
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
/* Link não ativo - hover effect */
|
|
1265
|
+
voa-breadcrumbs-item::part(content):hover {
|
|
1266
|
+
/* Text decoration underline para links */
|
|
1267
|
+
text-decoration: underline;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
voa-breadcrumbs-item[active]::part(content):hover {
|
|
1271
|
+
/* Sem underline quando ativo */
|
|
1272
|
+
text-decoration: none;
|
|
1273
|
+
}
|
|
1274
|
+
|
|
1275
|
+
/* ============================================
|
|
1276
|
+
BREADCRUMBS SEPARATOR - Divisor entre items
|
|
1277
|
+
============================================ */
|
|
1278
|
+
|
|
1279
|
+
/* Base do divisor */
|
|
1280
|
+
voa-breadcrumbs-item::part(separator) {
|
|
1281
|
+
/* Cor do ícone - Figma: rgba(159, 159, 168, 1) = gray separator */
|
|
1282
|
+
color: rgba(159, 159, 168, 1);
|
|
1283
|
+
|
|
1284
|
+
/* Fill será aplicado via currentColor */
|
|
1285
|
+
fill: currentColor;
|
|
1286
|
+
|
|
1287
|
+
/* Margem horizontal - Semantic Token (conforme Figma: spacing/spacing-sm = 8px) */
|
|
1288
|
+
margin-inline: var(--spacing-spacing-sm);
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
/* Tamanho do ícone - 16x16 conforme Figma */
|
|
1292
|
+
voa-breadcrumbs-item::part(separator) svg {
|
|
1293
|
+
width: 16px;
|
|
1294
|
+
height: 16px;
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1297
|
+
/* ============================================
|
|
1298
|
+
ACESSIBILIDADE
|
|
1299
|
+
============================================ */
|
|
1300
|
+
|
|
1301
|
+
/* Focus visível para navegação por teclado */
|
|
1302
|
+
voa-breadcrumbs-item::part(content):focus-visible {
|
|
1303
|
+
outline: 2px solid var(--brand-base);
|
|
1304
|
+
outline-offset: 2px;
|
|
1305
|
+
border-radius: 2px;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
/* Link ativo não precisa de focus */
|
|
1309
|
+
voa-breadcrumbs-item[active]::part(content):focus-visible {
|
|
1310
|
+
outline: none;
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
/* ============================================
|
|
1314
|
+
voa-button.external.css
|
|
1315
|
+
============================================ */
|
|
1316
|
+
|
|
1317
|
+
/**
|
|
1318
|
+
* Estilização Externa do VoaButton
|
|
1319
|
+
*
|
|
1320
|
+
* Este arquivo demonstra como estilizar o componente voa-button
|
|
1321
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
1322
|
+
*
|
|
1323
|
+
* Baseado no design do Figma:
|
|
1324
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=515-327
|
|
1325
|
+
*/
|
|
1326
|
+
|
|
1327
|
+
/* ============================================
|
|
1328
|
+
BASE - Elemento raiz do botão
|
|
1329
|
+
============================================ */
|
|
1330
|
+
|
|
1331
|
+
voa-button::part(base) {
|
|
1332
|
+
/* Tipografia */
|
|
1333
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
1334
|
+
font-size: var(--typography-base-body-sm-regular-size); /* Desktop/Body-sm/Regular */
|
|
1335
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
1336
|
+
line-height: var(--line-height-body-sm);
|
|
1337
|
+
|
|
1338
|
+
/* Box-sizing */
|
|
1339
|
+
box-sizing: border-box;
|
|
1340
|
+
|
|
1341
|
+
/* Transição suave */
|
|
1342
|
+
transition: all 0.2s ease;
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
/* ============================================
|
|
1346
|
+
TAMANHOS (Size)
|
|
1347
|
+
============================================ */
|
|
1348
|
+
|
|
1349
|
+
/* Small (sm) */
|
|
1350
|
+
voa-button[size="sm"]::part(base) {
|
|
1351
|
+
/* Padding: Vertical 4px, Horizontal 16px */
|
|
1352
|
+
padding-block: var(--spacing-spacing-xs, 4px);
|
|
1353
|
+
padding-inline: var(--spacing-spacing-md, 16px);
|
|
1354
|
+
|
|
1355
|
+
border-radius: var(--radius-xs, 4px);
|
|
1356
|
+
gap: 10px;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
/* Medium (md) */
|
|
1360
|
+
voa-button[size="md"]::part(base) {
|
|
1361
|
+
/* Padding: Vertical 8px, Horizontal 4px */
|
|
1362
|
+
padding-block: var(--spacing-spacing-sm, 8px);
|
|
1363
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
1364
|
+
|
|
1365
|
+
min-width: 82px;
|
|
1366
|
+
border-radius: var(--radius-sm, 8px);
|
|
1367
|
+
gap: 4px;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
/* Large (lg) - padrão */
|
|
1371
|
+
voa-button[size="lg"]::part(base) {
|
|
1372
|
+
/* Padding: Vertical 12px, Horizontal 4px */
|
|
1373
|
+
padding-block: var(--spacing-spacing-rg, 12px);
|
|
1374
|
+
padding-inline: var(--spacing-spacing-xs, 4px);
|
|
1375
|
+
|
|
1376
|
+
min-width: 98px;
|
|
1377
|
+
border-radius: var(--radius-sm, 8px);
|
|
1378
|
+
gap: 10px;
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
/* Ajuste de gap para variantes específicas no tamanho LG */
|
|
1382
|
+
voa-button[size="lg"][variant="tonal"]::part(base),
|
|
1383
|
+
voa-button[size="lg"][variant="ghost"]::part(base),
|
|
1384
|
+
voa-button[size="lg"][variant="link"]::part(base) {
|
|
1385
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
/* ============================================
|
|
1389
|
+
VARIANTES (Type)
|
|
1390
|
+
============================================ */
|
|
1391
|
+
|
|
1392
|
+
/* Primary */
|
|
1393
|
+
voa-button[variant="primary"]::part(base) {
|
|
1394
|
+
background-color: var(--brand-base, #0064cb);
|
|
1395
|
+
color: var(--text-on-primary, #f1f1f1);
|
|
1396
|
+
border: var(--border-width-thin) solid var(--structure-colors-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
voa-button[variant="primary"]:hover::part(base) {
|
|
1400
|
+
background-color: var(--brand-hover, #00398d);
|
|
1401
|
+
border-color: var(--brand-base-50, rgba(0, 100, 203, 0.5));
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
voa-button[variant="primary"]:active::part(base) {
|
|
1405
|
+
background-color: var(--brand-active, #008fff);
|
|
1406
|
+
border-color: var(--structure-colors-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
/* Secondary */
|
|
1410
|
+
voa-button[variant="secondary"]::part(base) {
|
|
1411
|
+
background-color: var(--brand-secondary, #00e5ce);
|
|
1412
|
+
color: var(--text-primary, #0b1215);
|
|
1413
|
+
border: var(--border-width-thin) solid var(--structure-colors-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
voa-button[variant="secondary"]:hover::part(base) {
|
|
1417
|
+
/* Figma indica bg-secondary também no hover, talvez mude apenas borda ou sombra?
|
|
1418
|
+
Mantendo conforme token do Figma output */
|
|
1419
|
+
background-color: var(--brand-secondary, #00e5ce);
|
|
1420
|
+
border-color: var(--structure-colors-bg-mask, rgba(0, 0, 0, 0.45));
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
voa-button[variant="secondary"]:active::part(base) {
|
|
1424
|
+
/* Figma indica gradient overlay, simplificado aqui para tokens se possível */
|
|
1425
|
+
background-color: var(--brand-secondary, #00e5ce);
|
|
1426
|
+
border-color: var(--structure-colors-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
/* Tonal */
|
|
1430
|
+
voa-button[variant="tonal"]::part(base) {
|
|
1431
|
+
background-color: var(--brand-base-25, rgba(0, 100, 203, 0.25));
|
|
1432
|
+
color: var(--text-primary, #0b1215);
|
|
1433
|
+
border: none;
|
|
1434
|
+
/* Nota: Figma não mostra borda explicita no default tonal LG,
|
|
1435
|
+
mas mostra borda transparente/base no disabled/active em alguns casos.
|
|
1436
|
+
Vamos manter sem borda ou borda transparente para evitar pulos de layout. */
|
|
1437
|
+
border: var(--border-width-thin) solid transparent;
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
voa-button[variant="tonal"]:hover::part(base) {
|
|
1441
|
+
background-color: var(--brand-base-50, rgba(0, 100, 203, 0.5));
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
voa-button[variant="tonal"]:active::part(base) {
|
|
1445
|
+
background-color: var(--brand-base-15, rgba(0, 100, 203, 0.15));
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
/* Ghost */
|
|
1449
|
+
voa-button[variant="ghost"]::part(base) {
|
|
1450
|
+
background-color: transparent;
|
|
1451
|
+
color: var(--brand-base, #0064cb);
|
|
1452
|
+
border: var(--border-width-thin) solid var(--brand-base, #0064cb);
|
|
1453
|
+
}
|
|
1454
|
+
|
|
1455
|
+
voa-button[variant="ghost"]:hover::part(base) {
|
|
1456
|
+
border-color: var(--brand-hover, #00398d);
|
|
1457
|
+
color: var(--colors-light-secondary-light, #00e5ce); /* Figma output mostra cor secundária no hover? */
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
voa-button[variant="ghost"]:active::part(base) {
|
|
1461
|
+
background-color: var(--brand-base-15, rgba(0, 100, 203, 0.15));
|
|
1462
|
+
border-color: var(--brand-base, #0064cb);
|
|
1463
|
+
color: var(--colors-light-secondary-light, #00e5ce);
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
/* Link */
|
|
1467
|
+
voa-button[variant="link"]::part(base) {
|
|
1468
|
+
background-color: transparent;
|
|
1469
|
+
color: var(--palette-blue-blue-7, #1c7ed6);
|
|
1470
|
+
border: none;
|
|
1471
|
+
/* Mantendo borda transparente para consistência de box-model se necessário,
|
|
1472
|
+
mas link geralmente não tem borda. Figma não mostra borda. */
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
voa-button[variant="link"]:hover::part(base) {
|
|
1476
|
+
color: var(--palette-blue-blue-9, #1864ab);
|
|
1477
|
+
text-decoration: underline;
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
voa-button[variant="link"]:active::part(base) {
|
|
1481
|
+
color: var(--palette-blue-blue-6, #228be6);
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
/* ============================================
|
|
1485
|
+
ESTADOS DISABLED E LOADING
|
|
1486
|
+
============================================ */
|
|
1487
|
+
|
|
1488
|
+
/* Disabled state */
|
|
1489
|
+
voa-button[disabled]:not([loading])::part(base) {
|
|
1490
|
+
cursor: not-allowed;
|
|
1491
|
+
|
|
1492
|
+
/* Primary Disabled */
|
|
1493
|
+
background-color: var(--brand-base-15, rgba(0, 100, 203, 0.15));
|
|
1494
|
+
/* Border color fixed: using semantic token with opacity */
|
|
1495
|
+
border-color: var(--colors-structure-fill-secondary, rgba(24, 24, 27, 0.06));
|
|
1496
|
+
/* Text color fixed: using value with opacity (token is opaque) */
|
|
1497
|
+
color: rgba(11, 18, 21, 0.25);
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
voa-button[variant="secondary"][disabled]:not([loading])::part(base) {
|
|
1501
|
+
background-color: var(--brand-secondary-15, rgba(0, 229, 206, 0.15));
|
|
1502
|
+
}
|
|
1503
|
+
|
|
1504
|
+
voa-button[variant="tonal"][disabled]:not([loading])::part(base) {
|
|
1505
|
+
/* Using token with opacity */
|
|
1506
|
+
background-color: var(--colors-structure-fill-15, rgba(24, 24, 27, 0.15));
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
voa-button[variant="ghost"][disabled]:not([loading])::part(base) {
|
|
1510
|
+
background-color: transparent;
|
|
1511
|
+
/* Using token with opacity */
|
|
1512
|
+
border-color: var(--colors-structure-fill-15, rgba(24, 24, 27, 0.15));
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
voa-button[variant="link"][disabled]:not([loading])::part(base) {
|
|
1516
|
+
background-color: transparent;
|
|
1517
|
+
color: var(--palette-blue-blue-2, #a5d8ff);
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
/* Loading state */
|
|
1521
|
+
voa-button[loading]::part(base),
|
|
1522
|
+
voa-button.loading::part(base) {
|
|
1523
|
+
opacity: 0.7;
|
|
1524
|
+
cursor: not-allowed !important;
|
|
1525
|
+
pointer-events: none;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
/* ============================================
|
|
1529
|
+
FOCUS VISIBLE (Acessibilidade)
|
|
1530
|
+
============================================ */
|
|
1531
|
+
|
|
1532
|
+
voa-button::part(base):focus-visible {
|
|
1533
|
+
outline: 2px solid var(--brand-base, #0064cb);
|
|
1534
|
+
outline-offset: 2px;
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
/* ============================================
|
|
1538
|
+
ELEMENTOS INTERNOS
|
|
1539
|
+
============================================ */
|
|
1540
|
+
|
|
1541
|
+
/* Label */
|
|
1542
|
+
voa-button::part(label) {
|
|
1543
|
+
display: inline-block;
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
/* Ícones */
|
|
1547
|
+
voa-button::part(icon-leading),
|
|
1548
|
+
voa-button::part(icon-trailing) {
|
|
1549
|
+
display: inline-flex;
|
|
1550
|
+
width: 16px;
|
|
1551
|
+
height: 16px;
|
|
1552
|
+
}
|
|
1553
|
+
|
|
1554
|
+
voa-button::part(icon-leading) svg,
|
|
1555
|
+
voa-button::part(icon-trailing) svg {
|
|
1556
|
+
width: 100%;
|
|
1557
|
+
height: 100%;
|
|
1558
|
+
fill: currentColor;
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
/* Loader */
|
|
1562
|
+
/* Note: @keyframes and animation are defined inside Shadow DOM (voa-button.css)
|
|
1563
|
+
because CSS Parts API cannot access @keyframes from external scope.
|
|
1564
|
+
Use CSS Custom Properties to customize: --voa-loader-size, --voa-loader-duration */
|
|
1565
|
+
|
|
1566
|
+
voa-button::part(loader) {
|
|
1567
|
+
/* Visual customization - size can override the internal default via CSS var */
|
|
1568
|
+
color: currentColor;
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
voa-button[loading]::part(loader) {
|
|
1572
|
+
margin-right: var(--spacing-spacing-xs, 4px);
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
/* ============================================
|
|
1576
|
+
voa-card.external.css
|
|
1577
|
+
============================================ */
|
|
1578
|
+
|
|
1579
|
+
/**
|
|
1580
|
+
* External Styling for VoaCard
|
|
1581
|
+
*
|
|
1582
|
+
* Uses CSS Parts API and design tokens.
|
|
1583
|
+
*/
|
|
1584
|
+
|
|
1585
|
+
voa-card::part(base) {
|
|
1586
|
+
background-color: var(--colors-structure-bg-base, #ffffff);
|
|
1587
|
+
border: 1px solid var(--colors-structure-border-color, #e5e7eb);
|
|
1588
|
+
border-radius: var(--radius-md, 8px);
|
|
1589
|
+
box-shadow: var(--shadow-sm, 0 1px 2px 0 rgba(0, 0, 0, 0.05));
|
|
1590
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
1591
|
+
color: var(--text-primary, #111827);
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
voa-card::part(header) {
|
|
1595
|
+
padding: var(--spacing-spacing-md, 16px);
|
|
1596
|
+
border-bottom: 1px solid var(--colors-structure-border-color, #e5e7eb);
|
|
1597
|
+
font-weight: 600;
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
voa-card::part(body) {
|
|
1601
|
+
padding: var(--spacing-spacing-md, 16px);
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
voa-card::part(footer) {
|
|
1605
|
+
padding: var(--spacing-spacing-md, 16px);
|
|
1606
|
+
border-top: 1px solid var(--colors-structure-border-color, #e5e7eb);
|
|
1607
|
+
background-color: var(--colors-structure-bg-container, #f9fafb);
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
/* ============================================
|
|
1611
|
+
voa-checkbox.external.css
|
|
1612
|
+
============================================ */
|
|
1613
|
+
|
|
1614
|
+
/**
|
|
1615
|
+
* Estilização Externa do VoaCheckbox
|
|
1616
|
+
*
|
|
1617
|
+
* Este arquivo demonstra como estilizar o componente voa-checkbox
|
|
1618
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
1619
|
+
*
|
|
1620
|
+
* Baseado no design do Figma:
|
|
1621
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=429-677
|
|
1622
|
+
*
|
|
1623
|
+
* Para usar, importe este arquivo após os tokens:
|
|
1624
|
+
* * *
|
|
1625
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
1626
|
+
*
|
|
1627
|
+
* Figma Token → Style Dictionary Token
|
|
1628
|
+
* --------------------------------------------
|
|
1629
|
+
* --structure-colors/bg-base → --structure-colors-bg-base (white)
|
|
1630
|
+
* --palette/blue/blue-6 → --palette-blue-blue-6 (#228be6)
|
|
1631
|
+
* --palette/blue/blue-8 → --palette-blue-blue-8 (#1971c2)
|
|
1632
|
+
* --palette/blue/blue-4 → --palette-blue-blue-4 (#4dabf7)
|
|
1633
|
+
* --structure-colors/border-color → --structure-colors-border-color (#adb5bd)
|
|
1634
|
+
* --asset-colors/brand-base-50 → --brand-base-50 (rgba(0,100,203,0.5))
|
|
1635
|
+
* --asset-colors/text-primary → --text-primary (#0b1215)
|
|
1636
|
+
* --asset-colors/text-hover → --text-hover (#0064cb)
|
|
1637
|
+
* --asset-colors/text-disabled → --text-disabled (rgba(11,18,21,0.25))
|
|
1638
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
1639
|
+
* --border-radius/radius-sm → --radius-sm (4px)
|
|
1640
|
+
* --base/family/family-sans → --font-family-sans ('Lato')
|
|
1641
|
+
*
|
|
1642
|
+
* ESTRUTURA DO COMPONENTE INTERNALS (ElementInternals):
|
|
1643
|
+
*
|
|
1644
|
+
* O componente agora usa ElementInternals para sincronizar com o Form API nativo:
|
|
1645
|
+
* - setFormValue(): Define o valor que será submetido pelo formulário
|
|
1646
|
+
* - ariaChecked: Define o estado de acessibilidade ('true' | 'false' | 'mixed')
|
|
1647
|
+
* - ariaDisabled: Define se o componente está desabilitado para leitores de tela
|
|
1648
|
+
*
|
|
1649
|
+
* Estrutura do DOM renderizado:
|
|
1650
|
+
* <voa-checkbox>
|
|
1651
|
+
* <div part="base" class="checkbox-container">
|
|
1652
|
+
* <div part="indicator" class="checkbox-custom">
|
|
1653
|
+
* <!-- ::after renderiza o checkmark ou dash via CSS puro -->
|
|
1654
|
+
* </div>
|
|
1655
|
+
* <span part="label" class="checkbox-label">
|
|
1656
|
+
* <slot /> <!-- Conteúdo do label -->
|
|
1657
|
+
* </span>
|
|
1658
|
+
* </div>
|
|
1659
|
+
* </voa-checkbox>
|
|
1660
|
+
*/
|
|
1661
|
+
|
|
1662
|
+
/* ============================================
|
|
1663
|
+
BASE - Container do checkbox
|
|
1664
|
+
============================================ */
|
|
1665
|
+
|
|
1666
|
+
voa-checkbox::part(base) {
|
|
1667
|
+
/* Gap estrutural - Token semântico conforme Figma */
|
|
1668
|
+
gap: var(--structure-large-spacing-sm);
|
|
1669
|
+
|
|
1670
|
+
/* Tipografia - Semantic Token */
|
|
1671
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
1672
|
+
font-size: var(--typography-base-type-scale-6);
|
|
1673
|
+
line-height: var(--line-height-body-md);
|
|
1674
|
+
|
|
1675
|
+
/* Transição suave para estados hover/active */
|
|
1676
|
+
transition: color 0.2s ease;
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
/* Sem label, sem gap */
|
|
1680
|
+
voa-checkbox[show-label="false"]::part(base) {
|
|
1681
|
+
gap: 0;
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
/* ============================================
|
|
1685
|
+
INDICATOR - Caixa do checkbox
|
|
1686
|
+
============================================ */
|
|
1687
|
+
|
|
1688
|
+
/* Tamanho padrão (20px conforme Figma) */
|
|
1689
|
+
voa-checkbox::part(indicator) {
|
|
1690
|
+
width: var(--checkbox-indicator-size);
|
|
1691
|
+
height: var(--checkbox-indicator-size);
|
|
1692
|
+
border-radius: var(--structure-large-radius-xs);
|
|
1693
|
+
border: var(--border-width-thin) solid var(--structure-colors-border-color);
|
|
1694
|
+
background-color: var(--structure-colors-bg-base);
|
|
1695
|
+
box-sizing: border-box;
|
|
1696
|
+
transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
/* ============================================
|
|
1700
|
+
ESTADOS - INACTIVE (Checkbox não selecionado)
|
|
1701
|
+
============================================ */
|
|
1702
|
+
|
|
1703
|
+
/* Default - Inactive */
|
|
1704
|
+
voa-checkbox[state="inactive"]:not([disabled])::part(indicator) {
|
|
1705
|
+
background-color: var(--structure-colors-bg-base); /* white */
|
|
1706
|
+
border-color: var(--structure-colors-border-color); /* #adb5bd */
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
voa-checkbox[state="inactive"]:not([disabled])::part(label) {
|
|
1710
|
+
color: var(--text-primary); /* #0b1215 */
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
/* Hover - Inactive */
|
|
1714
|
+
voa-checkbox[state="inactive"]:hover:not([disabled])::part(indicator) {
|
|
1715
|
+
border-color: var(--palette-blue-blue-8); /* #1971c2 */
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1718
|
+
voa-checkbox[state="inactive"]:hover:not([disabled])::part(label) {
|
|
1719
|
+
color: var(--text-hover); /* #0064cb */
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
/* Focused - Inactive */
|
|
1723
|
+
voa-checkbox[state="inactive"]:focus-visible:not([disabled])::part(indicator) {
|
|
1724
|
+
border-color: #196cb8; /* Focused border color do Figma */
|
|
1725
|
+
box-shadow: var(--shadow-focus-primary);
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
/* ============================================
|
|
1729
|
+
ESTADOS - ACTIVE (Checkbox selecionado)
|
|
1730
|
+
============================================ */
|
|
1731
|
+
|
|
1732
|
+
/* Default - Active */
|
|
1733
|
+
voa-checkbox[state="active"]:not([disabled])::part(indicator) {
|
|
1734
|
+
background-color: var(--palette-blue-blue-6); /* #228be6 */
|
|
1735
|
+
border-color: var(--palette-blue-blue-8); /* #1971c2 */
|
|
1736
|
+
}
|
|
1737
|
+
|
|
1738
|
+
/*
|
|
1739
|
+
* CHECKMARK RENDERING via CSS pseudo-element ::after
|
|
1740
|
+
*
|
|
1741
|
+
* Structure:
|
|
1742
|
+
* - Uses ::after positioned absolutely within .checkbox-custom (part="indicator")
|
|
1743
|
+
* - The structural CSS sets: display: inline-flex; align-items: center; justify-content: center
|
|
1744
|
+
* - This ensures the ::after checkmark is centered perfectly within the 20x20 box
|
|
1745
|
+
*
|
|
1746
|
+
* Transform logic:
|
|
1747
|
+
* - translate(-50%, -50%): Center the element at the box center
|
|
1748
|
+
* - rotate(45deg): Rotate to create the checkmark angle
|
|
1749
|
+
*
|
|
1750
|
+
* Border drawing:
|
|
1751
|
+
* - border-right: 2px solid white (vertical part of checkmark)
|
|
1752
|
+
* - border-bottom: 2px solid white (horizontal part of checkmark)
|
|
1753
|
+
* - Creates an inverted "L" that looks like a checkmark when rotated
|
|
1754
|
+
*/
|
|
1755
|
+
voa-checkbox[state="active"]:not([disabled])::part(indicator)::after {
|
|
1756
|
+
content: '';
|
|
1757
|
+
position: absolute;
|
|
1758
|
+
left: 50%;
|
|
1759
|
+
top: 50%;
|
|
1760
|
+
transform: translate(-50%, -50%) rotate(45deg);
|
|
1761
|
+
width: 4px;
|
|
1762
|
+
height: 8px;
|
|
1763
|
+
border-right: 2px solid white;
|
|
1764
|
+
border-bottom: 2px solid white;
|
|
1765
|
+
box-shadow: 0px 0.667px 0.333px 0.033px rgba(24, 24, 24, 0.05);
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
voa-checkbox[state="active"]:not([disabled])::part(label) {
|
|
1769
|
+
color: var(--text-primary); /* #0b1215 */
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
/* Hover - Active */
|
|
1773
|
+
voa-checkbox[state="active"]:hover:not([disabled])::part(indicator) {
|
|
1774
|
+
background-color: var(--palette-blue-blue-4); /* #4dabf7 - mais claro no hover */
|
|
1775
|
+
border-color: var(--palette-blue-blue-8); /* #1971c2 */
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
voa-checkbox[state="active"]:hover:not([disabled])::part(label) {
|
|
1779
|
+
color: var(--text-hover); /* #0064cb */
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1782
|
+
/* Focused - Active */
|
|
1783
|
+
voa-checkbox[state="active"]:focus-visible:not([disabled])::part(indicator) {
|
|
1784
|
+
box-shadow: var(--shadow-focus-primary);
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1787
|
+
/* ============================================
|
|
1788
|
+
ESTADOS - INDETERMINATE (Checkbox indeterminado)
|
|
1789
|
+
============================================ */
|
|
1790
|
+
|
|
1791
|
+
/* Default - Indeterminate */
|
|
1792
|
+
voa-checkbox[state="indeterminate"]:not([disabled])::part(indicator) {
|
|
1793
|
+
background-color: var(--palette-blue-blue-6); /* #228be6 */
|
|
1794
|
+
border-color: var(--palette-blue-blue-8); /* #1971c2 */
|
|
1795
|
+
}
|
|
1796
|
+
|
|
1797
|
+
/*
|
|
1798
|
+
* INDETERMINATE INDICATOR via CSS pseudo-element ::after
|
|
1799
|
+
*
|
|
1800
|
+
* Structure:
|
|
1801
|
+
* - Uses ::after positioned absolutely within .checkbox-custom (part="indicator")
|
|
1802
|
+
* - The structural CSS sets: display: inline-flex; align-items: center; justify-content: center
|
|
1803
|
+
* - This ensures the ::after dash is centered perfectly within the 20x20 box
|
|
1804
|
+
*
|
|
1805
|
+
* Transform logic:
|
|
1806
|
+
* - translate(-50%, -50%): Center the element at the box center
|
|
1807
|
+
* - Creates a simple horizontal dash
|
|
1808
|
+
*/
|
|
1809
|
+
voa-checkbox[state="indeterminate"]:not([disabled])::part(indicator)::after {
|
|
1810
|
+
content: '';
|
|
1811
|
+
position: absolute;
|
|
1812
|
+
left: 50%;
|
|
1813
|
+
top: 50%;
|
|
1814
|
+
transform: translate(-50%, -50%);
|
|
1815
|
+
width: 8px;
|
|
1816
|
+
height: 2px;
|
|
1817
|
+
background-color: white;
|
|
1818
|
+
box-shadow: 0px 0.667px 0.333px 0.033px rgba(24, 24, 24, 0.05);
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
voa-checkbox[state="indeterminate"]:not([disabled])::part(label) {
|
|
1822
|
+
color: var(--text-primary); /* #0b1215 */
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
/* Hover - Indeterminate */
|
|
1826
|
+
voa-checkbox[state="indeterminate"]:hover:not([disabled])::part(indicator) {
|
|
1827
|
+
background-color: var(--palette-blue-blue-4); /* #4dabf7 */
|
|
1828
|
+
border-color: var(--palette-blue-blue-8); /* #1971c2 */
|
|
1829
|
+
}
|
|
1830
|
+
|
|
1831
|
+
voa-checkbox[state="indeterminate"]:hover:not([disabled])::part(label) {
|
|
1832
|
+
color: var(--text-hover); /* #0064cb */
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
/* Focused - Indeterminate */
|
|
1836
|
+
voa-checkbox[state="indeterminate"]:focus-visible:not([disabled])::part(indicator) {
|
|
1837
|
+
box-shadow: var(--shadow-focus-primary);
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
/* ============================================
|
|
1841
|
+
ESTADO - DISABLED
|
|
1842
|
+
============================================ */
|
|
1843
|
+
|
|
1844
|
+
/* Disabled - Inactive */
|
|
1845
|
+
voa-checkbox[state="inactive"][disabled]::part(indicator) {
|
|
1846
|
+
background-color: rgba(255, 255, 255, 0.25);
|
|
1847
|
+
border-color: rgba(24, 24, 24, 0.06);
|
|
1848
|
+
cursor: not-allowed;
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
voa-checkbox[state="inactive"][disabled]::part(label) {
|
|
1852
|
+
color: var(--text-disabled); /* rgba(11,18,21,0.25) */
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1855
|
+
/* Disabled - Active */
|
|
1856
|
+
voa-checkbox[state="active"][disabled]::part(indicator) {
|
|
1857
|
+
background-color: rgba(255, 255, 255, 0.25);
|
|
1858
|
+
border-color: rgba(24, 24, 24, 0.25);
|
|
1859
|
+
cursor: not-allowed;
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
voa-checkbox[state="active"][disabled]::part(indicator)::after {
|
|
1863
|
+
opacity: 0.5;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
voa-checkbox[state="active"][disabled]::part(label) {
|
|
1867
|
+
color: var(--text-disabled); /* rgba(11,18,21,0.25) */
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1870
|
+
/* Disabled - Indeterminate */
|
|
1871
|
+
voa-checkbox[state="indeterminate"][disabled]::part(indicator) {
|
|
1872
|
+
background-color: rgba(255, 255, 255, 0.25);
|
|
1873
|
+
border-color: rgba(24, 24, 24, 0.25);
|
|
1874
|
+
cursor: not-allowed;
|
|
1875
|
+
}
|
|
1876
|
+
|
|
1877
|
+
voa-checkbox[state="indeterminate"][disabled]::part(indicator)::after {
|
|
1878
|
+
opacity: 0.5;
|
|
1879
|
+
}
|
|
1880
|
+
|
|
1881
|
+
voa-checkbox[state="indeterminate"][disabled]::part(label) {
|
|
1882
|
+
color: var(--text-disabled); /* rgba(11,18,21,0.25) */
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1885
|
+
/* ============================================
|
|
1886
|
+
LABEL - Texto do label
|
|
1887
|
+
============================================ */
|
|
1888
|
+
|
|
1889
|
+
voa-checkbox::part(label) {
|
|
1890
|
+
color: var(--text-primary); /* #0b1215 */
|
|
1891
|
+
user-select: none;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1894
|
+
/* ============================================
|
|
1895
|
+
INPUT - Elemento nativo (visualmente oculto)
|
|
1896
|
+
============================================ */
|
|
1897
|
+
|
|
1898
|
+
voa-checkbox::part(input) {
|
|
1899
|
+
/* Já está oculto no CSS estrutural, apenas garantir que não interfira */
|
|
1900
|
+
position: absolute;
|
|
1901
|
+
opacity: 0;
|
|
1902
|
+
width: 0;
|
|
1903
|
+
height: 0;
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
/* ============================================
|
|
1907
|
+
FOCUS VISIBLE - Outline para acessibilidade
|
|
1908
|
+
============================================ */
|
|
1909
|
+
|
|
1910
|
+
voa-checkbox:focus-visible::part(base) {
|
|
1911
|
+
outline: 2px solid var(--brand-base);
|
|
1912
|
+
outline-offset: 2px;
|
|
1913
|
+
border-radius: var(--radius-xs);
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
/* ============================================
|
|
1917
|
+
voa-input-addon.external.css
|
|
1918
|
+
============================================ */
|
|
1919
|
+
|
|
1920
|
+
/*
|
|
1921
|
+
* VoaInputAddon Component Styles
|
|
1922
|
+
*
|
|
1923
|
+
* Estilos aplicados via CSS Parts API usando design tokens semânticos.
|
|
1924
|
+
* Baseado no design do Figma: https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=438-2157
|
|
1925
|
+
*
|
|
1926
|
+
* Typography Tokens:
|
|
1927
|
+
* - Desktop/Body-md/Bold: font-family: var(--base/family/family-sans, 'Lato'), font-weight: var(--typography-base-body-sm-bold-weight), font-size: 16px, line-height: 24px
|
|
1928
|
+
* - Desktop/Body-sm/Regular: font-family: var(--base/family/family-sans, 'Lato'), font-weight: var(--typography-base-body-sm-regular-weight), font-size: 14px, line-height: 16px
|
|
1929
|
+
* - Desktop/Body-sm/Bold: font-family: var(--base/family/family-sans, 'Lato'), font-weight: var(--typography-base-body-sm-bold-weight), font-size: 14px, line-height: 16px
|
|
1930
|
+
*/
|
|
1931
|
+
|
|
1932
|
+
/* Base */
|
|
1933
|
+
voa-input-addon::part(base) {
|
|
1934
|
+
display: flex;
|
|
1935
|
+
align-items: center;
|
|
1936
|
+
box-sizing: border-box;
|
|
1937
|
+
flex-shrink: 0;
|
|
1938
|
+
flex-grow: 0;
|
|
1939
|
+
height: 46px;
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
voa-input-addon--interactive::part(base) {
|
|
1943
|
+
cursor: pointer;
|
|
1944
|
+
user-select: none;
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
voa-input-addon--interactive::part(base):hover {
|
|
1948
|
+
opacity: 0.8;
|
|
1949
|
+
}
|
|
1950
|
+
|
|
1951
|
+
voa-input-addon--interactive::part(base):focus-visible {
|
|
1952
|
+
outline: 2px solid var(--brand-base);
|
|
1953
|
+
outline-offset: 2px;
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1956
|
+
/* Content */
|
|
1957
|
+
voa-input-addon::part(content) {
|
|
1958
|
+
display: flex;
|
|
1959
|
+
align-items: center;
|
|
1960
|
+
gap: var(--spacing-spacing-xxs, 2px);
|
|
1961
|
+
height: 100%;
|
|
1962
|
+
flex-shrink: 0;
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1965
|
+
/* Text - Desktop/Body-md/Bold */
|
|
1966
|
+
voa-input-addon::part(text) {
|
|
1967
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
1968
|
+
font-size: var(--typography-base-type-scale-6, 16px);
|
|
1969
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
1970
|
+
line-height: 24px;
|
|
1971
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
/* Variante: Label */
|
|
1975
|
+
voa-input-addon[variant="label"]::part(base) {
|
|
1976
|
+
background-color: var(--palette-gray-gray-2, #e9ecef);
|
|
1977
|
+
border-right: 1px solid var(--palette-gray-gray-2, #e9ecef);
|
|
1978
|
+
padding: 10px var(--structure-large-spacing-rg, 12px) 10px 10px;
|
|
1979
|
+
}
|
|
1980
|
+
|
|
1981
|
+
voa-input-addon[variant="label"]::part(content) {
|
|
1982
|
+
gap: 10px;
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
/* Variante: Select */
|
|
1986
|
+
voa-input-addon[variant="select"]::part(base) {
|
|
1987
|
+
background-color: var(--palette-gray-gray-2, #e9ecef);
|
|
1988
|
+
border-right: 1px solid var(--palette-gray-gray-2, #e9ecef);
|
|
1989
|
+
padding: 10px var(--spacing-spacing-xxs, 2px) 10px 10px;
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
voa-input-addon[variant="select"]::part(dropdown-icon) {
|
|
1993
|
+
width: 24px;
|
|
1994
|
+
height: 24px;
|
|
1995
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
1996
|
+
}
|
|
1997
|
+
|
|
1998
|
+
/* Variante: Flags */
|
|
1999
|
+
voa-input-addon[variant="flags"]::part(base) {
|
|
2000
|
+
background-color: var(--palette-gray-gray-2, #e9ecef);
|
|
2001
|
+
padding: var(--structure-large-spacing-rg, 12px) 0 var(--structure-large-spacing-rg, 12px) var(--structure-large-spacing-rg, 12px);
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
voa-input-addon[variant="flags"]::part(content) {
|
|
2005
|
+
gap: 0;
|
|
2006
|
+
}
|
|
2007
|
+
|
|
2008
|
+
voa-input-addon[variant="flags"]::part(icon) {
|
|
2009
|
+
width: 24px;
|
|
2010
|
+
height: 24px;
|
|
2011
|
+
background-color: var(--palette-gray-gray-6, #868e96);
|
|
2012
|
+
border-radius: 100px;
|
|
2013
|
+
flex-shrink: 0;
|
|
2014
|
+
}
|
|
2015
|
+
|
|
2016
|
+
voa-input-addon[variant="flags"]::part(text) {
|
|
2017
|
+
padding-left: var(--spacing-spacing-xs, 4px);
|
|
2018
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2019
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
2020
|
+
font-weight: var(--typography-base-body-sm-regular-weight, 400);
|
|
2021
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
2022
|
+
color: var(--palette-gray-gray-6, #868e96);
|
|
2023
|
+
}
|
|
2024
|
+
|
|
2025
|
+
voa-input-addon[variant="flags"]::part(dropdown-icon) {
|
|
2026
|
+
width: 24px;
|
|
2027
|
+
height: 24px;
|
|
2028
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
/* Variante: Button */
|
|
2032
|
+
voa-input-addon[variant="button"]::part(base) {
|
|
2033
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
2034
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
2035
|
+
}
|
|
2036
|
+
|
|
2037
|
+
voa-input-addon[variant="button"]::part(content) {
|
|
2038
|
+
background-color: var(--palette-gray-gray-3, #dee2e6);
|
|
2039
|
+
border: var(--border-width-thin) solid var(--palette-gray-gray-5, #adb5bd);
|
|
2040
|
+
border-radius: var(--structure-large-radius-md, 12px);
|
|
2041
|
+
padding: var(--spacing-spacing-xs, 4px) var(--spacing-spacing-sm, 8px);
|
|
2042
|
+
gap: var(--spacing-spacing-xxs, 2px);
|
|
2043
|
+
justify-content: center;
|
|
2044
|
+
height: 100%;
|
|
2045
|
+
}
|
|
2046
|
+
|
|
2047
|
+
voa-input-addon[variant="button"]::part(text) {
|
|
2048
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2049
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
2050
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
2051
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
2052
|
+
color: var(--palette-gray-gray-6, #868e96);
|
|
2053
|
+
}
|
|
2054
|
+
|
|
2055
|
+
/* Variante: Clear */
|
|
2056
|
+
voa-input-addon[variant="clear"]::part(base) {
|
|
2057
|
+
padding: 11px var(--structure-large-spacing-rg, 12px);
|
|
2058
|
+
gap: 10px;
|
|
2059
|
+
}
|
|
2060
|
+
|
|
2061
|
+
voa-input-addon[variant="clear"]::part(content) {
|
|
2062
|
+
gap: 10px;
|
|
2063
|
+
}
|
|
2064
|
+
|
|
2065
|
+
voa-input-addon[variant="clear"]::part(icon) {
|
|
2066
|
+
width: 24px;
|
|
2067
|
+
height: 24px;
|
|
2068
|
+
color: #76767f; /* Figma spec: rgba(118, 118, 127, 1) */
|
|
2069
|
+
}
|
|
2070
|
+
|
|
2071
|
+
/* Variante: Shortcut */
|
|
2072
|
+
voa-input-addon[variant="shortcut"]::part(base) {
|
|
2073
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
2074
|
+
}
|
|
2075
|
+
|
|
2076
|
+
voa-input-addon[variant="shortcut"]::part(content) {
|
|
2077
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
2078
|
+
}
|
|
2079
|
+
|
|
2080
|
+
/* Note: Shortcut variant uses voa-keybinding component internally */
|
|
2081
|
+
/* Style voa-keybinding separately if needed */
|
|
2082
|
+
|
|
2083
|
+
/* Variante: Currency-pre */
|
|
2084
|
+
voa-input-addon[variant="currency-pre"]::part(base) {
|
|
2085
|
+
padding: 10px;
|
|
2086
|
+
gap: 10px;
|
|
2087
|
+
}
|
|
2088
|
+
|
|
2089
|
+
voa-input-addon[variant="currency-pre"]::part(content) {
|
|
2090
|
+
gap: 10px;
|
|
2091
|
+
}
|
|
2092
|
+
|
|
2093
|
+
voa-input-addon[variant="currency-pre"]::part(text) {
|
|
2094
|
+
font-family: 'Manrope', sans-serif;
|
|
2095
|
+
font-size: var(--typography-base-type-scale-6, 16px);
|
|
2096
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
2097
|
+
line-height: 24px;
|
|
2098
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
2099
|
+
}
|
|
2100
|
+
|
|
2101
|
+
/* Variante: Currency-post */
|
|
2102
|
+
voa-input-addon[variant="currency-post"]::part(base) {
|
|
2103
|
+
gap: var(--spacing-spacing-sm, 8px);
|
|
2104
|
+
}
|
|
2105
|
+
|
|
2106
|
+
voa-input-addon[variant="currency-post"]::part(content) {
|
|
2107
|
+
gap: var(--spacing-spacing-sm, 8px);
|
|
2108
|
+
}
|
|
2109
|
+
|
|
2110
|
+
voa-input-addon[variant="currency-post"]::part(text) {
|
|
2111
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2112
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
2113
|
+
font-weight: var(--typography-base-body-sm-bold-weight, 600);
|
|
2114
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
2115
|
+
color: var(--palette-gray-gray-6, #868e96);
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
voa-input-addon[variant="currency-post"]::part(dropdown-icon) {
|
|
2119
|
+
width: 24px;
|
|
2120
|
+
height: 24px;
|
|
2121
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
2122
|
+
}
|
|
2123
|
+
|
|
2124
|
+
/* ============================================
|
|
2125
|
+
voa-input.external.css
|
|
2126
|
+
============================================ */
|
|
2127
|
+
|
|
2128
|
+
/*
|
|
2129
|
+
* VoaInput Component Styles
|
|
2130
|
+
*
|
|
2131
|
+
* Estilos aplicados via CSS Parts API usando design tokens semânticos.
|
|
2132
|
+
* Baseado no design do Figma: https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=437-2006
|
|
2133
|
+
*/
|
|
2134
|
+
|
|
2135
|
+
/* Input Container */
|
|
2136
|
+
voa-input::part(container) {
|
|
2137
|
+
background-color: var(--colors-structure-bg-base, #ffffff);
|
|
2138
|
+
border: var(--border-width-medium) solid var(--structure-colors-border-color, #adb5bd);
|
|
2139
|
+
border-radius: var(--structure-large-radius-lg, 16px);
|
|
2140
|
+
padding: var(--structure-large-spacing-rg, 12px);
|
|
2141
|
+
gap: var(--structure-large-spacing-sm, 8px);
|
|
2142
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
2143
|
+
box-shadow: var(--voa-shadow-input);
|
|
2144
|
+
}
|
|
2145
|
+
|
|
2146
|
+
/* Quando há prefix ou suffix, remover padding do container mas manter altura */
|
|
2147
|
+
voa-input[data-has-prefix="true"]::part(container),
|
|
2148
|
+
voa-input[data-has-suffix="true"]::part(container) {
|
|
2149
|
+
padding: 0;
|
|
2150
|
+
gap: 0;
|
|
2151
|
+
align-items: stretch;
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
/* Garantir que addons não redimensionem o container */
|
|
2155
|
+
voa-input[data-has-prefix="true"]::part(prefix),
|
|
2156
|
+
voa-input[data-has-suffix="true"]::part(suffix) {
|
|
2157
|
+
align-self: stretch;
|
|
2158
|
+
display: flex;
|
|
2159
|
+
align-items: center;
|
|
2160
|
+
margin: 0;
|
|
2161
|
+
padding: 0;
|
|
2162
|
+
}
|
|
2163
|
+
|
|
2164
|
+
/* Padding do input quando há addons - apenas nas laterais sem addon */
|
|
2165
|
+
voa-input[data-has-prefix="true"]:not([data-has-suffix="true"])::part(input) {
|
|
2166
|
+
padding: 0;
|
|
2167
|
+
padding-right: var(--structure-large-spacing-rg, 12px);
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
voa-input[data-has-suffix="true"]:not([data-has-prefix="true"])::part(input) {
|
|
2171
|
+
padding: 0;
|
|
2172
|
+
padding-left: var(--structure-large-spacing-rg, 12px);
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
voa-input[data-has-prefix="true"][data-has-suffix="true"]::part(input) {
|
|
2176
|
+
padding: 0;
|
|
2177
|
+
}
|
|
2178
|
+
|
|
2179
|
+
/* Padding padrão do input quando não há addons */
|
|
2180
|
+
voa-input:not([data-has-prefix="true"]):not([data-has-suffix="true"])::part(input) {
|
|
2181
|
+
padding: 0 var(--structure-large-spacing-rg, 12px);
|
|
2182
|
+
}
|
|
2183
|
+
|
|
2184
|
+
voa-input[size="sm"]::part(container) {
|
|
2185
|
+
padding: var(--structure-large-spacing-sm, 8px);
|
|
2186
|
+
height: 32px;
|
|
2187
|
+
max-height: 32px;
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2190
|
+
voa-input[size="sm"][data-has-prefix="true"]::part(container),
|
|
2191
|
+
voa-input[size="sm"][data-has-suffix="true"]::part(container) {
|
|
2192
|
+
padding: 0;
|
|
2193
|
+
gap: 0;
|
|
2194
|
+
height: 32px;
|
|
2195
|
+
max-height: 32px;
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
voa-input[size="sm"][data-has-prefix="true"]:not([data-has-suffix="true"])::part(input) {
|
|
2199
|
+
padding: 0;
|
|
2200
|
+
padding-right: var(--structure-large-spacing-sm, 8px);
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
voa-input[size="sm"][data-has-suffix="true"]:not([data-has-prefix="true"])::part(input) {
|
|
2204
|
+
padding: 0;
|
|
2205
|
+
padding-left: var(--structure-large-spacing-sm, 8px);
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
voa-input[size="sm"][data-has-prefix="true"][data-has-suffix="true"]::part(input) {
|
|
2209
|
+
padding: 0;
|
|
2210
|
+
}
|
|
2211
|
+
|
|
2212
|
+
voa-input[size="sm"]:not([data-has-prefix="true"]):not([data-has-suffix="true"])::part(input) {
|
|
2213
|
+
padding: 0 var(--structure-large-spacing-sm, 8px);
|
|
2214
|
+
}
|
|
2215
|
+
|
|
2216
|
+
voa-input[size="md"]::part(container) {
|
|
2217
|
+
padding: var(--structure-large-spacing-rg, 12px);
|
|
2218
|
+
height: 48px;
|
|
2219
|
+
max-height: 48px;
|
|
2220
|
+
}
|
|
2221
|
+
|
|
2222
|
+
voa-input[size="md"][data-has-prefix="true"]::part(container),
|
|
2223
|
+
voa-input[size="md"][data-has-suffix="true"]::part(container) {
|
|
2224
|
+
padding: 0;
|
|
2225
|
+
gap: 0;
|
|
2226
|
+
height: 48px;
|
|
2227
|
+
max-height: 48px;
|
|
2228
|
+
}
|
|
2229
|
+
|
|
2230
|
+
voa-input[size="md"][data-has-prefix="true"]:not([data-has-suffix="true"])::part(input) {
|
|
2231
|
+
padding: 0;
|
|
2232
|
+
padding-right: var(--structure-large-spacing-rg, 12px);
|
|
2233
|
+
}
|
|
2234
|
+
|
|
2235
|
+
voa-input[size="md"][data-has-suffix="true"]:not([data-has-prefix="true"])::part(input) {
|
|
2236
|
+
padding: 0;
|
|
2237
|
+
padding-left: var(--structure-large-spacing-rg, 12px);
|
|
2238
|
+
}
|
|
2239
|
+
|
|
2240
|
+
voa-input[size="md"][data-has-prefix="true"][data-has-suffix="true"]::part(input) {
|
|
2241
|
+
padding: 0;
|
|
2242
|
+
}
|
|
2243
|
+
|
|
2244
|
+
voa-input[size="md"]:not([data-has-prefix="true"]):not([data-has-suffix="true"])::part(input) {
|
|
2245
|
+
padding: 0 var(--structure-large-spacing-rg, 12px);
|
|
2246
|
+
}
|
|
2247
|
+
|
|
2248
|
+
voa-input[size="lg"]::part(container) {
|
|
2249
|
+
padding: var(--structure-large-spacing-rg, 12px);
|
|
2250
|
+
height: 56px;
|
|
2251
|
+
max-height: 56px;
|
|
2252
|
+
}
|
|
2253
|
+
|
|
2254
|
+
voa-input[size="lg"][data-has-prefix="true"]::part(container),
|
|
2255
|
+
voa-input[size="lg"][data-has-suffix="true"]::part(container) {
|
|
2256
|
+
padding: 0;
|
|
2257
|
+
gap: 0;
|
|
2258
|
+
height: 56px;
|
|
2259
|
+
max-height: 56px;
|
|
2260
|
+
}
|
|
2261
|
+
|
|
2262
|
+
voa-input[size="lg"][data-has-prefix="true"]:not([data-has-suffix="true"])::part(input) {
|
|
2263
|
+
padding: 0;
|
|
2264
|
+
padding-right: var(--structure-large-spacing-rg, 12px);
|
|
2265
|
+
}
|
|
2266
|
+
|
|
2267
|
+
voa-input[size="lg"][data-has-suffix="true"]:not([data-has-prefix="true"])::part(input) {
|
|
2268
|
+
padding: 0;
|
|
2269
|
+
padding-left: var(--structure-large-spacing-rg, 12px);
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
voa-input[size="lg"][data-has-prefix="true"][data-has-suffix="true"]::part(input) {
|
|
2273
|
+
padding: 0;
|
|
2274
|
+
}
|
|
2275
|
+
|
|
2276
|
+
voa-input[size="lg"]:not([data-has-prefix="true"]):not([data-has-suffix="true"])::part(input) {
|
|
2277
|
+
padding: 0 var(--structure-large-spacing-rg, 12px);
|
|
2278
|
+
}
|
|
2279
|
+
|
|
2280
|
+
/* Input element */
|
|
2281
|
+
voa-input::part(input) {
|
|
2282
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2283
|
+
font-size: var(--typography-base-type-scale-6, 16px);
|
|
2284
|
+
line-height: var(--typography-base-type-scale-4, 24px);
|
|
2285
|
+
color: var(--text-primary, #0b1215);
|
|
2286
|
+
background-color: transparent;
|
|
2287
|
+
border: none;
|
|
2288
|
+
outline: none;
|
|
2289
|
+
flex: 1 1 0%;
|
|
2290
|
+
min-width: 0;
|
|
2291
|
+
width: 100%;
|
|
2292
|
+
height: 100%;
|
|
2293
|
+
box-sizing: border-box;
|
|
2294
|
+
padding: 0;
|
|
2295
|
+
}
|
|
2296
|
+
|
|
2297
|
+
voa-input::part(input)::placeholder {
|
|
2298
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
2299
|
+
}
|
|
2300
|
+
|
|
2301
|
+
/* Title Row & Label */
|
|
2302
|
+
voa-input::part(title-row) {
|
|
2303
|
+
margin-bottom: 6px;
|
|
2304
|
+
}
|
|
2305
|
+
|
|
2306
|
+
voa-input::part(label) {
|
|
2307
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2308
|
+
font-size: var(--typography-base-type-scale-5, 20px);
|
|
2309
|
+
font-weight: var(--typography-base-body-sm-bold-weight);
|
|
2310
|
+
line-height: 32px;
|
|
2311
|
+
color: var(--text-secondary, #495057);
|
|
2312
|
+
display: block;
|
|
2313
|
+
}
|
|
2314
|
+
|
|
2315
|
+
/* Info */
|
|
2316
|
+
voa-input::part(info) {
|
|
2317
|
+
color: var(--text-secondary, #495057);
|
|
2318
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2319
|
+
font-size: var(--typography-base-type-scale-8, 12px);
|
|
2320
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
2321
|
+
padding-bottom: 6px; /* Align with label baseline visually */
|
|
2322
|
+
}
|
|
2323
|
+
|
|
2324
|
+
voa-input::part(info-icon) {
|
|
2325
|
+
color: var(--text-secondary, #495057);
|
|
2326
|
+
}
|
|
2327
|
+
|
|
2328
|
+
voa-input .voa-input__required-indicator {
|
|
2329
|
+
color: var(--semantic-colors-danger, #e51937);
|
|
2330
|
+
margin-left: var(--structure-large-spacing-xxs, 2px);
|
|
2331
|
+
}
|
|
2332
|
+
|
|
2333
|
+
/* Helper text */
|
|
2334
|
+
voa-input::part(helper-text) {
|
|
2335
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
2336
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
2337
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
2338
|
+
color: var(--text-secondary, #495057);
|
|
2339
|
+
margin-top: 6px;
|
|
2340
|
+
display: block;
|
|
2341
|
+
}
|
|
2342
|
+
|
|
2343
|
+
voa-input[error]::part(helper-text) {
|
|
2344
|
+
color: var(--semantic-colors-danger, #e51937);
|
|
2345
|
+
}
|
|
2346
|
+
|
|
2347
|
+
voa-input[valid]::part(helper-text) {
|
|
2348
|
+
color: var(--semantic-colors-success, #109e7c);
|
|
2349
|
+
}
|
|
2350
|
+
|
|
2351
|
+
voa-input[warning]::part(helper-text) {
|
|
2352
|
+
color: var(--semantic-colors-warning, #ff9900);
|
|
2353
|
+
}
|
|
2354
|
+
|
|
2355
|
+
/* States - Hover */
|
|
2356
|
+
voa-input:not([disabled]):not([readonly]):hover::part(container) {
|
|
2357
|
+
border-color: var(--input-hover-border-color, var(--brand-base, #0064cb));
|
|
2358
|
+
background-color: var(--palette-gray-gray-1, #f1f3f5);
|
|
2359
|
+
}
|
|
2360
|
+
|
|
2361
|
+
/* States - Focused */
|
|
2362
|
+
voa-input:focus-within::part(container) {
|
|
2363
|
+
border-color: var(--input-focus-border-color, var(--brand-base, #0064cb));
|
|
2364
|
+
box-shadow: var(--input-active-inner-shadow, inset 0px 0px 8px 2px rgba(0, 100, 203, 0.5)),
|
|
2365
|
+
var(--input-active-drop-shadow, 0px 4px 4px rgba(24, 24, 27, 0.15));
|
|
2366
|
+
}
|
|
2367
|
+
|
|
2368
|
+
/* States - Error */
|
|
2369
|
+
voa-input[error]::part(container) {
|
|
2370
|
+
border-color: var(--semantic-colors-danger, #e51937);
|
|
2371
|
+
}
|
|
2372
|
+
|
|
2373
|
+
voa-input[error]:focus-within::part(container) {
|
|
2374
|
+
border-color: var(--semantic-colors-danger, #e51937);
|
|
2375
|
+
box-shadow: inset 0px 0px 8px 2px var(--semantic-colors-danger, #e51937),
|
|
2376
|
+
var(--input-active-drop-shadow, 0px 4px 4px rgba(24, 24, 27, 0.15));
|
|
2377
|
+
}
|
|
2378
|
+
|
|
2379
|
+
/* States - Valid */
|
|
2380
|
+
voa-input[valid]::part(container) {
|
|
2381
|
+
border-color: var(--semantic-colors-success, #109e7c);
|
|
2382
|
+
}
|
|
2383
|
+
|
|
2384
|
+
voa-input[valid]:focus-within::part(container) {
|
|
2385
|
+
border-color: var(--semantic-colors-success, #109e7c);
|
|
2386
|
+
box-shadow: inset 0px 0px 8px 2px var(--semantic-colors-success, #109e7c),
|
|
2387
|
+
var(--input-active-drop-shadow, 0px 4px 4px rgba(24, 24, 27, 0.15));
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2390
|
+
/* States - Warning */
|
|
2391
|
+
voa-input[warning]::part(container) {
|
|
2392
|
+
border-color: var(--semantic-colors-warning, #ff9900);
|
|
2393
|
+
}
|
|
2394
|
+
|
|
2395
|
+
voa-input[warning]:focus-within::part(container) {
|
|
2396
|
+
border-color: var(--semantic-colors-warning, #ff9900);
|
|
2397
|
+
box-shadow: inset 0px 0px 8px 2px var(--semantic-colors-warning, #ff9900),
|
|
2398
|
+
var(--input-active-drop-shadow, 0px 4px 4px rgba(24, 24, 27, 0.15));
|
|
2399
|
+
}
|
|
2400
|
+
|
|
2401
|
+
/* States - Disabled */
|
|
2402
|
+
voa-input[disabled]::part(container) {
|
|
2403
|
+
background-color: var(--colors-structure-bg-base-disabled, rgba(255, 255, 255, 0.25));
|
|
2404
|
+
border-color: var(--structure-colors-border-color-secondary, #dee2e6);
|
|
2405
|
+
opacity: 0.6;
|
|
2406
|
+
cursor: not-allowed;
|
|
2407
|
+
}
|
|
2408
|
+
|
|
2409
|
+
voa-input[disabled]::part(input) {
|
|
2410
|
+
color: var(--text-disabled, #0b1215);
|
|
2411
|
+
cursor: not-allowed;
|
|
2412
|
+
}
|
|
2413
|
+
|
|
2414
|
+
/* States - Readonly */
|
|
2415
|
+
voa-input[readonly]::part(container) {
|
|
2416
|
+
background-color: var(--colors-structure-bg-container, #f1f3f5);
|
|
2417
|
+
}
|
|
2418
|
+
|
|
2419
|
+
/* Prefix/Suffix slots */
|
|
2420
|
+
voa-input::part(prefix),
|
|
2421
|
+
voa-input::part(suffix) {
|
|
2422
|
+
display: flex;
|
|
2423
|
+
align-items: center;
|
|
2424
|
+
flex-shrink: 0;
|
|
2425
|
+
flex-grow: 0;
|
|
2426
|
+
width: auto;
|
|
2427
|
+
min-width: 0;
|
|
2428
|
+
}
|
|
2429
|
+
|
|
2430
|
+
/* Unfilled variant */
|
|
2431
|
+
voa-input[fill="false"]::part(container) {
|
|
2432
|
+
background-color: transparent;
|
|
2433
|
+
box-shadow: none;
|
|
2434
|
+
}
|
|
2435
|
+
|
|
2436
|
+
/* ============================================
|
|
2437
|
+
voa-keybinding.external.css
|
|
2438
|
+
============================================ */
|
|
2439
|
+
|
|
2440
|
+
/*
|
|
2441
|
+
* VoaKeybinding Component Styles
|
|
2442
|
+
*
|
|
2443
|
+
* Estilos aplicados via CSS Parts API usando design tokens semânticos.
|
|
2444
|
+
* Baseado no design do Figma: https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=439-2322
|
|
2445
|
+
*/
|
|
2446
|
+
|
|
2447
|
+
voa-keybinding::part(base) {
|
|
2448
|
+
display: inline-flex;
|
|
2449
|
+
align-items: center;
|
|
2450
|
+
gap: var(--spacing-spacing-xxs, 2px);
|
|
2451
|
+
border: var(--border-width-thin) solid var(--structure-colors-border-color);
|
|
2452
|
+
border-radius: var(--structure-large-radius-sm);
|
|
2453
|
+
padding: var(--structure-large-radius-xs) var(--structure-large-spacing-xs);
|
|
2454
|
+
background-color: transparent;
|
|
2455
|
+
}
|
|
2456
|
+
|
|
2457
|
+
voa-keybinding::part(key-icon) {
|
|
2458
|
+
display: flex;
|
|
2459
|
+
align-items: center;
|
|
2460
|
+
justify-content: center;
|
|
2461
|
+
width: 16px;
|
|
2462
|
+
height: 16px;
|
|
2463
|
+
color: var(--palette-gray-gray-6, #868e96);
|
|
2464
|
+
}
|
|
2465
|
+
|
|
2466
|
+
voa-keybinding::part(key-text) {
|
|
2467
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
2468
|
+
font-size: var(--typography-base-body-sm-regular-size);
|
|
2469
|
+
font-weight: var(--typography-base-body-sm-bold-weight);
|
|
2470
|
+
line-height: normal;
|
|
2471
|
+
color: var(--palette-gray-gray-6, #868e96);
|
|
2472
|
+
}
|
|
2473
|
+
|
|
2474
|
+
/* ============================================
|
|
2475
|
+
voa-option.external.css
|
|
2476
|
+
============================================ */
|
|
2477
|
+
|
|
2478
|
+
/**
|
|
2479
|
+
* Estilização Externa do VoaOption
|
|
2480
|
+
*
|
|
2481
|
+
* Este arquivo demonstra como estilizar o componente voa-option
|
|
2482
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
2483
|
+
*
|
|
2484
|
+
* Baseado no design do Figma:
|
|
2485
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=1182-56
|
|
2486
|
+
*
|
|
2487
|
+
* Para usar, importe este arquivo após os tokens:
|
|
2488
|
+
* * */
|
|
2489
|
+
|
|
2490
|
+
/* ============================================
|
|
2491
|
+
BASE - Container raiz do option
|
|
2492
|
+
============================================ */
|
|
2493
|
+
|
|
2494
|
+
voa-option::part(base) {
|
|
2495
|
+
/* Gap entre indicator e label - Semantic Token conforme Figma */
|
|
2496
|
+
gap: var(--voa-spacing-sm);
|
|
2497
|
+
|
|
2498
|
+
/* Transição suave para estados */
|
|
2499
|
+
transition: color 0.2s ease;
|
|
2500
|
+
}
|
|
2501
|
+
|
|
2502
|
+
/* Sem label, sem gap */
|
|
2503
|
+
voa-option:not([label])::part(base) {
|
|
2504
|
+
gap: 0;
|
|
2505
|
+
}
|
|
2506
|
+
|
|
2507
|
+
/* ============================================
|
|
2508
|
+
INDICATOR - Componente radio visual
|
|
2509
|
+
============================================ */
|
|
2510
|
+
|
|
2511
|
+
voa-option::part(indicator) {
|
|
2512
|
+
/* O indicator externo gerencia o espaçamento e layout */
|
|
2513
|
+
flex-shrink: 0;
|
|
2514
|
+
|
|
2515
|
+
/* Border around the radio circle - Default state (unchecked) */
|
|
2516
|
+
border: var(--border-width-thin) solid var(--structure-colors-bg-base, #ffffff);
|
|
2517
|
+
border-radius: 50%;
|
|
2518
|
+
background-color: var(--structure-colors-bg-base, #ffffff);
|
|
2519
|
+
transition: border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;
|
|
2520
|
+
box-shadow: inset 0 0 0 1px rgba(24, 24, 27, 0.2);
|
|
2521
|
+
}
|
|
2522
|
+
|
|
2523
|
+
/* Checked indicator - Primary blue state */
|
|
2524
|
+
voa-option[checked]:not([disabled])::part(indicator) {
|
|
2525
|
+
border-color: var(--colors-light-primary-light, #0064cb);
|
|
2526
|
+
background-color: var(--colors-light-primary-light, #0064cb);
|
|
2527
|
+
box-shadow: 0 0 0 3px rgba(0, 100, 203, 0.1);
|
|
2528
|
+
}
|
|
2529
|
+
|
|
2530
|
+
/* Hover indicator - Unchecked */
|
|
2531
|
+
voa-option:not([disabled]):not([checked]):hover::part(indicator) {
|
|
2532
|
+
border-color: rgba(24, 24, 27, 0.3);
|
|
2533
|
+
box-shadow: inset 0 0 0 1px rgba(24, 24, 27, 0.3);
|
|
2534
|
+
}
|
|
2535
|
+
|
|
2536
|
+
/* Hover indicator - Checked */
|
|
2537
|
+
voa-option[checked]:not([disabled]):hover::part(indicator) {
|
|
2538
|
+
border-color: var(--colors-light-primary-light-400, #0071c8);
|
|
2539
|
+
background-color: var(--colors-light-primary-light-400, #0071c8);
|
|
2540
|
+
box-shadow: 0 0 0 3px var(--colors-light-primary-light-opacity-15);
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
/* Focus indicator - Unchecked */
|
|
2544
|
+
voa-option:not([disabled]):not([checked]):focus-visible::part(indicator) {
|
|
2545
|
+
border-color: var(--colors-light-secondary-light, #00e5ce);
|
|
2546
|
+
box-shadow: inset 0 0 0 1px var(--colors-light-secondary-light, #00e5ce), 0 0 0 3px var(--colors-light-secondary-light-100, #b5eee3);
|
|
2547
|
+
}
|
|
2548
|
+
|
|
2549
|
+
/* Focus indicator - Checked */
|
|
2550
|
+
voa-option[checked]:not([disabled]):focus-visible::part(indicator) {
|
|
2551
|
+
border-color: var(--colors-light-secondary-light, #00e5ce);
|
|
2552
|
+
background-color: var(--colors-light-primary-light, #0064cb);
|
|
2553
|
+
box-shadow: 0 0 0 2px var(--structure-colors-bg-base, #ffffff), 0 0 0 4px var(--colors-light-secondary-light, #00e5ce);
|
|
2554
|
+
}
|
|
2555
|
+
|
|
2556
|
+
/* Disabled indicator border */
|
|
2557
|
+
voa-option[disabled]::part(indicator) {
|
|
2558
|
+
border-color: var(--colors-structure-fill-15);
|
|
2559
|
+
background-color: var(--colors-structure-fill-quaternary);
|
|
2560
|
+
opacity: 0.6;
|
|
2561
|
+
box-shadow: inset 0 0 0 1px var(--colors-structure-fill-terciary);
|
|
2562
|
+
}
|
|
2563
|
+
|
|
2564
|
+
/* ============================================
|
|
2565
|
+
INDICATOR-DOT - Ponto interior do radio
|
|
2566
|
+
============================================ */
|
|
2567
|
+
|
|
2568
|
+
voa-option::part(indicator-dot) {
|
|
2569
|
+
/* Size e visibility são controlados pelos states abaixo */
|
|
2570
|
+
width: 0;
|
|
2571
|
+
height: 0;
|
|
2572
|
+
background-color: var(--structure-colors-bg-base, #ffffff);
|
|
2573
|
+
border-radius: 50%;
|
|
2574
|
+
transition: width 0.2s ease, height 0.2s ease;
|
|
2575
|
+
}
|
|
2576
|
+
|
|
2577
|
+
/* Checked - Dot aparece com cor branca */
|
|
2578
|
+
voa-option[checked]:not([disabled])::part(indicator-dot) {
|
|
2579
|
+
width: var(--option-indicator-dot-size);
|
|
2580
|
+
height: var(--option-indicator-dot-size);
|
|
2581
|
+
background-color: var(--structure-colors-bg-base, #ffffff);
|
|
2582
|
+
}
|
|
2583
|
+
|
|
2584
|
+
/* Disabled checked - Dot com opacidade */
|
|
2585
|
+
voa-option[disabled][checked]::part(indicator-dot) {
|
|
2586
|
+
width: var(--option-indicator-dot-size);
|
|
2587
|
+
height: var(--option-indicator-dot-size);
|
|
2588
|
+
background-color: rgba(255, 255, 255, 0.7);
|
|
2589
|
+
}
|
|
2590
|
+
|
|
2591
|
+
/* ============================================
|
|
2592
|
+
LABEL - Texto da opção
|
|
2593
|
+
============================================ */
|
|
2594
|
+
|
|
2595
|
+
voa-option::part(label) {
|
|
2596
|
+
/* Tipografia - Semantic Token conforme Figma */
|
|
2597
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
2598
|
+
font-size: var(--typography-base-type-scale-6);
|
|
2599
|
+
line-height: var(--line-height-body-md);
|
|
2600
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
2601
|
+
|
|
2602
|
+
/* Cor padrão - Texto base */
|
|
2603
|
+
color: rgba(24, 24, 27, 1);
|
|
2604
|
+
|
|
2605
|
+
/* User select desabilitado */
|
|
2606
|
+
user-select: none;
|
|
2607
|
+
|
|
2608
|
+
/* Transição suave para estados hover/focus */
|
|
2609
|
+
transition: color 0.2s ease;
|
|
2610
|
+
}
|
|
2611
|
+
|
|
2612
|
+
/* ============================================
|
|
2613
|
+
ESTADOS - Default
|
|
2614
|
+
============================================ */
|
|
2615
|
+
|
|
2616
|
+
/* Default - Unchecked */
|
|
2617
|
+
voa-option:not([checked])::part(label) {
|
|
2618
|
+
color: rgba(24, 24, 27, 1);
|
|
2619
|
+
}
|
|
2620
|
+
|
|
2621
|
+
/* Default - Checked */
|
|
2622
|
+
voa-option[checked]::part(label) {
|
|
2623
|
+
color: rgba(24, 24, 27, 1);
|
|
2624
|
+
}
|
|
2625
|
+
|
|
2626
|
+
/* ============================================
|
|
2627
|
+
ESTADOS - Hover
|
|
2628
|
+
============================================ */
|
|
2629
|
+
|
|
2630
|
+
/* Hover - Unchecked */
|
|
2631
|
+
voa-option:not([checked]):not([disabled]):hover::part(label) {
|
|
2632
|
+
color: rgba(24, 24, 27, 1);
|
|
2633
|
+
}
|
|
2634
|
+
|
|
2635
|
+
/* Hover - Checked */
|
|
2636
|
+
voa-option[checked]:not([disabled]):hover::part(label) {
|
|
2637
|
+
color: rgba(24, 24, 27, 1);
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
/* Hover - Base container cursor */
|
|
2641
|
+
voa-option:not([disabled]):hover {
|
|
2642
|
+
cursor: pointer;
|
|
2643
|
+
}
|
|
2644
|
+
|
|
2645
|
+
/* ============================================
|
|
2646
|
+
ESTADOS - Focus
|
|
2647
|
+
============================================ */
|
|
2648
|
+
|
|
2649
|
+
/* Focus - Unchecked */
|
|
2650
|
+
voa-option:not([checked]):focus-visible::part(label) {
|
|
2651
|
+
color: rgba(24, 24, 27, 1);
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2654
|
+
/* Focus - Checked */
|
|
2655
|
+
voa-option[checked]:focus-visible::part(label) {
|
|
2656
|
+
color: rgba(24, 24, 27, 1);
|
|
2657
|
+
}
|
|
2658
|
+
|
|
2659
|
+
/* ============================================
|
|
2660
|
+
ESTADO - Disabled
|
|
2661
|
+
============================================ */
|
|
2662
|
+
|
|
2663
|
+
/* Disabled - Unchecked */
|
|
2664
|
+
voa-option[disabled]:not([checked])::part(label) {
|
|
2665
|
+
color: rgba(24, 24, 27, 0.4);
|
|
2666
|
+
}
|
|
2667
|
+
|
|
2668
|
+
/* Disabled - Checked */
|
|
2669
|
+
voa-option[disabled][checked]::part(label) {
|
|
2670
|
+
color: rgba(24, 24, 27, 0.4);
|
|
2671
|
+
}
|
|
2672
|
+
|
|
2673
|
+
/* ============================================
|
|
2674
|
+
ACESSIBILIDADE - Focus visível
|
|
2675
|
+
============================================ */
|
|
2676
|
+
|
|
2677
|
+
voa-option:focus-within::part(base) {
|
|
2678
|
+
outline: none;
|
|
2679
|
+
}
|
|
2680
|
+
|
|
2681
|
+
/* Respeitar preferências de movimento reduzido */
|
|
2682
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2683
|
+
voa-option::part(indicator),
|
|
2684
|
+
voa-option::part(indicator-dot),
|
|
2685
|
+
voa-option::part(label) {
|
|
2686
|
+
transition: none;
|
|
2687
|
+
}
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2690
|
+
/* ============================================
|
|
2691
|
+
voa-pagination.external.css
|
|
2692
|
+
============================================ */
|
|
2693
|
+
|
|
2694
|
+
/* Base styles for all pagination items (buttons) */
|
|
2695
|
+
voa-pagination-item::part(base) {
|
|
2696
|
+
border-radius: var(--voa-radius-md);
|
|
2697
|
+
background-color: var(--voa-bg-base);
|
|
2698
|
+
color: var(--voa-text-secondary);
|
|
2699
|
+
transition: all 0.2s ease;
|
|
2700
|
+
}
|
|
2701
|
+
|
|
2702
|
+
/* Hover state */
|
|
2703
|
+
voa-pagination-item:hover::part(base) {
|
|
2704
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
2705
|
+
}
|
|
2706
|
+
|
|
2707
|
+
/* Active state (current page) - Figma: white bg, blue border, blue inner shadow */
|
|
2708
|
+
voa-pagination-item[active="true"]::part(base) {
|
|
2709
|
+
background-color: var(--voa-bg-base);
|
|
2710
|
+
border: var(--border-width-thin) solid var(--brand-base);
|
|
2711
|
+
color: var(--voa-text-primary);
|
|
2712
|
+
box-shadow: var(--input-active-inner-shadow);
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2715
|
+
/* Disabled state */
|
|
2716
|
+
voa-pagination-item[disabled="true"]::part(base) {
|
|
2717
|
+
opacity: 0.5;
|
|
2718
|
+
cursor: not-allowed;
|
|
2719
|
+
}
|
|
2720
|
+
|
|
2721
|
+
/* Number text styling - Figma: Lato SemiBold, 16px, line-height 24px */
|
|
2722
|
+
voa-pagination-item::part(content) {
|
|
2723
|
+
font-family: var(--voa-font-family-sans);
|
|
2724
|
+
font-weight: var(--typography-base-body-sm-bold-weight);
|
|
2725
|
+
font-size: 1rem;
|
|
2726
|
+
line-height: 24px;
|
|
2727
|
+
color: inherit;
|
|
2728
|
+
text-align: center;
|
|
2729
|
+
}
|
|
2730
|
+
|
|
2731
|
+
/* Ellipsis styling - Figma: Manrope SemiBold, 20px */
|
|
2732
|
+
voa-pagination-item[type="ellipsis"]::part(content) {
|
|
2733
|
+
font-family: 'Manrope', sans-serif;
|
|
2734
|
+
font-weight: var(--typography-base-body-sm-bold-weight);
|
|
2735
|
+
font-size: 1.25rem;
|
|
2736
|
+
line-height: 0;
|
|
2737
|
+
color: var(--voa-text-secondary);
|
|
2738
|
+
}
|
|
2739
|
+
|
|
2740
|
+
/* Icon styling */
|
|
2741
|
+
voa-pagination-item::part(icon) {
|
|
2742
|
+
color: var(--voa-text-secondary);
|
|
2743
|
+
width: 16px;
|
|
2744
|
+
height: 16px;
|
|
2745
|
+
}
|
|
2746
|
+
|
|
2747
|
+
voa-pagination-item::part(icon) svg {
|
|
2748
|
+
width: 16px;
|
|
2749
|
+
height: 16px;
|
|
2750
|
+
stroke: currentColor;
|
|
2751
|
+
fill: none;
|
|
2752
|
+
}
|
|
2753
|
+
|
|
2754
|
+
/* Page Size & Goto Styling - Figma: Lato Regular, 14px, line-height 16px */
|
|
2755
|
+
voa-pagination-item::part(label) {
|
|
2756
|
+
font-family: var(--voa-font-family-sans);
|
|
2757
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
2758
|
+
font-size: var(--typography-base-body-sm-regular-size);
|
|
2759
|
+
line-height: 16px;
|
|
2760
|
+
color: var(--voa-text-secondary);
|
|
2761
|
+
}
|
|
2762
|
+
|
|
2763
|
+
/* Select box (page-size) - Figma: white bg, border, 32px height */
|
|
2764
|
+
voa-pagination-item::part(select) {
|
|
2765
|
+
height: 32px;
|
|
2766
|
+
padding: 0 var(--voa-spacing-xs);
|
|
2767
|
+
background-color: var(--voa-bg-base);
|
|
2768
|
+
border: var(--border-width-medium) solid var(--voa-border-color);
|
|
2769
|
+
border-radius: var(--voa-radius-md);
|
|
2770
|
+
display: flex;
|
|
2771
|
+
align-items: center;
|
|
2772
|
+
justify-content: center;
|
|
2773
|
+
gap: 4px;
|
|
2774
|
+
cursor: pointer;
|
|
2775
|
+
box-sizing: border-box;
|
|
2776
|
+
}
|
|
2777
|
+
|
|
2778
|
+
/* Input wrapper (goto-page) - Figma: white bg, border, 32px height */
|
|
2779
|
+
voa-pagination-item::part(input-wrapper) {
|
|
2780
|
+
height: 32px;
|
|
2781
|
+
padding: 0 var(--voa-spacing-md);
|
|
2782
|
+
background-color: var(--voa-bg-base);
|
|
2783
|
+
border: var(--border-width-medium) solid var(--voa-border-color);
|
|
2784
|
+
border-radius: var(--voa-radius-md);
|
|
2785
|
+
display: flex;
|
|
2786
|
+
align-items: center;
|
|
2787
|
+
justify-content: center;
|
|
2788
|
+
box-sizing: border-box;
|
|
2789
|
+
}
|
|
2790
|
+
|
|
2791
|
+
/* Input field - Figma: Lato Regular, 16px, line-height 24px */
|
|
2792
|
+
voa-pagination-item::part(input) {
|
|
2793
|
+
width: 20px;
|
|
2794
|
+
text-align: center;
|
|
2795
|
+
font-family: var(--voa-font-family-sans);
|
|
2796
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
2797
|
+
font-size: 1rem;
|
|
2798
|
+
line-height: 24px;
|
|
2799
|
+
color: var(--voa-text-primary);
|
|
2800
|
+
border: none;
|
|
2801
|
+
background: transparent;
|
|
2802
|
+
padding: 0;
|
|
2803
|
+
}
|
|
2804
|
+
|
|
2805
|
+
voa-pagination-item::part(input):focus {
|
|
2806
|
+
outline: none;
|
|
2807
|
+
}
|
|
2808
|
+
|
|
2809
|
+
/* Value display in select */
|
|
2810
|
+
voa-pagination-item .voa-pagination-item__value {
|
|
2811
|
+
font-family: var(--voa-font-family-sans);
|
|
2812
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
2813
|
+
font-size: 1rem;
|
|
2814
|
+
line-height: 24px;
|
|
2815
|
+
color: var(--voa-text-primary);
|
|
2816
|
+
}
|
|
2817
|
+
|
|
2818
|
+
/* ============================================
|
|
2819
|
+
voa-radio.external.css
|
|
2820
|
+
============================================ */
|
|
2821
|
+
|
|
2822
|
+
/**
|
|
2823
|
+
* Estilização Externa do VoaRadio
|
|
2824
|
+
*
|
|
2825
|
+
* Este arquivo demonstra como estilizar o componente voa-radio
|
|
2826
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
2827
|
+
*
|
|
2828
|
+
* Baseado no design do Figma:
|
|
2829
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=1182-56
|
|
2830
|
+
*
|
|
2831
|
+
* Para usar, importe este arquivo após os tokens:
|
|
2832
|
+
* * *
|
|
2833
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
2834
|
+
*
|
|
2835
|
+
* Figma Token → Style Dictionary Token
|
|
2836
|
+
* --------------------------------------------
|
|
2837
|
+
* --structure-colors/bg-base → --structure-colors-bg-base
|
|
2838
|
+
* --structure-colors/bg-elevated → --structure-colors-bg-elevated
|
|
2839
|
+
* --structure-colors/bg-base-disabled → --structure-colors-bg-base-disabled
|
|
2840
|
+
* --structure-colors/border-color → --structure-colors-border-color
|
|
2841
|
+
* --structure-colors/fill-secondary → --structure-colors-fill-secondary
|
|
2842
|
+
* --structure-colors/fill-quaternary → --structure-colors-fill-quaternary
|
|
2843
|
+
* --Colors/Light/primary-light-200 → --colors-light-primary-light-200 (#008fff)
|
|
2844
|
+
* --Colors/Light/primary-light-400 → --colors-light-primary-light-400 (#0071c8)
|
|
2845
|
+
* --Colors/Light/secondary-light-100 → --colors-light-secondary-light-100 (#b5eee3) - CYAN
|
|
2846
|
+
* --Colors/Light/secondary-light → --colors-light-secondary-light (#00e5ce) - CYAN
|
|
2847
|
+
* --asset-colors/text-hover → --text-hover (ou --brand-base)
|
|
2848
|
+
* --asset-colors/brand-base-50 → --brand-base-50
|
|
2849
|
+
* --asset-colors/brand-base-25 → --brand-base-25
|
|
2850
|
+
* --asset-colors/brand-hover → --brand-hover
|
|
2851
|
+
* --radius/radius-xxs → --radius-xxs
|
|
2852
|
+
* --radius/radius-round → --radius-round (100%)
|
|
2853
|
+
*
|
|
2854
|
+
* EFEITOS VISUAIS IMPORTANTES DO FIGMA:
|
|
2855
|
+
* - Estado focused checked: fill #008fff, stroke #0071c8, dot fill #b5eee3, dot stroke #00e5ce
|
|
2856
|
+
* - Estado focused unchecked: glow interno com brand-base-50
|
|
2857
|
+
* - Estados checked: sombras internas para efeito de profundidade
|
|
2858
|
+
*/
|
|
2859
|
+
|
|
2860
|
+
/* ============================================
|
|
2861
|
+
BASE - Elemento raiz do radio (label)
|
|
2862
|
+
============================================ */
|
|
2863
|
+
|
|
2864
|
+
voa-radio::part(base) {
|
|
2865
|
+
/* Sem estilos visuais aqui - apenas estrutura */
|
|
2866
|
+
display: inline-flex;
|
|
2867
|
+
align-items: center;
|
|
2868
|
+
gap: 0;
|
|
2869
|
+
}
|
|
2870
|
+
|
|
2871
|
+
/* ============================================
|
|
2872
|
+
INDICATOR - Círculo externo do radio (20px)
|
|
2873
|
+
============================================ */
|
|
2874
|
+
|
|
2875
|
+
voa-radio::part(indicator) {
|
|
2876
|
+
/* Tamanho fixo conforme Figma */
|
|
2877
|
+
width: var(--radio-indicator-size);
|
|
2878
|
+
height: var(--radio-indicator-size);
|
|
2879
|
+
min-width: var(--radio-indicator-size);
|
|
2880
|
+
min-height: var(--radio-indicator-size);
|
|
2881
|
+
|
|
2882
|
+
/* Border-radius circular */
|
|
2883
|
+
border-radius: var(--radius-round, 50%);
|
|
2884
|
+
|
|
2885
|
+
/* Border padrão - Semantic Token */
|
|
2886
|
+
border: var(--border-width-thick) solid var(--structure-colors-border-color);
|
|
2887
|
+
|
|
2888
|
+
/* Background padrão - Semantic Token */
|
|
2889
|
+
background-color: var(--structure-colors-bg-base);
|
|
2890
|
+
|
|
2891
|
+
/* Transição suave */
|
|
2892
|
+
transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
|
|
2893
|
+
}
|
|
2894
|
+
|
|
2895
|
+
/* ============================================
|
|
2896
|
+
INDICATOR - Estados Unchecked
|
|
2897
|
+
============================================ */
|
|
2898
|
+
|
|
2899
|
+
/* Default - Unchecked */
|
|
2900
|
+
voa-radio:not([checked])::part(indicator) {
|
|
2901
|
+
background-color: var(--structure-colors-bg-base);
|
|
2902
|
+
border-color: var(--structure-colors-border-color);
|
|
2903
|
+
}
|
|
2904
|
+
|
|
2905
|
+
/* Hover - Unchecked */
|
|
2906
|
+
voa-radio:not([checked]):hover::part(indicator) {
|
|
2907
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
2908
|
+
border-color: var(--structure-colors-border-color);
|
|
2909
|
+
/* Outline externo com brand-secondary-50 conforme Figma */
|
|
2910
|
+
box-shadow: 0 0 0 4px var(--brand-secondary-50, var(--colors-light-secondary-light-opacity-50, rgba(0, 229, 206, 0.5)));
|
|
2911
|
+
}
|
|
2912
|
+
|
|
2913
|
+
/* Focus - Unchecked (COR ESPECIAL: stroke CYAN conforme Figma) */
|
|
2914
|
+
voa-radio:not([checked]):focus-visible::part(indicator) {
|
|
2915
|
+
background-color: var(--structure-colors-bg-base);
|
|
2916
|
+
/* Stroke CYAN (#00e5ce) conforme Figma, não brand-base-50 */
|
|
2917
|
+
border-color: var(--colors-light-secondary-light, var(--brand-secondary, #00e5ce)); /* rgba(0, 229, 206, 1) - CYAN */
|
|
2918
|
+
/* Glow interno conforme Figma - inset shadow com CYAN (brand-secondary-50) */
|
|
2919
|
+
box-shadow: var(--shadow-focus-secondary);
|
|
2920
|
+
}
|
|
2921
|
+
|
|
2922
|
+
/* Disabled - Unchecked */
|
|
2923
|
+
voa-radio[disabled]:not([checked])::part(indicator) {
|
|
2924
|
+
background-color: var(--structure-colors-bg-base-disabled);
|
|
2925
|
+
border-color: var(--structure-colors-fill-secondary);
|
|
2926
|
+
cursor: not-allowed;
|
|
2927
|
+
}
|
|
2928
|
+
|
|
2929
|
+
/* ============================================
|
|
2930
|
+
INDICATOR - Estados Checked
|
|
2931
|
+
============================================ */
|
|
2932
|
+
|
|
2933
|
+
/* Default - Checked */
|
|
2934
|
+
voa-radio[checked]::part(indicator) {
|
|
2935
|
+
/* Usar primary-light-200 quando disponível (mais claro), fallback para brand-base */
|
|
2936
|
+
background-color: var(--colors-light-primary-light-200, var(--voa-radio-v2-checked-bg, var(--text-hover, var(--brand-base))));
|
|
2937
|
+
border-color: var(--structure-colors-fill-secondary);
|
|
2938
|
+
/* Shadow interna sutil para efeito de profundidade conforme Figma */
|
|
2939
|
+
/* Nota: O Figma usa overlay complexo - replicamos com inset shadow */
|
|
2940
|
+
box-shadow: inset 0 var(--radius-xxs, 2px) 0 0 var(--structure-colors-bg-base-disabled, rgba(255, 255, 255, 0.25));
|
|
2941
|
+
}
|
|
2942
|
+
|
|
2943
|
+
/* Hover - Checked (COR ESPECIAL: brand-base + stroke CYAN conforme Figma) */
|
|
2944
|
+
voa-radio[checked]:hover::part(indicator) {
|
|
2945
|
+
/* Hover checked usa brand-base (#0064cb) e stroke CYAN conforme Figma */
|
|
2946
|
+
background-color: var(--text-hover, var(--brand-base, #0064cb)); /* rgba(0, 100, 203, 1) */
|
|
2947
|
+
border-color: var(--colors-light-secondary-light, var(--brand-secondary, #00e5ce)); /* rgba(0, 229, 206, 1) - CYAN */
|
|
2948
|
+
/* Shadow interna mantida no hover */
|
|
2949
|
+
/* Outline externo com brand-secondary-50 conforme Figma */
|
|
2950
|
+
box-shadow: inset 0 var(--radius-xxs, 2px) 0 0 var(--structure-colors-bg-base-disabled, rgba(255, 255, 255, 0.25)),
|
|
2951
|
+
0 0 0 4px var(--brand-secondary-50, var(--colors-light-secondary-light-opacity-50, rgba(0, 229, 206, 0.5)));
|
|
2952
|
+
}
|
|
2953
|
+
|
|
2954
|
+
/* Focus - Checked (especial: usa cores diferentes conforme Figma) */
|
|
2955
|
+
voa-radio[checked]:focus-visible::part(indicator) {
|
|
2956
|
+
/* Cores específicas do estado focused checked conforme Figma */
|
|
2957
|
+
/* Fill: rgba(0, 143, 255, 1) - primary-light-200 */
|
|
2958
|
+
background-color: var(--colors-light-primary-light-200, var(--voa-radio-v2-checked-bg, #008fff)); /* Mais claro que brand-base */
|
|
2959
|
+
/* Stroke: rgba(0, 113, 200, 1) - primary-light-400 */
|
|
2960
|
+
border-color: var(--colors-light-primary-light-400, var(--voa-radio-v2-checked-border, #0071c8)); /* Stroke mais escuro */
|
|
2961
|
+
/* Shadow interna para efeito de profundidade conforme Figma */
|
|
2962
|
+
/* Nota: O Figma usa overlay com inset negativo - replicamos com inset shadow */
|
|
2963
|
+
box-shadow: inset 0 var(--radius-xxs, 2px) 0 0 var(--structure-colors-bg-base-disabled, rgba(255, 255, 255, 0.25));
|
|
2964
|
+
}
|
|
2965
|
+
|
|
2966
|
+
/* Disabled - Checked */
|
|
2967
|
+
voa-radio[disabled][checked]::part(indicator) {
|
|
2968
|
+
/* Figma mostra brand-base (#0064cb) mas com opacidade reduzida visualmente (disabled) */
|
|
2969
|
+
/* Usando brand-base-25 para representar estado disabled */
|
|
2970
|
+
background-color: var(--brand-base-25, var(--colors-light-primary-light-opacity-25, rgba(0, 100, 203, 0.25)));
|
|
2971
|
+
/* Stroke também usa brand-base-25 conforme Figma (fill e stroke iguais) */
|
|
2972
|
+
border-color: var(--brand-base-25, var(--colors-light-primary-light-opacity-25, rgba(0, 100, 203, 0.25)));
|
|
2973
|
+
cursor: not-allowed;
|
|
2974
|
+
}
|
|
2975
|
+
|
|
2976
|
+
/* ============================================
|
|
2977
|
+
DOT - Círculo interno quando selecionado (8px)
|
|
2978
|
+
============================================ */
|
|
2979
|
+
|
|
2980
|
+
voa-radio::part(dot) {
|
|
2981
|
+
/* Tamanho fixo conforme Figma */
|
|
2982
|
+
width: 8px;
|
|
2983
|
+
height: 8px;
|
|
2984
|
+
min-width: 8px;
|
|
2985
|
+
min-height: 8px;
|
|
2986
|
+
|
|
2987
|
+
/* Border-radius circular */
|
|
2988
|
+
border-radius: var(--radius-round, 50%);
|
|
2989
|
+
|
|
2990
|
+
/* Background padrão - Semantic Token */
|
|
2991
|
+
background-color: var(--structure-colors-bg-base);
|
|
2992
|
+
|
|
2993
|
+
/* Border sutil - Semantic Token */
|
|
2994
|
+
border: var(--border-width-thin) solid var(--structure-colors-fill-quaternary);
|
|
2995
|
+
|
|
2996
|
+
/* Posicionamento já definido no CSS estrutural (centralizado perfeitamente) */
|
|
2997
|
+
/* Não sobrescrever left/top aqui para manter centralização do CSS estrutural */
|
|
2998
|
+
|
|
2999
|
+
/* Transição suave para transform, opacity, background-color e border-color */
|
|
3000
|
+
transition: transform 0.2s ease, opacity 0.2s ease, background-color 0.2s ease, border-color 0.2s ease;
|
|
3001
|
+
}
|
|
3002
|
+
|
|
3003
|
+
/* Dot - Checked (visível) */
|
|
3004
|
+
voa-radio[checked]::part(dot) {
|
|
3005
|
+
background-color: var(--structure-colors-bg-base);
|
|
3006
|
+
border-color: var(--structure-colors-fill-quaternary);
|
|
3007
|
+
transform: scale(1);
|
|
3008
|
+
opacity: 1;
|
|
3009
|
+
}
|
|
3010
|
+
|
|
3011
|
+
/* Dot - Focused Checked (COR ESPECIAL: CYAN conforme Figma) */
|
|
3012
|
+
voa-radio[checked]:focus-visible::part(dot) {
|
|
3013
|
+
/* Cores CYAN especiais do estado focused conforme Figma */
|
|
3014
|
+
/* IMPORTANTE: No estado focused, o dot tem cor CYAN, não branco */
|
|
3015
|
+
background-color: var(--colors-light-secondary-light-100, #b5eee3); /* CYAN claro - rgba(181, 238, 227, 1) */
|
|
3016
|
+
border-color: var(--colors-light-secondary-light, #00e5ce); /* CYAN - rgba(0, 229, 206, 1) */
|
|
3017
|
+
}
|
|
3018
|
+
|
|
3019
|
+
/* Dot - Disabled Checked */
|
|
3020
|
+
voa-radio[disabled][checked]::part(dot) {
|
|
3021
|
+
background-color: var(--structure-colors-bg-base-disabled);
|
|
3022
|
+
border-color: var(--structure-colors-fill-quaternary);
|
|
3023
|
+
}
|
|
3024
|
+
|
|
3025
|
+
/* ============================================
|
|
3026
|
+
INPUT - Input nativo (oculto mas acessível)
|
|
3027
|
+
============================================ */
|
|
3028
|
+
|
|
3029
|
+
voa-radio::part(input) {
|
|
3030
|
+
/* Já oculto no CSS estrutural, mas garantimos acessibilidade */
|
|
3031
|
+
position: absolute;
|
|
3032
|
+
opacity: 0;
|
|
3033
|
+
width: 0;
|
|
3034
|
+
height: 0;
|
|
3035
|
+
margin: 0;
|
|
3036
|
+
padding: 0;
|
|
3037
|
+
pointer-events: none;
|
|
3038
|
+
}
|
|
3039
|
+
|
|
3040
|
+
/* ============================================
|
|
3041
|
+
ACESSIBILIDADE - Focus visível
|
|
3042
|
+
============================================ */
|
|
3043
|
+
|
|
3044
|
+
voa-radio:focus-within::part(base) {
|
|
3045
|
+
outline: none;
|
|
3046
|
+
}
|
|
3047
|
+
|
|
3048
|
+
/* Respeitar preferências de movimento reduzido */
|
|
3049
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3050
|
+
voa-radio::part(indicator),
|
|
3051
|
+
voa-radio::part(dot) {
|
|
3052
|
+
transition: none;
|
|
3053
|
+
}
|
|
3054
|
+
}
|
|
3055
|
+
|
|
3056
|
+
/* ============================================
|
|
3057
|
+
voa-select.external.css
|
|
3058
|
+
============================================ */
|
|
3059
|
+
|
|
3060
|
+
/**
|
|
3061
|
+
* External Styling for VoaSelect Component
|
|
3062
|
+
*
|
|
3063
|
+
* This file demonstrates how to style the voa-select component
|
|
3064
|
+
* using CSS Parts API and semantic design tokens.
|
|
3065
|
+
*
|
|
3066
|
+
* Based on Figma design:
|
|
3067
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=607-1011&m=dev
|
|
3068
|
+
*
|
|
3069
|
+
* Usage:
|
|
3070
|
+
* * *
|
|
3071
|
+
* DESIGN TOKEN MAPPING (Figma → CSS Variables):
|
|
3072
|
+
*
|
|
3073
|
+
* Typography (from Figma):
|
|
3074
|
+
* - Label: family-name:var(--base/family/family-sans,'Lato:SemiBold') 20px / 32px (Desktop/Body-lg/Bold)
|
|
3075
|
+
* - Input: family-name:var(--base/family/family-sans,'Lato:Regular') 16px / 24px (Desktop/Body-md/Regular)
|
|
3076
|
+
* - Info: Lato Regular 14px / 16px
|
|
3077
|
+
* - Error: Lato Regular 12px / 16px
|
|
3078
|
+
*
|
|
3079
|
+
* Colors (from Figma):
|
|
3080
|
+
* - Background: var(--structure-colors/bg-base, #ffffff)
|
|
3081
|
+
* - Border: var(--structure-colors/border-color, #adb5bd)
|
|
3082
|
+
* - Border Active: var(--asset-colors/brand-base, #0064cb)
|
|
3083
|
+
* - Text Primary: var(--asset-colors/text-primary, #0b1215)
|
|
3084
|
+
* - Text Secondary: var(--asset-colors/text-secondary, #495057)
|
|
3085
|
+
* - Text Placeholder: var(--asset-colors/text-placeholder, #9f9fa8)
|
|
3086
|
+
* - Text Disabled: rgba(11, 18, 21, 0.25)
|
|
3087
|
+
* - Background Disabled: rgba(255, 255, 255, 0.25)
|
|
3088
|
+
* - Border Disabled: rgba(24, 24, 27, 0.06)
|
|
3089
|
+
* - Focus Shadow: rgba(0, 100, 203, 0.5) - Input/active effect
|
|
3090
|
+
*
|
|
3091
|
+
* Spacing (from Figma):
|
|
3092
|
+
* - Gap header to input: 6px
|
|
3093
|
+
* - Gap label to info: var(--spacing/spacing-xs, 4px)
|
|
3094
|
+
* - Input padding: 12px
|
|
3095
|
+
* - Input gap: 8px
|
|
3096
|
+
* - Badge gap: var(--spacing/spacing-xs, 4px)
|
|
3097
|
+
*
|
|
3098
|
+
* Border Radius (from Figma):
|
|
3099
|
+
* - Input: 15.75px
|
|
3100
|
+
* - Badge: var(--radius-round, 1024px)
|
|
3101
|
+
*
|
|
3102
|
+
* Border Width (from Figma):
|
|
3103
|
+
* - Input: 1.125px
|
|
3104
|
+
* - Badge: 1px dashed
|
|
3105
|
+
*/
|
|
3106
|
+
|
|
3107
|
+
/* ============================================
|
|
3108
|
+
BASE - Container principal do select
|
|
3109
|
+
============================================ */
|
|
3110
|
+
voa-select::part(base) {
|
|
3111
|
+
/* Estrutura apenas - estilos visuais aplicados via parts específicos */
|
|
3112
|
+
box-sizing: border-box;
|
|
3113
|
+
}
|
|
3114
|
+
|
|
3115
|
+
/* ============================================
|
|
3116
|
+
HEADER - Container do label e info
|
|
3117
|
+
============================================ */
|
|
3118
|
+
voa-select::part(header) {
|
|
3119
|
+
/* Gap entre header e input - valor específico do Figma (6px) */
|
|
3120
|
+
margin-bottom: var(--structure-slim-spacing-xs);
|
|
3121
|
+
|
|
3122
|
+
/* Gap entre label e info - Figma: spacing/spacing-xs (4px) */
|
|
3123
|
+
gap: var(--structure-large-spacing-xs);
|
|
3124
|
+
|
|
3125
|
+
box-sizing: border-box;
|
|
3126
|
+
}
|
|
3127
|
+
|
|
3128
|
+
/* ============================================
|
|
3129
|
+
LABEL - Label text
|
|
3130
|
+
============================================ */
|
|
3131
|
+
voa-select::part(label) {
|
|
3132
|
+
/* Typography - Figma: Desktop/Body-lg/Bold (Lato SemiBold 20px / 32px) */
|
|
3133
|
+
font-family: var(--branding-coi-type-family-sans, 'Lato', sans-serif);
|
|
3134
|
+
font-size: 20px;
|
|
3135
|
+
font-weight: var(--typography-base-body-sm-bold-weight);
|
|
3136
|
+
line-height: 32px;
|
|
3137
|
+
font-style: normal;
|
|
3138
|
+
|
|
3139
|
+
/* Color - Figma: asset-colors/text-primary */
|
|
3140
|
+
color: var(--text-primary, #0b1215);
|
|
3141
|
+
|
|
3142
|
+
box-sizing: border-box;
|
|
3143
|
+
}
|
|
3144
|
+
|
|
3145
|
+
/* ============================================
|
|
3146
|
+
INFO - Container de informação
|
|
3147
|
+
============================================ */
|
|
3148
|
+
voa-select::part(info) {
|
|
3149
|
+
/* Gap entre texto e ícone - Figma: spacing/spacing-xs (4px) */
|
|
3150
|
+
gap: var(--structure-large-spacing-xs, 4px);
|
|
3151
|
+
|
|
3152
|
+
box-sizing: border-box;
|
|
3153
|
+
}
|
|
3154
|
+
|
|
3155
|
+
voa-select::part(info) .voa-select__info-message {
|
|
3156
|
+
/* Typography - Figma: Lato Regular 14px / 16px */
|
|
3157
|
+
font-family: var(--branding-coi-type-family-sans, 'Lato', sans-serif);
|
|
3158
|
+
font-size: var(--typography-base-body-sm-regular-size);
|
|
3159
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
3160
|
+
line-height: var(--line-height-body-sm);
|
|
3161
|
+
font-style: normal;
|
|
3162
|
+
|
|
3163
|
+
/* Color - Figma: asset-colors/text-secondary */
|
|
3164
|
+
color: var(--text-secondary, #495057);
|
|
3165
|
+
}
|
|
3166
|
+
|
|
3167
|
+
voa-select::part(info) svg {
|
|
3168
|
+
/* Icon size - Figma: 16px */
|
|
3169
|
+
width: 16px;
|
|
3170
|
+
height: 16px;
|
|
3171
|
+
|
|
3172
|
+
/* Color - Figma: asset-colors/text-secondary */
|
|
3173
|
+
color: var(--text-secondary, #495057);
|
|
3174
|
+
}
|
|
3175
|
+
|
|
3176
|
+
/* ============================================
|
|
3177
|
+
INPUT - Input container (with border)
|
|
3178
|
+
============================================ */
|
|
3179
|
+
voa-select::part(input) {
|
|
3180
|
+
/* Background - Figma: structure-colors/bg-base */
|
|
3181
|
+
background-color: var(--colors-structure-bg-base, #ffffff);
|
|
3182
|
+
|
|
3183
|
+
/* Border - Figma: 1.125px solid border-color */
|
|
3184
|
+
border: var(--border-width-medium) solid var(--colors-structure-border-color, #adb5bd);
|
|
3185
|
+
|
|
3186
|
+
/* Border-radius - Figma: 15.75px */
|
|
3187
|
+
border-radius: var(--structure-large-radius-lg);
|
|
3188
|
+
|
|
3189
|
+
/* Padding - Figma: 12px */
|
|
3190
|
+
padding: 0 var(--structure-large-spacing-rg, 12px);
|
|
3191
|
+
|
|
3192
|
+
/* CSS variable for dropdown positioning (inherited to shadow DOM via scoped: false) */
|
|
3193
|
+
--select-input-padding: 12px;
|
|
3194
|
+
|
|
3195
|
+
/* Allow input to wrap content dynamically (especially for multi-select) */
|
|
3196
|
+
min-height: 48px;
|
|
3197
|
+
height: auto;
|
|
3198
|
+
|
|
3199
|
+
/* Box-sizing */
|
|
3200
|
+
box-sizing: border-box;
|
|
3201
|
+
|
|
3202
|
+
/* Transitions for state changes */
|
|
3203
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
3204
|
+
}
|
|
3205
|
+
|
|
3206
|
+
/* ============================================
|
|
3207
|
+
INPUT WRAPPER - Container interno com flexbox
|
|
3208
|
+
============================================ */
|
|
3209
|
+
voa-select::part(input-wrapper) {
|
|
3210
|
+
/* Gap entre ícone e conteúdo - Figma: 8px */
|
|
3211
|
+
gap: var(--structure-large-spacing-sm, 8px);
|
|
3212
|
+
|
|
3213
|
+
box-sizing: border-box;
|
|
3214
|
+
}
|
|
3215
|
+
|
|
3216
|
+
/* ============================================
|
|
3217
|
+
ICON - Left icon slot
|
|
3218
|
+
============================================ */
|
|
3219
|
+
voa-select::part(icon) {
|
|
3220
|
+
/* Icon size - Figma: 24px */
|
|
3221
|
+
width: 24px;
|
|
3222
|
+
height: 24px;
|
|
3223
|
+
flex-shrink: 0;
|
|
3224
|
+
|
|
3225
|
+
/* Color - Figma: asset-colors/text-secondary */
|
|
3226
|
+
color: var(--text-secondary, #495057);
|
|
3227
|
+
|
|
3228
|
+
box-sizing: border-box;
|
|
3229
|
+
}
|
|
3230
|
+
|
|
3231
|
+
voa-select [slot="icon"],
|
|
3232
|
+
voa-select [slot="prefix"] {
|
|
3233
|
+
width: 100%;
|
|
3234
|
+
height: 100%;
|
|
3235
|
+
display: block;
|
|
3236
|
+
}
|
|
3237
|
+
|
|
3238
|
+
/* ============================================
|
|
3239
|
+
INPUT STATES
|
|
3240
|
+
============================================ */
|
|
3241
|
+
|
|
3242
|
+
/* State: Default - already applied above */
|
|
3243
|
+
|
|
3244
|
+
/* State: Selected/Filled - Item selected (blue border) */
|
|
3245
|
+
voa-select[data-state="selected"]::part(input),
|
|
3246
|
+
voa-select[data-state="filled"]::part(input) {
|
|
3247
|
+
/* Border-color - Figma: asset-colors/brand-base */
|
|
3248
|
+
border-color: var(--branding-coi-colors-light-primary-light, #0064cb);
|
|
3249
|
+
}
|
|
3250
|
+
|
|
3251
|
+
/* State: Focused - Field in focus (blue border + inner shadow) */
|
|
3252
|
+
voa-select[data-state="focused"]::part(input),
|
|
3253
|
+
voa-select::part(input):focus-within {
|
|
3254
|
+
/* Border-color - Figma: asset-colors/brand-base */
|
|
3255
|
+
border-color: var(--branding-coi-colors-light-primary-light, #0064cb);
|
|
3256
|
+
|
|
3257
|
+
/* Box-shadow - Figma: Input/active effect (inset 0px 0px 8px 2px rgba(0,100,203,0.5)) */
|
|
3258
|
+
box-shadow: inset 0px 0px 8px 2px var(--branding-coi-colors-light-primary-light-opacity-50, rgba(0, 100, 203, 0.5));
|
|
3259
|
+
}
|
|
3260
|
+
|
|
3261
|
+
/* State: Disabled - Field disabled */
|
|
3262
|
+
voa-select[disabled]::part(input),
|
|
3263
|
+
voa-select[data-state="disabled"]::part(input) {
|
|
3264
|
+
/* Background - Figma: structure-colors/bg-base-disabled */
|
|
3265
|
+
background-color: var(--colors-structure-bg-base-disabled, var(--branding-coi-colors-light-primary-light-opacity-15, rgba(255, 255, 255, 0.25)));
|
|
3266
|
+
|
|
3267
|
+
/* Border-color - Figma: structure-colors/fill-secondary */
|
|
3268
|
+
border-color: var(--colors-structure-fill-secondary, var(--colors-structure-fill-15, rgba(24, 24, 27, 0.06)));
|
|
3269
|
+
|
|
3270
|
+
cursor: not-allowed;
|
|
3271
|
+
}
|
|
3272
|
+
|
|
3273
|
+
/* State: Error - Field with error */
|
|
3274
|
+
voa-select[error]::part(input) {
|
|
3275
|
+
/* Border-color - Use danger color or keep brand-base per Figma */
|
|
3276
|
+
border-color: var(--colors-semantic-danger, var(--branding-coi-colors-light-primary-light, #0064cb));
|
|
3277
|
+
}
|
|
3278
|
+
|
|
3279
|
+
/* ============================================
|
|
3280
|
+
SUBCOMPONENT STYLES - voa-select-base
|
|
3281
|
+
============================================ */
|
|
3282
|
+
|
|
3283
|
+
/* Control button - the clickable trigger */
|
|
3284
|
+
voa-select-base::part(control) {
|
|
3285
|
+
/* Make it fill the container */
|
|
3286
|
+
width: 100%;
|
|
3287
|
+
display: flex;
|
|
3288
|
+
align-items: center;
|
|
3289
|
+
justify-content: space-between;
|
|
3290
|
+
|
|
3291
|
+
/* Remove button styling */
|
|
3292
|
+
background: transparent;
|
|
3293
|
+
border: none;
|
|
3294
|
+
padding: 0;
|
|
3295
|
+
cursor: pointer;
|
|
3296
|
+
|
|
3297
|
+
/* Typography inherited from parent */
|
|
3298
|
+
font-family: inherit;
|
|
3299
|
+
font-size: inherit;
|
|
3300
|
+
color: inherit;
|
|
3301
|
+
text-align: left;
|
|
3302
|
+
|
|
3303
|
+
box-sizing: border-box;
|
|
3304
|
+
}
|
|
3305
|
+
|
|
3306
|
+
/* Placeholder and text inside select-base */
|
|
3307
|
+
voa-select-base::part(value) {
|
|
3308
|
+
/* Typography - Figma: Desktop/Body-md/Regular (Lato Regular 16px / 24px) */
|
|
3309
|
+
font-family: var(--branding-coi-type-family-sans, 'Lato', sans-serif);
|
|
3310
|
+
font-size: var(--typography-base-type-scale-6);
|
|
3311
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
3312
|
+
line-height: var(--line-height-body-md);
|
|
3313
|
+
font-style: normal;
|
|
3314
|
+
|
|
3315
|
+
/* Color - Figma: asset-colors/text-placeholder */
|
|
3316
|
+
color: var(--text-placeholder, #9f9fa8);
|
|
3317
|
+
|
|
3318
|
+
/* Text alignment */
|
|
3319
|
+
text-align: left;
|
|
3320
|
+
|
|
3321
|
+
box-sizing: border-box;
|
|
3322
|
+
}
|
|
3323
|
+
|
|
3324
|
+
/* When value is selected (filled) */
|
|
3325
|
+
voa-select-base[value]::part(value) {
|
|
3326
|
+
/* Color - Figma: asset-colors/text-primary */
|
|
3327
|
+
color: var(--text-primary, #0b1215);
|
|
3328
|
+
}
|
|
3329
|
+
|
|
3330
|
+
/* Disabled state for label */
|
|
3331
|
+
voa-select[disabled]::part(label),
|
|
3332
|
+
voa-select[data-state="disabled"]::part(label) {
|
|
3333
|
+
/* Color - Figma: text-disabled with opacity */
|
|
3334
|
+
color: var(--text-disabled-with-opacity, rgba(11, 18, 21, 0.25));
|
|
3335
|
+
}
|
|
3336
|
+
|
|
3337
|
+
/* Disabled state for placeholder and content */
|
|
3338
|
+
voa-select[disabled] voa-select-base::part(value),
|
|
3339
|
+
voa-select[data-state="disabled"] voa-select-base::part(value) {
|
|
3340
|
+
/* Color - Figma: text-disabled with opacity */
|
|
3341
|
+
color: var(--text-disabled-with-opacity, rgba(11, 18, 21, 0.25));
|
|
3342
|
+
}
|
|
3343
|
+
|
|
3344
|
+
/* ============================================
|
|
3345
|
+
ERROR MESSAGE - Error message
|
|
3346
|
+
============================================ */
|
|
3347
|
+
voa-select::part(error-message) {
|
|
3348
|
+
/* Typography - Figma: Lato Regular 12px / 16px */
|
|
3349
|
+
font-family: var(--branding-coi-type-family-sans, 'Lato', sans-serif);
|
|
3350
|
+
font-size: var(--typography-base-type-scale-8);
|
|
3351
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
3352
|
+
line-height: var(--line-height-body-sm);
|
|
3353
|
+
font-style: normal;
|
|
3354
|
+
|
|
3355
|
+
/* Color - Figma: asset-colors/text-secondary */
|
|
3356
|
+
color: var(--text-secondary, #495057);
|
|
3357
|
+
|
|
3358
|
+
/* Margin-top - Figma: 6px gap after input */
|
|
3359
|
+
margin-top: 6px;
|
|
3360
|
+
|
|
3361
|
+
box-sizing: border-box;
|
|
3362
|
+
}
|
|
3363
|
+
|
|
3364
|
+
/* ============================================
|
|
3365
|
+
MULTI-SELECT STYLES
|
|
3366
|
+
============================================ */
|
|
3367
|
+
|
|
3368
|
+
/* Remove vertical padding from input when multi-select */
|
|
3369
|
+
voa-select[type="multi"]::part(input) {
|
|
3370
|
+
/* Remove vertical padding (top and bottom), keep only horizontal - Figma: 12px */
|
|
3371
|
+
padding-top: 0;
|
|
3372
|
+
padding-bottom: 0;
|
|
3373
|
+
padding-left: var(--structure-large-spacing-rg, 12px);
|
|
3374
|
+
padding-right: var(--structure-large-spacing-rg, 12px);
|
|
3375
|
+
}
|
|
3376
|
+
|
|
3377
|
+
/* Multi-select container inside input */
|
|
3378
|
+
voa-select .voa-select__content voa-container-multi-select::part(base) {
|
|
3379
|
+
/* Layout adjustments if needed */
|
|
3380
|
+
box-sizing: border-box;
|
|
3381
|
+
}
|
|
3382
|
+
|
|
3383
|
+
/* ============================================
|
|
3384
|
+
BADGES INSIDE MULTI-SELECT - voa-badge styling
|
|
3385
|
+
============================================ */
|
|
3386
|
+
/*
|
|
3387
|
+
* IMPORTANT: Since badges are inside the Shadow DOM of voa-container-multi-select,
|
|
3388
|
+
* and voa-container-multi-select is inside the Shadow DOM of voa-select,
|
|
3389
|
+
* we need to apply badge styles here as well (external CSS).
|
|
3390
|
+
*
|
|
3391
|
+
* Base badge styles are applied in voa-container-multi-select.css (inside Shadow DOM),
|
|
3392
|
+
* but we apply them here too to ensure they work even when the container CSS
|
|
3393
|
+
* cannot fully penetrate the badge's Shadow DOM.
|
|
3394
|
+
*/
|
|
3395
|
+
|
|
3396
|
+
/* Badge base inside multi-select */
|
|
3397
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper voa-badge::part(base) {
|
|
3398
|
+
/* Background - Figma: brand-base with 15% opacity */
|
|
3399
|
+
background-color: var(--branding-coi-colors-light-primary-light-opacity-15, rgba(0, 100, 203, 0.15)) !important;
|
|
3400
|
+
|
|
3401
|
+
/* Border - Figma: 1px dashed brand-base */
|
|
3402
|
+
border: var(--border-width-thin) dashed var(--branding-coi-colors-light-primary-light, #0064cb) !important;
|
|
3403
|
+
|
|
3404
|
+
/* Border-radius - Figma: pill shape (1024px from tokens) */
|
|
3405
|
+
border-radius: var(--structure-large-radius-round) !important;
|
|
3406
|
+
|
|
3407
|
+
/* Padding - Figma: 2px vertical, 4px horizontal */
|
|
3408
|
+
padding-block: var(--structure-large-spacing-xxs) !important;
|
|
3409
|
+
padding-inline: var(--structure-large-spacing-xs) !important;
|
|
3410
|
+
|
|
3411
|
+
/* Typography - Figma: Lato Regular 16px / 24px */
|
|
3412
|
+
font-family: var(--branding-coi-type-family-sans, 'Lato', sans-serif) !important;
|
|
3413
|
+
font-size: var(--typography-base-type-scale-6) !important;
|
|
3414
|
+
font-weight: var(--typography-base-body-sm-regular-weight) !important;
|
|
3415
|
+
line-height: var(--line-height-body-md) !important;
|
|
3416
|
+
font-style: normal !important;
|
|
3417
|
+
|
|
3418
|
+
/* Text color - Figma: brand-base */
|
|
3419
|
+
color: var(--branding-coi-colors-light-primary-light, #0064cb) !important;
|
|
3420
|
+
|
|
3421
|
+
/* Display and layout */
|
|
3422
|
+
display: inline-flex !important;
|
|
3423
|
+
align-items: center !important;
|
|
3424
|
+
gap: var(--structure-large-spacing-xxs, 2px) !important;
|
|
3425
|
+
|
|
3426
|
+
/* Transitions */
|
|
3427
|
+
transition: background-color 0.2s ease, border-color 0.2s ease !important;
|
|
3428
|
+
}
|
|
3429
|
+
|
|
3430
|
+
/* Badge hover state */
|
|
3431
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper:hover voa-badge::part(base) {
|
|
3432
|
+
background-color: var(--branding-coi-colors-light-primary-light-opacity-25, rgba(0, 100, 203, 0.25)) !important;
|
|
3433
|
+
border-color: var(--branding-coi-colors-light-primary-light-400, #0071c8) !important;
|
|
3434
|
+
}
|
|
3435
|
+
|
|
3436
|
+
/* Badge label */
|
|
3437
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper voa-badge::part(label) {
|
|
3438
|
+
color: var(--branding-coi-colors-light-primary-light, #0064cb) !important;
|
|
3439
|
+
white-space: nowrap;
|
|
3440
|
+
}
|
|
3441
|
+
|
|
3442
|
+
/* Leading icon - hide */
|
|
3443
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper voa-badge::part(icon-leading) {
|
|
3444
|
+
display: none !important;
|
|
3445
|
+
}
|
|
3446
|
+
|
|
3447
|
+
/* Trailing icon (close) of badge */
|
|
3448
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper voa-badge::part(icon-trailing) {
|
|
3449
|
+
display: inline-flex !important;
|
|
3450
|
+
align-items: center !important;
|
|
3451
|
+
justify-content: center !important;
|
|
3452
|
+
cursor: pointer !important;
|
|
3453
|
+
color: var(--branding-coi-colors-light-primary-light, #0064cb) !important;
|
|
3454
|
+
flex-shrink: 0;
|
|
3455
|
+
margin-left: var(--structure-large-spacing-xxs, 2px);
|
|
3456
|
+
}
|
|
3457
|
+
|
|
3458
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper voa-badge::part(icon-trailing) svg {
|
|
3459
|
+
width: 12px !important;
|
|
3460
|
+
height: 12px !important;
|
|
3461
|
+
display: block !important;
|
|
3462
|
+
flex-shrink: 0;
|
|
3463
|
+
}
|
|
3464
|
+
|
|
3465
|
+
/* Close icon hover */
|
|
3466
|
+
voa-select voa-container-multi-select .voa-container-multi-select__badge-wrapper:hover voa-badge::part(icon-trailing) {
|
|
3467
|
+
opacity: 0.8;
|
|
3468
|
+
}
|
|
3469
|
+
|
|
3470
|
+
/* Disabled state */
|
|
3471
|
+
voa-select[disabled] voa-container-multi-select .voa-container-multi-select__badge-wrapper voa-badge::part(base) {
|
|
3472
|
+
opacity: 0.5 !important;
|
|
3473
|
+
cursor: not-allowed !important;
|
|
3474
|
+
pointer-events: none !important;
|
|
3475
|
+
}
|
|
3476
|
+
|
|
3477
|
+
/* ============================================
|
|
3478
|
+
DROPDOWN - Options menu
|
|
3479
|
+
============================================ */
|
|
3480
|
+
|
|
3481
|
+
/* Animation for dropdown entrance and exit */
|
|
3482
|
+
@keyframes dropdownEnter {
|
|
3483
|
+
from {
|
|
3484
|
+
opacity: 0;
|
|
3485
|
+
transform: translateY(-8px);
|
|
3486
|
+
}
|
|
3487
|
+
to {
|
|
3488
|
+
opacity: 1;
|
|
3489
|
+
transform: translateY(0);
|
|
3490
|
+
}
|
|
3491
|
+
}
|
|
3492
|
+
|
|
3493
|
+
@keyframes dropdownExit {
|
|
3494
|
+
from {
|
|
3495
|
+
opacity: 1;
|
|
3496
|
+
transform: translateY(0);
|
|
3497
|
+
}
|
|
3498
|
+
to {
|
|
3499
|
+
opacity: 0;
|
|
3500
|
+
transform: translateY(-8px);
|
|
3501
|
+
}
|
|
3502
|
+
}
|
|
3503
|
+
|
|
3504
|
+
/* Dropdown inside voa-select-base - visual styles only */
|
|
3505
|
+
/* Structural positioning is in voa-select-base.css */
|
|
3506
|
+
/* Listbox container (role="listbox") */
|
|
3507
|
+
voa-select-base::part(dropdown) {
|
|
3508
|
+
/* Visual styles - Figma specs */
|
|
3509
|
+
background-color: var(--colors-structure-bg-base, #ffffff);
|
|
3510
|
+
|
|
3511
|
+
/* Outline - 1.125px border using design token */
|
|
3512
|
+
border: var(--border-width-medium) solid var(--colors-structure-border-color, #adb5bd);
|
|
3513
|
+
border-radius: 15.75px;
|
|
3514
|
+
|
|
3515
|
+
/* Shadow for elevation - Figma: drop shadow effect with enhanced depth */
|
|
3516
|
+
box-shadow: var(--voa-shadow-option, 0px 8px 16px rgba(0, 0, 0, 0.15)),
|
|
3517
|
+
0px 0px 0px 0.5px var(--colors-structure-border-color, #adb5bd),
|
|
3518
|
+
inset 0px 0px 0px 1px var(--colors-structure-border-color, #adb5bd);
|
|
3519
|
+
|
|
3520
|
+
/* Padding inside dropdown - vertical only */
|
|
3521
|
+
padding: var(--structure-large-spacing-sm, 8px) 0;
|
|
3522
|
+
|
|
3523
|
+
/* Animation - entrance effect */
|
|
3524
|
+
animation: dropdownEnter 0.2s ease-out forwards;
|
|
3525
|
+
opacity: 1;
|
|
3526
|
+
transform: translateY(0);
|
|
3527
|
+
|
|
3528
|
+
/* Box-sizing */
|
|
3529
|
+
box-sizing: border-box;
|
|
3530
|
+
|
|
3531
|
+
/* Ensure proper stacking context */
|
|
3532
|
+
position: relative;
|
|
3533
|
+
z-index: 1000;
|
|
3534
|
+
}
|
|
3535
|
+
|
|
3536
|
+
/* Exit animation state - when dropdown is hidden */
|
|
3537
|
+
voa-select-base::part(dropdown).voa-select__dropdown--hidden {
|
|
3538
|
+
animation: dropdownExit 0.15s ease-in forwards;
|
|
3539
|
+
visibility: hidden;
|
|
3540
|
+
pointer-events: none;
|
|
3541
|
+
}
|
|
3542
|
+
|
|
3543
|
+
/* ============================================
|
|
3544
|
+
DROPDOWN OPTION - Individual option
|
|
3545
|
+
============================================ */
|
|
3546
|
+
|
|
3547
|
+
voa-select-base::part(option) {
|
|
3548
|
+
/* Padding for options - Figma: 8px vertical, 12px horizontal */
|
|
3549
|
+
padding: 8px 12px;
|
|
3550
|
+
|
|
3551
|
+
/* Typography - Figma: Lato Regular 16px / 24px */
|
|
3552
|
+
font-family: var(--branding-coi-type-family-sans, 'Lato', sans-serif);
|
|
3553
|
+
font-size: 16px;
|
|
3554
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
3555
|
+
line-height: 24px;
|
|
3556
|
+
font-style: normal;
|
|
3557
|
+
|
|
3558
|
+
/* Color - Figma: text-primary */
|
|
3559
|
+
color: var(--text-primary, #0b1215);
|
|
3560
|
+
|
|
3561
|
+
/* Box-sizing */
|
|
3562
|
+
box-sizing: border-box;
|
|
3563
|
+
|
|
3564
|
+
/* Smooth transitions for all state changes */
|
|
3565
|
+
transition: background-color 0.2s ease, color 0.2s ease;
|
|
3566
|
+
}
|
|
3567
|
+
|
|
3568
|
+
/* Hover state for options */
|
|
3569
|
+
voa-select-base::part(option):hover {
|
|
3570
|
+
background-color: var(--colors-structure-bg-container, #f1f3f5);
|
|
3571
|
+
cursor: pointer;
|
|
3572
|
+
}
|
|
3573
|
+
|
|
3574
|
+
/* Active state for options (keyboard navigation highlight) */
|
|
3575
|
+
voa-select-base .voa-select__option--active {
|
|
3576
|
+
background-color: var(--colors-structure-bg-container, #f1f3f5);
|
|
3577
|
+
}
|
|
3578
|
+
|
|
3579
|
+
/* Selected state for options */
|
|
3580
|
+
voa-select-base .voa-select__option--selected {
|
|
3581
|
+
background-color: var(--branding-coi-colors-light-primary-light-opacity-15, rgba(0, 100, 203, 0.15));
|
|
3582
|
+
color: var(--branding-coi-colors-light-primary-light, #0064cb);
|
|
3583
|
+
}
|
|
3584
|
+
|
|
3585
|
+
/* Disabled state for options */
|
|
3586
|
+
voa-select-base .voa-select__option--disabled {
|
|
3587
|
+
opacity: 0.5;
|
|
3588
|
+
cursor: not-allowed;
|
|
3589
|
+
pointer-events: none;
|
|
3590
|
+
}
|
|
3591
|
+
|
|
3592
|
+
/* ============================================
|
|
3593
|
+
DROPDOWN INDICATOR - Dropdown icon
|
|
3594
|
+
============================================ */
|
|
3595
|
+
|
|
3596
|
+
/* Dropdown icon is inside voa-select-base */
|
|
3597
|
+
voa-select-base::part(indicator) {
|
|
3598
|
+
/* Icon size - Figma: 24px */
|
|
3599
|
+
width: 24px;
|
|
3600
|
+
height: 24px;
|
|
3601
|
+
flex-shrink: 0;
|
|
3602
|
+
|
|
3603
|
+
/* Color - Figma: text-primary */
|
|
3604
|
+
color: var(--text-primary, #0b1215);
|
|
3605
|
+
|
|
3606
|
+
/* Ensure proper display */
|
|
3607
|
+
display: flex;
|
|
3608
|
+
align-items: center;
|
|
3609
|
+
justify-content: center;
|
|
3610
|
+
|
|
3611
|
+
box-sizing: border-box;
|
|
3612
|
+
}
|
|
3613
|
+
|
|
3614
|
+
voa-select-base::part(indicator) svg {
|
|
3615
|
+
width: 100%;
|
|
3616
|
+
height: 100%;
|
|
3617
|
+
display: block;
|
|
3618
|
+
}
|
|
3619
|
+
|
|
3620
|
+
/* Disabled state for dropdown indicator */
|
|
3621
|
+
voa-select[disabled] voa-select-base::part(indicator),
|
|
3622
|
+
voa-select[data-state="disabled"] voa-select-base::part(indicator) {
|
|
3623
|
+
/* Color - Figma: text-disabled with opacity */
|
|
3624
|
+
color: var(--text-disabled-with-opacity, rgba(11, 18, 21, 0.25));
|
|
3625
|
+
}
|
|
3626
|
+
|
|
3627
|
+
/* ============================================
|
|
3628
|
+
voa-switch.external.css
|
|
3629
|
+
============================================ */
|
|
3630
|
+
|
|
3631
|
+
/**
|
|
3632
|
+
* Estilização Externa do VoaSwitch
|
|
3633
|
+
*
|
|
3634
|
+
* Este arquivo demonstra como estilizar o componente voa-switch
|
|
3635
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
3636
|
+
*
|
|
3637
|
+
* Baseado no design do Figma:
|
|
3638
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=443-10259
|
|
3639
|
+
*
|
|
3640
|
+
* Para usar, importe este arquivo após os tokens:
|
|
3641
|
+
* * *
|
|
3642
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
3643
|
+
*
|
|
3644
|
+
* Figma Token → Style Dictionary Token
|
|
3645
|
+
* --------------------------------------------
|
|
3646
|
+
* --asset-colors/brand-base → --brand-base (#0064cb)
|
|
3647
|
+
* --asset-colors/brand-secondary → --brand-secondary (#00e5ce)
|
|
3648
|
+
* --asset-colors/brand-secondary-50 → --brand-secondary-50 (rgba(0,229,206,0.5)) - Estado OFF default
|
|
3649
|
+
* --asset-colors/brand-secondary-15 → --brand-secondary-15 (rgba(0,229,206,0.15)) - Estado disabled
|
|
3650
|
+
* --structure-colors/fill-secondary → --structure-colors-fill-secondary (rgba(24,24,27,0.06))
|
|
3651
|
+
* --structure-colors/fill-15 → --structure-colors-fill-15 (rgba(24,24,27,0.15))
|
|
3652
|
+
* --structure-colors/fill-terciary → --structure-colors-fill-terciary (rgba(24,24,27,0.04))
|
|
3653
|
+
* --structure-colors/fill-quaternary → --structure-colors-fill-quaternary (rgba(24,24,27,0.02))
|
|
3654
|
+
* --radius/radius-round → --radius-round (1024px)
|
|
3655
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
3656
|
+
* --base/family/family-sans → --font-family-sans ('Lato')
|
|
3657
|
+
* --asset-colors/text-primary → --text-primary (#0b1215)
|
|
3658
|
+
*/
|
|
3659
|
+
|
|
3660
|
+
/* ============================================
|
|
3661
|
+
BASE - Container do switch
|
|
3662
|
+
============================================ */
|
|
3663
|
+
|
|
3664
|
+
voa-switch::part(base) {
|
|
3665
|
+
/* Gap estrutural - Token semântico conforme Figma */
|
|
3666
|
+
gap: var(--structure-large-spacing-sm);
|
|
3667
|
+
}
|
|
3668
|
+
|
|
3669
|
+
/* Sem label, sem gap */
|
|
3670
|
+
voa-switch[show-label="false"]::part(base) {
|
|
3671
|
+
gap: 0;
|
|
3672
|
+
}
|
|
3673
|
+
|
|
3674
|
+
/* ============================================
|
|
3675
|
+
TRACK - Container do switch (40px x 20px)
|
|
3676
|
+
============================================ */
|
|
3677
|
+
|
|
3678
|
+
voa-switch::part(track) {
|
|
3679
|
+
/* Border radius conforme Figma */
|
|
3680
|
+
border-radius: var(--structure-large-radius-round);
|
|
3681
|
+
/* 1024px - completamente arredondado */
|
|
3682
|
+
border: var(--border-width-thin) solid var(--colors-structure-fill-secondary);
|
|
3683
|
+
/* rgba(24,24,27,0.06) */
|
|
3684
|
+
box-sizing: border-box;
|
|
3685
|
+
/* Transições suaves para mudanças de cor */
|
|
3686
|
+
transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
|
|
3687
|
+
border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
3688
|
+
}
|
|
3689
|
+
|
|
3690
|
+
/* ============================================
|
|
3691
|
+
THUMB - Elemento circular que se move (16px)
|
|
3692
|
+
============================================ */
|
|
3693
|
+
|
|
3694
|
+
voa-switch::part(thumb) {
|
|
3695
|
+
/* Border radius conforme Figma */
|
|
3696
|
+
border-radius: var(--structure-large-radius-round);
|
|
3697
|
+
/* 1024px - completamente arredondado */
|
|
3698
|
+
border: var(--border-width-thin) solid;
|
|
3699
|
+
box-sizing: border-box;
|
|
3700
|
+
|
|
3701
|
+
/* Variáveis locais para cálculo de posicionamento robusto */
|
|
3702
|
+
--thumb-size: var(--switch-thumb-size);
|
|
3703
|
+
--track-padding: 2px;
|
|
3704
|
+
--thumb-offset: calc(var(--thumb-size) + var(--track-padding));
|
|
3705
|
+
|
|
3706
|
+
/*
|
|
3707
|
+
* ANIMATION FIX:
|
|
3708
|
+
* Usamos margin-left para animar porque precisamos de referência à largura do PAI (track).
|
|
3709
|
+
* Transform usa % relativo ao próprio elemento, o que não funciona para largura de track variável.
|
|
3710
|
+
* Margin-left com % é relativo à largura do container.
|
|
3711
|
+
*/
|
|
3712
|
+
margin-left: 0;
|
|
3713
|
+
transition: margin-left 0.2s cubic-bezier(0.4, 0, 0.2, 1),
|
|
3714
|
+
background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1),
|
|
3715
|
+
border-color 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
3716
|
+
}
|
|
3717
|
+
|
|
3718
|
+
/* Quando checked, move o thumb para a direita */
|
|
3719
|
+
voa-switch[checked]::part(thumb) {
|
|
3720
|
+
/*
|
|
3721
|
+
* CÁLCULO ROBUSTO:
|
|
3722
|
+
* 100% = Largura total do track (variável)
|
|
3723
|
+
* - 16px (thumb)
|
|
3724
|
+
* - 2px (padding direito)
|
|
3725
|
+
* = Posição final correta independente da largura do track
|
|
3726
|
+
*/
|
|
3727
|
+
margin-left: calc(100% - var(--thumb-offset));
|
|
3728
|
+
}
|
|
3729
|
+
|
|
3730
|
+
/* ============================================
|
|
3731
|
+
SHADOW - Sombra interna
|
|
3732
|
+
============================================ */
|
|
3733
|
+
|
|
3734
|
+
voa-switch::part(shadow) {
|
|
3735
|
+
/* Shadow interna conforme Figma: inset 0px 2px 4px 0px rgba(24, 24, 24, 0.25) */
|
|
3736
|
+
box-shadow: var(--shadow-switch-inset);
|
|
3737
|
+
border-radius: inherit;
|
|
3738
|
+
}
|
|
3739
|
+
|
|
3740
|
+
/* ============================================
|
|
3741
|
+
ESTADOS - OFF (default)
|
|
3742
|
+
============================================ */
|
|
3743
|
+
|
|
3744
|
+
/* Default - Off */
|
|
3745
|
+
voa-switch:not([checked]):not([disabled])::part(track) {
|
|
3746
|
+
background-color: var(--colors-structure-fill-quaternary);
|
|
3747
|
+
/* rgba(24,24,27,0.02) */
|
|
3748
|
+
border-color: var(--colors-structure-fill-secondary);
|
|
3749
|
+
/* rgba(24,24,27,0.06) */
|
|
3750
|
+
}
|
|
3751
|
+
|
|
3752
|
+
voa-switch:not([checked]):not([disabled])::part(thumb) {
|
|
3753
|
+
background-color: var(--brand-secondary-50);
|
|
3754
|
+
/* rgba(0,229,206,0.5) - Atualizado do Figma para melhor contraste */
|
|
3755
|
+
border-color: var(--colors-structure-fill-terciary);
|
|
3756
|
+
/* rgba(24,24,27,0.04) */
|
|
3757
|
+
}
|
|
3758
|
+
|
|
3759
|
+
/* ============================================
|
|
3760
|
+
ESTADOS - ON (checked)
|
|
3761
|
+
============================================ */
|
|
3762
|
+
|
|
3763
|
+
/* Default - On */
|
|
3764
|
+
voa-switch[checked]:not([disabled])::part(track) {
|
|
3765
|
+
background-color: var(--brand-base);
|
|
3766
|
+
/* #0064cb */
|
|
3767
|
+
border-color: var(--colors-structure-fill-secondary);
|
|
3768
|
+
/* rgba(24,24,27,0.06) */
|
|
3769
|
+
}
|
|
3770
|
+
|
|
3771
|
+
voa-switch[checked]:not([disabled])::part(thumb) {
|
|
3772
|
+
background-color: var(--brand-secondary);
|
|
3773
|
+
/* #00e5ce */
|
|
3774
|
+
border-color: var(--colors-structure-fill-15);
|
|
3775
|
+
/* rgba(24,24,27,0.15) */
|
|
3776
|
+
}
|
|
3777
|
+
|
|
3778
|
+
/* ============================================
|
|
3779
|
+
ESTADO - DISABLED
|
|
3780
|
+
============================================ */
|
|
3781
|
+
|
|
3782
|
+
/* Disabled - Off */
|
|
3783
|
+
voa-switch:not([checked])[disabled]::part(track) {
|
|
3784
|
+
background-color: var(--colors-structure-fill-quaternary);
|
|
3785
|
+
/* rgba(24,24,27,0.02) */
|
|
3786
|
+
border-color: var(--colors-structure-fill-secondary);
|
|
3787
|
+
/* rgba(24,24,27,0.06) */
|
|
3788
|
+
opacity: 0.5;
|
|
3789
|
+
}
|
|
3790
|
+
|
|
3791
|
+
voa-switch:not([checked])[disabled]::part(thumb) {
|
|
3792
|
+
background-color: var(--brand-secondary-15);
|
|
3793
|
+
/* rgba(0,229,206,0.15) */
|
|
3794
|
+
border-color: var(--colors-structure-fill-terciary);
|
|
3795
|
+
/* rgba(24,24,27,0.04) */
|
|
3796
|
+
opacity: 0.5;
|
|
3797
|
+
}
|
|
3798
|
+
|
|
3799
|
+
/* Disabled - On */
|
|
3800
|
+
voa-switch[checked][disabled]::part(track) {
|
|
3801
|
+
background-color: var(--brand-base);
|
|
3802
|
+
/* #0064cb */
|
|
3803
|
+
border-color: var(--colors-structure-fill-secondary);
|
|
3804
|
+
/* rgba(24,24,27,0.06) */
|
|
3805
|
+
opacity: 0.5;
|
|
3806
|
+
}
|
|
3807
|
+
|
|
3808
|
+
voa-switch[checked][disabled]::part(thumb) {
|
|
3809
|
+
background-color: var(--brand-secondary);
|
|
3810
|
+
/* #00e5ce */
|
|
3811
|
+
border-color: var(--colors-structure-fill-15);
|
|
3812
|
+
/* rgba(24,24,27,0.15) */
|
|
3813
|
+
opacity: 0.5;
|
|
3814
|
+
}
|
|
3815
|
+
|
|
3816
|
+
/* ============================================
|
|
3817
|
+
LABEL - Texto do label
|
|
3818
|
+
============================================ */
|
|
3819
|
+
|
|
3820
|
+
voa-switch::part(label) {
|
|
3821
|
+
color: var(--text-primary);
|
|
3822
|
+
/* #0b1215 */
|
|
3823
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
3824
|
+
font-size: var(--typography-base-type-scale-6);
|
|
3825
|
+
line-height: var(--line-height-body-md);
|
|
3826
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
3827
|
+
user-select: none;
|
|
3828
|
+
}
|
|
3829
|
+
|
|
3830
|
+
voa-switch[disabled]::part(label) {
|
|
3831
|
+
color: var(--text-disabled);
|
|
3832
|
+
/* rgba(11,18,21,0.25) */
|
|
3833
|
+
}
|
|
3834
|
+
|
|
3835
|
+
/* ============================================
|
|
3836
|
+
FOCUS VISIBLE - Outline para acessibilidade
|
|
3837
|
+
============================================ */
|
|
3838
|
+
|
|
3839
|
+
voa-switch:focus-visible::part(base) {
|
|
3840
|
+
outline: var(--border-width-medium) solid var(--brand-base);
|
|
3841
|
+
outline-offset: var(--structure-large-spacing-xs);
|
|
3842
|
+
border-radius: var(--structure-large-radius-xs);
|
|
3843
|
+
}
|
|
3844
|
+
|
|
3845
|
+
/* ============================================
|
|
3846
|
+
voa-tab.external.css
|
|
3847
|
+
============================================ */
|
|
3848
|
+
|
|
3849
|
+
/**
|
|
3850
|
+
* Estilização Externa do VoaTab e VoaTabItem
|
|
3851
|
+
*
|
|
3852
|
+
* Este arquivo demonstra como estilizar os componentes voa-tab e voa-tab-item
|
|
3853
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
3854
|
+
*
|
|
3855
|
+
* Baseado no design do Figma:
|
|
3856
|
+
* - Tab: https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=545-553
|
|
3857
|
+
* - Tab Item: https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=366-1545
|
|
3858
|
+
*
|
|
3859
|
+
* Para usar, importe este arquivo após os tokens:
|
|
3860
|
+
* * *
|
|
3861
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA CSS VARIABLES (global.css):
|
|
3862
|
+
*
|
|
3863
|
+
* Figma Token → CSS Variable (from global.css)
|
|
3864
|
+
* -------------------------------------------------------
|
|
3865
|
+
* --asset-colors/brand-base → --brand-base
|
|
3866
|
+
* --asset-colors/text-primary → --text-primary
|
|
3867
|
+
* --asset-colors/text-disabled → --text-disabled (rendered as rgba, ~0.25 opacity)
|
|
3868
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
3869
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
3870
|
+
* --spacing/spacing-rg → --spacing-spacing-rg (12px)
|
|
3871
|
+
* --spacing/spacing-md → --spacing-spacing-md (16px)
|
|
3872
|
+
* --spacing/spacing-lg → --spacing-spacing-lg (24px)
|
|
3873
|
+
* --spacing/spacing-xxs → --spacing-spacing-xxs (2px)
|
|
3874
|
+
* --radius/radius-md → --radius-md (12px)
|
|
3875
|
+
* --radius/radius-xl → --radius-xl (24px)
|
|
3876
|
+
* --radius/radius-round → --radius-round (1024px)
|
|
3877
|
+
* --base/family/family-sans → --font-family-sans
|
|
3878
|
+
* --semantic-colors/danger → --semantic-colors-danger
|
|
3879
|
+
* --structure-colors/fill-secondary → --structure-colors-fill-secondary
|
|
3880
|
+
* --structure-colors/bg-base → --structure-colors-bg-base
|
|
3881
|
+
*/
|
|
3882
|
+
|
|
3883
|
+
/* ============================================
|
|
3884
|
+
VOA-TAB - Container de tabs
|
|
3885
|
+
============================================ */
|
|
3886
|
+
|
|
3887
|
+
voa-tab::part(base) {
|
|
3888
|
+
/* Border-bottom para separador entre grupos de tabs */
|
|
3889
|
+
border-bottom: var(--border-width-thin) solid var(--text-disabled);
|
|
3890
|
+
box-sizing: border-box;
|
|
3891
|
+
}
|
|
3892
|
+
|
|
3893
|
+
voa-tab::part(list) {
|
|
3894
|
+
/* Gap entre itens conforme direção */
|
|
3895
|
+
box-sizing: border-box;
|
|
3896
|
+
}
|
|
3897
|
+
|
|
3898
|
+
/* Gap horizontal (padrão) */
|
|
3899
|
+
voa-tab[direction="horizontal"]::part(list) {
|
|
3900
|
+
gap: var(--structure-large-spacing-lg);
|
|
3901
|
+
}
|
|
3902
|
+
|
|
3903
|
+
/* Gap vertical */
|
|
3904
|
+
voa-tab[direction="vertical"]::part(list) {
|
|
3905
|
+
gap: var(--structure-large-spacing-md);
|
|
3906
|
+
}
|
|
3907
|
+
|
|
3908
|
+
/* ============================================
|
|
3909
|
+
VOA-TAB-ITEM - Item individual de tab
|
|
3910
|
+
============================================ */
|
|
3911
|
+
|
|
3912
|
+
/* Base - Tipografia e estrutura */
|
|
3913
|
+
voa-tab-item::part(base) {
|
|
3914
|
+
/* Tipografia - Desktop/Body-sm/Regular */
|
|
3915
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
3916
|
+
font-size: var(--typography-base-body-sm-regular-size);
|
|
3917
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
3918
|
+
line-height: var(--line-height-body-sm);
|
|
3919
|
+
|
|
3920
|
+
/* Box-sizing */
|
|
3921
|
+
box-sizing: border-box;
|
|
3922
|
+
|
|
3923
|
+
/* Transição suave para estados */
|
|
3924
|
+
/* Transição suave para estados */
|
|
3925
|
+
transition: color 0.2s ease;
|
|
3926
|
+
|
|
3927
|
+
/* Gap entre label e badge */
|
|
3928
|
+
gap: var(--structure-large-spacing-xxs);
|
|
3929
|
+
}
|
|
3930
|
+
|
|
3931
|
+
/* ============================================
|
|
3932
|
+
ESTADOS - Cores por estado
|
|
3933
|
+
============================================ */
|
|
3934
|
+
|
|
3935
|
+
/* Estado Active - Brand color */
|
|
3936
|
+
voa-tab-item[state="active"]::part(base) {
|
|
3937
|
+
color: var(--brand-base);
|
|
3938
|
+
}
|
|
3939
|
+
|
|
3940
|
+
/* Estado Default - Text primary */
|
|
3941
|
+
voa-tab-item[state="default"]::part(base) {
|
|
3942
|
+
color: var(--text-primary);
|
|
3943
|
+
}
|
|
3944
|
+
|
|
3945
|
+
/* Estado Disabled - Text disabled com opacity */
|
|
3946
|
+
voa-tab-item[state="disabled"]::part(base),
|
|
3947
|
+
voa-tab-item[disabled]::part(base) {
|
|
3948
|
+
color: var(--text-disabled);
|
|
3949
|
+
opacity: 0.4;
|
|
3950
|
+
cursor: not-allowed;
|
|
3951
|
+
pointer-events: none;
|
|
3952
|
+
}
|
|
3953
|
+
|
|
3954
|
+
/* ============================================
|
|
3955
|
+
POSIÇÕES - Padding e borders por posição
|
|
3956
|
+
============================================ */
|
|
3957
|
+
|
|
3958
|
+
/* Posição Default (bottom border) */
|
|
3959
|
+
voa-tab-item[position="default"]::part(base) {
|
|
3960
|
+
padding-inline: var(--spacing-spacing-xs);
|
|
3961
|
+
padding-block: var(--spacing-spacing-rg);
|
|
3962
|
+
}
|
|
3963
|
+
|
|
3964
|
+
voa-tab-item[position="default"]::part(base)::after {
|
|
3965
|
+
content: '';
|
|
3966
|
+
position: absolute;
|
|
3967
|
+
bottom: 0;
|
|
3968
|
+
left: 0;
|
|
3969
|
+
width: 100%;
|
|
3970
|
+
height: 2px;
|
|
3971
|
+
background-color: var(--brand-base);
|
|
3972
|
+
transform: scaleX(0);
|
|
3973
|
+
transform-origin: center;
|
|
3974
|
+
transition: transform 0.3s ease;
|
|
3975
|
+
}
|
|
3976
|
+
|
|
3977
|
+
voa-tab-item[position="default"][state="active"]::part(base)::after {
|
|
3978
|
+
transform: scaleX(1);
|
|
3979
|
+
}
|
|
3980
|
+
|
|
3981
|
+
/* Posição Top (top border) */
|
|
3982
|
+
voa-tab-item[position="top"]::part(base) {
|
|
3983
|
+
padding-inline: var(--spacing-spacing-xs);
|
|
3984
|
+
padding-block: var(--radius-md);
|
|
3985
|
+
}
|
|
3986
|
+
|
|
3987
|
+
voa-tab-item[position="top"]::part(base)::after {
|
|
3988
|
+
content: '';
|
|
3989
|
+
position: absolute;
|
|
3990
|
+
top: 0;
|
|
3991
|
+
left: 0;
|
|
3992
|
+
width: 100%;
|
|
3993
|
+
height: 2px;
|
|
3994
|
+
background-color: var(--brand-base);
|
|
3995
|
+
transform: scaleX(0);
|
|
3996
|
+
transform-origin: center;
|
|
3997
|
+
transition: transform 0.3s ease;
|
|
3998
|
+
}
|
|
3999
|
+
|
|
4000
|
+
voa-tab-item[position="top"][state="active"]::part(base)::after {
|
|
4001
|
+
transform: scaleX(1);
|
|
4002
|
+
}
|
|
4003
|
+
|
|
4004
|
+
/* Posição Right (right border) */
|
|
4005
|
+
voa-tab-item[position="right"]::part(base) {
|
|
4006
|
+
padding-inline: var(--radius-xl);
|
|
4007
|
+
padding-block: var(--spacing-spacing-sm);
|
|
4008
|
+
}
|
|
4009
|
+
|
|
4010
|
+
voa-tab-item[position="right"]::part(base)::after {
|
|
4011
|
+
content: '';
|
|
4012
|
+
position: absolute;
|
|
4013
|
+
top: 0;
|
|
4014
|
+
right: 0;
|
|
4015
|
+
width: 2px;
|
|
4016
|
+
height: 100%;
|
|
4017
|
+
background-color: var(--brand-base);
|
|
4018
|
+
transform: scaleY(0);
|
|
4019
|
+
transform-origin: center;
|
|
4020
|
+
transition: transform 0.3s ease;
|
|
4021
|
+
}
|
|
4022
|
+
|
|
4023
|
+
voa-tab-item[position="right"][state="active"]::part(base)::after {
|
|
4024
|
+
transform: scaleY(1);
|
|
4025
|
+
}
|
|
4026
|
+
|
|
4027
|
+
/* Posição Left (left border) */
|
|
4028
|
+
voa-tab-item[position="left"]::part(base) {
|
|
4029
|
+
padding-inline: var(--spacing-spacing-lg);
|
|
4030
|
+
padding-block: var(--spacing-spacing-sm);
|
|
4031
|
+
}
|
|
4032
|
+
|
|
4033
|
+
voa-tab-item[position="left"]::part(base)::after {
|
|
4034
|
+
content: '';
|
|
4035
|
+
position: absolute;
|
|
4036
|
+
top: 0;
|
|
4037
|
+
left: 0;
|
|
4038
|
+
width: 2px;
|
|
4039
|
+
height: 100%;
|
|
4040
|
+
background-color: var(--brand-base);
|
|
4041
|
+
transform: scaleY(0);
|
|
4042
|
+
transform-origin: center;
|
|
4043
|
+
transition: transform 0.3s ease;
|
|
4044
|
+
}
|
|
4045
|
+
|
|
4046
|
+
voa-tab-item[position="left"][state="active"]::part(base)::after {
|
|
4047
|
+
transform: scaleY(1);
|
|
4048
|
+
}
|
|
4049
|
+
|
|
4050
|
+
/* ============================================
|
|
4051
|
+
LABEL - Texto do item
|
|
4052
|
+
============================================ */
|
|
4053
|
+
|
|
4054
|
+
voa-tab-item::part(label) {
|
|
4055
|
+
/* Herda estilos do base, mas pode ser customizado se necessário */
|
|
4056
|
+
display: inline-block;
|
|
4057
|
+
}
|
|
4058
|
+
|
|
4059
|
+
/* ============================================
|
|
4060
|
+
BADGE - Indicador de notificação
|
|
4061
|
+
============================================ */
|
|
4062
|
+
|
|
4063
|
+
voa-tab-item::part(badge) {
|
|
4064
|
+
/* Estrutura do badge */
|
|
4065
|
+
display: inline-flex;
|
|
4066
|
+
align-items: center;
|
|
4067
|
+
justify-content: center;
|
|
4068
|
+
width: 16px;
|
|
4069
|
+
height: 16px;
|
|
4070
|
+
min-width: 16px;
|
|
4071
|
+
min-height: 16px;
|
|
4072
|
+
box-sizing: border-box;
|
|
4073
|
+
|
|
4074
|
+
/* Cores - Semantic Tokens */
|
|
4075
|
+
background-color: var(--semantic-colors-danger);
|
|
4076
|
+
border: var(--border-width-thick) solid var(--structure-colors-fill-secondary);
|
|
4077
|
+
border-radius: var(--radius-round);
|
|
4078
|
+
|
|
4079
|
+
/* Padding interno */
|
|
4080
|
+
padding: var(--spacing-spacing-xs);
|
|
4081
|
+
}
|
|
4082
|
+
|
|
4083
|
+
voa-tab-item::part(badge) .voa-tab-item__badge-text {
|
|
4084
|
+
/* Tipografia do badge - Typography/Legal-bold */
|
|
4085
|
+
font-family: 'Manrope', sans-serif;
|
|
4086
|
+
font-size: var(--typography-base-legal-bold-size, 10px);
|
|
4087
|
+
font-weight: var(--typography-base-legal-bold-weight, 600);
|
|
4088
|
+
line-height: var(--typography-base-legal-bold-line-height, 16px);
|
|
4089
|
+
|
|
4090
|
+
/* Cores */
|
|
4091
|
+
color: var(--structure-colors-bg-base);
|
|
4092
|
+
|
|
4093
|
+
/* Layout */
|
|
4094
|
+
text-align: center;
|
|
4095
|
+
white-space: nowrap;
|
|
4096
|
+
width: 8px;
|
|
4097
|
+
height: 8px;
|
|
4098
|
+
display: inline-flex;
|
|
4099
|
+
align-items: center;
|
|
4100
|
+
justify-content: center;
|
|
4101
|
+
}
|
|
4102
|
+
|
|
4103
|
+
/* ============================================
|
|
4104
|
+
ESTADOS HOVER/FOCUS
|
|
4105
|
+
============================================ */
|
|
4106
|
+
|
|
4107
|
+
/* Hover apenas em itens não-disabled */
|
|
4108
|
+
voa-tab-item[state="default"]:hover::part(base),
|
|
4109
|
+
voa-tab-item[state="active"]:hover::part(base) {
|
|
4110
|
+
/* Pode adicionar efeito hover se necessário */
|
|
4111
|
+
opacity: 0.8;
|
|
4112
|
+
}
|
|
4113
|
+
|
|
4114
|
+
voa-tab-item[state="disabled"]:hover::part(base),
|
|
4115
|
+
voa-tab-item[disabled]:hover::part(base) {
|
|
4116
|
+
/* Sem hover em disabled */
|
|
4117
|
+
opacity: 1;
|
|
4118
|
+
}
|
|
4119
|
+
|
|
4120
|
+
/* Focus-visible para acessibilidade WCAG 2.2 AA */
|
|
4121
|
+
voa-tab-item::part(base):focus-visible {
|
|
4122
|
+
outline: 2px solid var(--brand-base);
|
|
4123
|
+
outline-offset: 2px;
|
|
4124
|
+
}
|
|
4125
|
+
|
|
4126
|
+
voa-tab-item[state="disabled"]::part(base):focus-visible,
|
|
4127
|
+
voa-tab-item[disabled]::part(base):focus-visible {
|
|
4128
|
+
/* Sem focus em disabled */
|
|
4129
|
+
outline: none;
|
|
4130
|
+
}
|
|
4131
|
+
|
|
4132
|
+
/* ============================================
|
|
4133
|
+
voa-tag.external.css
|
|
4134
|
+
============================================ */
|
|
4135
|
+
|
|
4136
|
+
/**
|
|
4137
|
+
* Estilização Externa do VoaTag
|
|
4138
|
+
*
|
|
4139
|
+
* Este arquivo demonstra como estilizar o componente voa-tag
|
|
4140
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
4141
|
+
*
|
|
4142
|
+
* Baseado no design do Figma:
|
|
4143
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=1436-769
|
|
4144
|
+
*
|
|
4145
|
+
* Para usar, importe este arquivo após os tokens:
|
|
4146
|
+
* * *
|
|
4147
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
4148
|
+
*
|
|
4149
|
+
* Figma Token → Style Dictionary Token
|
|
4150
|
+
* --------------------------------------------
|
|
4151
|
+
* --structure-colors/bg-container → --structure-colors-bg-container (#f1f3f5)
|
|
4152
|
+
* --structure-colors/border-color → --structure-colors-border-color (#adb5bd)
|
|
4153
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
4154
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
4155
|
+
* --radius/radius-xs → --radius-xs (4px)
|
|
4156
|
+
* --radius/radius-round → --radius-round (1024px)
|
|
4157
|
+
* --asset-colors/text-primary → --text-primary (#0b1215)
|
|
4158
|
+
* --base/family/family-sans → --typography-base-family-sans ("Lato", sans-serif)
|
|
4159
|
+
*
|
|
4160
|
+
* Tamanhos de fonte do Figma:
|
|
4161
|
+
* - MD: 14px, line-height 16px
|
|
4162
|
+
* - SM: 11px, line-height 12px
|
|
4163
|
+
*
|
|
4164
|
+
* Tamanhos de ícone:
|
|
4165
|
+
* - MD: 16px
|
|
4166
|
+
* - SM: 12px
|
|
4167
|
+
*/
|
|
4168
|
+
|
|
4169
|
+
/* ============================================
|
|
4170
|
+
BASE - Container principal do tag
|
|
4171
|
+
============================================ */
|
|
4172
|
+
voa-tag::part(base) {
|
|
4173
|
+
/* Background padrão - Semantic Token (conforme Figma: structure-colors/bg-container) */
|
|
4174
|
+
background-color: var(--structure-colors-bg-container, #f1f3f5);
|
|
4175
|
+
|
|
4176
|
+
/* Border padrão - 1.5px solid (conforme Figma) */
|
|
4177
|
+
border: var(--border-width-thick, 1.5px) solid var(--structure-colors-border-color, #adb5bd);
|
|
4178
|
+
|
|
4179
|
+
/* Border-radius padrão para shape="default" - Semantic Token (conforme Figma: radius/radius-xs) */
|
|
4180
|
+
border-radius: var(--radius-xs, 4px);
|
|
4181
|
+
|
|
4182
|
+
/* Gap entre elementos - Semantic Token (conforme Figma: spacing/spacing-xs) */
|
|
4183
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
4184
|
+
|
|
4185
|
+
/* Box-sizing */
|
|
4186
|
+
box-sizing: border-box;
|
|
4187
|
+
}
|
|
4188
|
+
|
|
4189
|
+
/* Shape: Pill - Border-radius completamente arredondado */
|
|
4190
|
+
voa-tag[shape="pill"]::part(base) {
|
|
4191
|
+
/* Border-radius pill - Semantic Token (conforme Figma: radius/radius-round) */
|
|
4192
|
+
border-radius: var(--radius-round, 1024px);
|
|
4193
|
+
}
|
|
4194
|
+
|
|
4195
|
+
/* ============================================
|
|
4196
|
+
PADDING POR TAMANHO
|
|
4197
|
+
============================================ */
|
|
4198
|
+
|
|
4199
|
+
/* Size: Medium (md) - Padding padrão */
|
|
4200
|
+
voa-tag[size="md"]::part(base) {
|
|
4201
|
+
/* Padding para size md - Semantic Tokens (conforme Figma: spacing/spacing-xs vertical, spacing/spacing-sm horizontal) */
|
|
4202
|
+
padding-block: var(--spacing-spacing-xs, 4px);
|
|
4203
|
+
padding-inline: var(--spacing-spacing-sm, 8px);
|
|
4204
|
+
}
|
|
4205
|
+
|
|
4206
|
+
/* Size: Small (sm) - Padding reduzido */
|
|
4207
|
+
voa-tag[size="sm"]::part(base) {
|
|
4208
|
+
/* Padding menor para size sm - Semantic Token (conforme Figma: spacing/spacing-xs) */
|
|
4209
|
+
padding: var(--spacing-spacing-xs, 4px);
|
|
4210
|
+
}
|
|
4211
|
+
|
|
4212
|
+
/* ============================================
|
|
4213
|
+
LABEL - Texto do tag
|
|
4214
|
+
============================================ */
|
|
4215
|
+
voa-tag::part(label) {
|
|
4216
|
+
/* Cor do texto - Semantic Token (conforme Figma: asset-colors/text-primary) */
|
|
4217
|
+
color: var(--text-primary, #0b1215);
|
|
4218
|
+
|
|
4219
|
+
/* Família de fonte - Semantic Token (conforme Figma: base/family/family-sans) */
|
|
4220
|
+
font-family: var(--typography-base-family-sans, 'Lato', sans-serif);
|
|
4221
|
+
|
|
4222
|
+
/* Peso da fonte - Regular (400) */
|
|
4223
|
+
font-weight: 400;
|
|
4224
|
+
|
|
4225
|
+
/* Estilo da fonte */
|
|
4226
|
+
font-style: normal;
|
|
4227
|
+
}
|
|
4228
|
+
|
|
4229
|
+
/* Label - Size: Medium (md) */
|
|
4230
|
+
voa-tag[size="md"]::part(label) {
|
|
4231
|
+
/* Tamanho de fonte md - 14px (conforme Figma) */
|
|
4232
|
+
font-size: var(--typography-base-body-sm-regular-size, 14px);
|
|
4233
|
+
|
|
4234
|
+
/* Line-height md - 16px (conforme Figma) */
|
|
4235
|
+
line-height: var(--typography-base-body-sm-regular-line-height, 16px);
|
|
4236
|
+
}
|
|
4237
|
+
|
|
4238
|
+
/* Label - Size: Small (sm) */
|
|
4239
|
+
voa-tag[size="sm"]::part(label) {
|
|
4240
|
+
/* Tamanho de fonte sm - 11px (conforme Figma: Desktop/Body-xs/Regular) */
|
|
4241
|
+
font-size: var(--typography-base-type-scale-9, 11px);
|
|
4242
|
+
|
|
4243
|
+
/* Line-height sm - 12px (conforme Figma) */
|
|
4244
|
+
line-height: 12px;
|
|
4245
|
+
}
|
|
4246
|
+
|
|
4247
|
+
/* ============================================
|
|
4248
|
+
ÍCONES - Containers dos ícones
|
|
4249
|
+
============================================ */
|
|
4250
|
+
voa-tag::part(icon-start),
|
|
4251
|
+
voa-tag::part(icon-end) {
|
|
4252
|
+
/* Cor dos ícones - usando brand-secondary (conforme Figma: teal/cyan) */
|
|
4253
|
+
color: var(--brand-secondary, #00e5ce);
|
|
4254
|
+
|
|
4255
|
+
/* Alinhamento */
|
|
4256
|
+
display: inline-flex;
|
|
4257
|
+
align-items: center;
|
|
4258
|
+
justify-content: center;
|
|
4259
|
+
}
|
|
4260
|
+
|
|
4261
|
+
/* Ícones - Size: Medium (md) */
|
|
4262
|
+
voa-tag[size="md"]::part(icon-start),
|
|
4263
|
+
voa-tag[size="md"]::part(icon-end) {
|
|
4264
|
+
/* Tamanho do ícone md - 16px (conforme Figma) */
|
|
4265
|
+
width: 16px;
|
|
4266
|
+
height: 16px;
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4269
|
+
/* Ícones - Size: Small (sm) */
|
|
4270
|
+
voa-tag[size="sm"]::part(icon-start),
|
|
4271
|
+
voa-tag[size="sm"]::part(icon-end) {
|
|
4272
|
+
/* Tamanho do ícone sm - 12px (conforme Figma) */
|
|
4273
|
+
width: 12px;
|
|
4274
|
+
height: 12px;
|
|
4275
|
+
}
|
|
4276
|
+
|
|
4277
|
+
/* Estilização de SVGs dentro dos slots de ícone */
|
|
4278
|
+
voa-tag[size="md"] [slot="icon-start"],
|
|
4279
|
+
voa-tag[size="md"] [slot="icon-end"] {
|
|
4280
|
+
width: 16px;
|
|
4281
|
+
height: 16px;
|
|
4282
|
+
fill: var(--brand-secondary, #00e5ce);
|
|
4283
|
+
}
|
|
4284
|
+
|
|
4285
|
+
voa-tag[size="sm"] [slot="icon-start"],
|
|
4286
|
+
voa-tag[size="sm"] [slot="icon-end"] {
|
|
4287
|
+
width: 12px;
|
|
4288
|
+
height: 12px;
|
|
4289
|
+
fill: var(--brand-secondary, #00e5ce);
|
|
4290
|
+
}
|
|
4291
|
+
|
|
4292
|
+
/* ============================================
|
|
4293
|
+
ESTADOS INTERATIVOS (Opcional - para uso futuro)
|
|
4294
|
+
============================================ */
|
|
4295
|
+
|
|
4296
|
+
/* Hover state */
|
|
4297
|
+
voa-tag:hover::part(base) {
|
|
4298
|
+
/* Sutil destaque no hover */
|
|
4299
|
+
border-color: var(--structure-colors-border-color-secondary, #dee2e6);
|
|
4300
|
+
}
|
|
4301
|
+
|
|
4302
|
+
/* Focus state - Acessibilidade */
|
|
4303
|
+
voa-tag:focus-visible::part(base) {
|
|
4304
|
+
outline: 2px solid var(--brand-base, #0064cb);
|
|
4305
|
+
outline-offset: 2px;
|
|
4306
|
+
}
|
|
4307
|
+
|
|
4308
|
+
/* ============================================
|
|
4309
|
+
DARK THEME SUPPORT
|
|
4310
|
+
============================================ */
|
|
4311
|
+
[data-theme="dark"] voa-tag::part(base) {
|
|
4312
|
+
/* Background dark - usando tokens dark */
|
|
4313
|
+
background-color: var(--structure-colors-bg-container);
|
|
4314
|
+
|
|
4315
|
+
/* Border dark */
|
|
4316
|
+
border-color: var(--structure-colors-border-color);
|
|
4317
|
+
}
|
|
4318
|
+
|
|
4319
|
+
[data-theme="dark"] voa-tag::part(label) {
|
|
4320
|
+
/* Cor do texto dark - garantir contraste adequado com fallback explícito */
|
|
4321
|
+
color: var(--text-primary, #ffffff);
|
|
4322
|
+
}
|
|
4323
|
+
|
|
4324
|
+
/* Variantes com backgrounds coloridos precisam de texto claro */
|
|
4325
|
+
[data-theme="dark"] voa-tag[variant="solid"]::part(label),
|
|
4326
|
+
[data-theme="dark"] voa-tag[variant="tonal"]::part(label) {
|
|
4327
|
+
color: var(--text-primary, #ffffff);
|
|
4328
|
+
}
|
|
4329
|
+
|
|
4330
|
+
[data-theme="dark"] voa-tag::part(icon-start),
|
|
4331
|
+
[data-theme="dark"] voa-tag::part(icon-end) {
|
|
4332
|
+
/* Cor dos ícones dark - usando brand primary (teal no dark mode) */
|
|
4333
|
+
color: var(--brand-base, #00e5ce);
|
|
4334
|
+
}
|
|
4335
|
+
|
|
4336
|
+
[data-theme="dark"] voa-tag [slot="icon-start"],
|
|
4337
|
+
[data-theme="dark"] voa-tag [slot="icon-end"] {
|
|
4338
|
+
fill: var(--brand-base, #00e5ce);
|
|
4339
|
+
}
|
|
4340
|
+
|
|
4341
|
+
/* ============================================
|
|
4342
|
+
voa-text-area.external.css
|
|
4343
|
+
============================================ */
|
|
4344
|
+
|
|
4345
|
+
/*
|
|
4346
|
+
* VoaTextArea Component Styles
|
|
4347
|
+
*
|
|
4348
|
+
* Estilos aplicados via CSS Parts API usando design tokens semânticos.
|
|
4349
|
+
* Baseado no design do Figma: https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=552-1198
|
|
4350
|
+
*/
|
|
4351
|
+
|
|
4352
|
+
/* Label Wrapper */
|
|
4353
|
+
voa-text-area::part(label-wrapper) {
|
|
4354
|
+
display: flex;
|
|
4355
|
+
justify-content: space-between;
|
|
4356
|
+
align-items: flex-end;
|
|
4357
|
+
margin-bottom: 6px;
|
|
4358
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
4359
|
+
}
|
|
4360
|
+
|
|
4361
|
+
/* Label Text */
|
|
4362
|
+
voa-text-area::part(label) {
|
|
4363
|
+
font-family: var(--voa-font-family-sans);
|
|
4364
|
+
font-size: 20px;
|
|
4365
|
+
font-weight: var(--typography-base-body-sm-bold-weight);
|
|
4366
|
+
line-height: 32px;
|
|
4367
|
+
color: var(--text-secondary);
|
|
4368
|
+
flex: 1 0 0;
|
|
4369
|
+
min-width: 0;
|
|
4370
|
+
}
|
|
4371
|
+
|
|
4372
|
+
/* Required Indicator */
|
|
4373
|
+
voa-text-area::part(required-indicator) {
|
|
4374
|
+
color: var(--semantic-colors-danger);
|
|
4375
|
+
margin-left: 2px;
|
|
4376
|
+
}
|
|
4377
|
+
|
|
4378
|
+
/* Label Info Section */
|
|
4379
|
+
voa-text-area::part(label-info) {
|
|
4380
|
+
display: flex;
|
|
4381
|
+
gap: var(--spacing-spacing-xs, 4px);
|
|
4382
|
+
align-items: center;
|
|
4383
|
+
padding-bottom: 6px;
|
|
4384
|
+
}
|
|
4385
|
+
|
|
4386
|
+
/* Label Info Text */
|
|
4387
|
+
voa-text-area::part(label-info-text) {
|
|
4388
|
+
font-family: var(--voa-font-family-sans);
|
|
4389
|
+
font-size: 12px;
|
|
4390
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
4391
|
+
line-height: 16px;
|
|
4392
|
+
color: var(--text-secondary);
|
|
4393
|
+
}
|
|
4394
|
+
|
|
4395
|
+
/* Label Info Icon */
|
|
4396
|
+
voa-text-area::part(label-info-icon) {
|
|
4397
|
+
width: 16px;
|
|
4398
|
+
height: 16px;
|
|
4399
|
+
color: var(--text-secondary);
|
|
4400
|
+
flex-shrink: 0;
|
|
4401
|
+
}
|
|
4402
|
+
|
|
4403
|
+
/* Textarea Container */
|
|
4404
|
+
voa-text-area::part(container) {
|
|
4405
|
+
background-color: var(--structure-colors-bg-base);
|
|
4406
|
+
border: var(--border-width-medium) solid var(--structure-colors-border-color);
|
|
4407
|
+
border-radius: var(--structure-large-radius-lg);
|
|
4408
|
+
padding: var(--spacing-spacing-sm, 8px);
|
|
4409
|
+
min-height: 120px;
|
|
4410
|
+
position: relative;
|
|
4411
|
+
box-sizing: border-box;
|
|
4412
|
+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
4413
|
+
display: flex;
|
|
4414
|
+
flex-direction: column;
|
|
4415
|
+
}
|
|
4416
|
+
|
|
4417
|
+
/* Textarea Container - Focused State (Active) */
|
|
4418
|
+
voa-text-area:focus-within::part(container) {
|
|
4419
|
+
border-color: var(--brand-base);
|
|
4420
|
+
box-shadow: inset 0px 0px 8px 2px var(--brand-base-50, rgba(0, 100, 203, 0.5));
|
|
4421
|
+
}
|
|
4422
|
+
|
|
4423
|
+
/* Textarea Container - Error State */
|
|
4424
|
+
voa-text-area[has-error]::part(container) {
|
|
4425
|
+
border-color: var(--semantic-colors-danger);
|
|
4426
|
+
}
|
|
4427
|
+
|
|
4428
|
+
voa-text-area[has-error]:focus-within::part(container) {
|
|
4429
|
+
border-color: var(--semantic-colors-danger);
|
|
4430
|
+
box-shadow: inset 0px 0px 8px 2px var(--semantic-colors-danger);
|
|
4431
|
+
}
|
|
4432
|
+
|
|
4433
|
+
/* Textarea Container - Disabled State */
|
|
4434
|
+
voa-text-area[disabled]::part(container) {
|
|
4435
|
+
background-color: var(--structure-colors-bg-base-disabled);
|
|
4436
|
+
border-color: var(--structure-colors-border-color);
|
|
4437
|
+
opacity: 0.6;
|
|
4438
|
+
cursor: not-allowed;
|
|
4439
|
+
}
|
|
4440
|
+
|
|
4441
|
+
/* Textarea Container - Readonly State */
|
|
4442
|
+
voa-text-area[readonly]::part(container) {
|
|
4443
|
+
background-color: var(--structure-colors-bg-container);
|
|
4444
|
+
}
|
|
4445
|
+
|
|
4446
|
+
/* Textarea Element */
|
|
4447
|
+
voa-text-area::part(textarea) {
|
|
4448
|
+
font-family: var(--voa-font-family-sans);
|
|
4449
|
+
font-size: 16px;
|
|
4450
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
4451
|
+
line-height: 24px;
|
|
4452
|
+
color: var(--text-primary);
|
|
4453
|
+
background: transparent;
|
|
4454
|
+
border: none;
|
|
4455
|
+
outline: none;
|
|
4456
|
+
resize: none;
|
|
4457
|
+
flex: 1 0 0;
|
|
4458
|
+
min-height: 0;
|
|
4459
|
+
width: 100%;
|
|
4460
|
+
box-sizing: border-box;
|
|
4461
|
+
padding: 0;
|
|
4462
|
+
}
|
|
4463
|
+
|
|
4464
|
+
voa-text-area::part(textarea)::placeholder {
|
|
4465
|
+
color: var(--text-placeholder);
|
|
4466
|
+
}
|
|
4467
|
+
|
|
4468
|
+
/* Textarea - Disabled State */
|
|
4469
|
+
voa-text-area[disabled]::part(textarea) {
|
|
4470
|
+
color: var(--text-disabled);
|
|
4471
|
+
cursor: not-allowed;
|
|
4472
|
+
}
|
|
4473
|
+
|
|
4474
|
+
/* Resize Handle */
|
|
4475
|
+
voa-text-area::part(resize-handle) {
|
|
4476
|
+
position: absolute;
|
|
4477
|
+
bottom: 3px;
|
|
4478
|
+
right: 3px;
|
|
4479
|
+
width: 16px;
|
|
4480
|
+
height: 16px;
|
|
4481
|
+
cursor: nwse-resize;
|
|
4482
|
+
z-index: 10;
|
|
4483
|
+
display: flex;
|
|
4484
|
+
align-items: center;
|
|
4485
|
+
justify-content: center;
|
|
4486
|
+
color: var(--structure-colors-border-color-secondary);
|
|
4487
|
+
box-sizing: border-box;
|
|
4488
|
+
}
|
|
4489
|
+
|
|
4490
|
+
voa-text-area[disabled]::part(resize-handle),
|
|
4491
|
+
voa-text-area[readonly]::part(resize-handle) {
|
|
4492
|
+
display: none;
|
|
4493
|
+
}
|
|
4494
|
+
|
|
4495
|
+
/* Character Counter */
|
|
4496
|
+
voa-text-area::part(character-counter) {
|
|
4497
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
4498
|
+
font-size: 14px;
|
|
4499
|
+
font-weight: var(--typography-base-body-sm-regular-weight);
|
|
4500
|
+
line-height: 16px;
|
|
4501
|
+
color: var(--text-secondary);
|
|
4502
|
+
text-align: right;
|
|
4503
|
+
margin-top: 6px;
|
|
4504
|
+
display: flex;
|
|
4505
|
+
gap: 6px;
|
|
4506
|
+
justify-content: flex-end;
|
|
4507
|
+
align-items: center;
|
|
4508
|
+
}
|
|
4509
|
+
|
|
4510
|
+
/* Error Message */
|
|
4511
|
+
voa-text-area::part(error-message) {
|
|
4512
|
+
font-family: var(--font-family-sans, 'Lato', sans-serif);
|
|
4513
|
+
font-size: 14px;
|
|
4514
|
+
line-height: 16px;
|
|
4515
|
+
color: var(--semantic-colors-danger);
|
|
4516
|
+
margin-top: 6px;
|
|
4517
|
+
display: block;
|
|
4518
|
+
}
|
|
4519
|
+
|
|
4520
|
+
/* ============================================
|
|
4521
|
+
voa-tooltip.external.css
|
|
4522
|
+
============================================ */
|
|
4523
|
+
|
|
4524
|
+
/**
|
|
4525
|
+
* Estilização Externa do VoaTooltip
|
|
4526
|
+
*
|
|
4527
|
+
* Este arquivo demonstra como estilizar o componente voa-tooltip
|
|
4528
|
+
* usando CSS Parts API e design tokens semânticos.
|
|
4529
|
+
*
|
|
4530
|
+
* Baseado no design do Figma:
|
|
4531
|
+
* https://www.figma.com/design/wDStUEuqpl7Tu1oHpiAml6/Voa-Design-System?node-id=538-2010&t=Kno5mRpQSwBY8jAM-4
|
|
4532
|
+
*
|
|
4533
|
+
* Para usar, importe este arquivo após os tokens:
|
|
4534
|
+
* * *
|
|
4535
|
+
* MAPEAMENTO DE TOKENS DO FIGMA PARA STYLE DICTIONARY:
|
|
4536
|
+
*
|
|
4537
|
+
* Figma Token → Style Dictionary Token
|
|
4538
|
+
* --------------------------------------------
|
|
4539
|
+
* --spacing/spacing-xs → --spacing-spacing-xs (4px)
|
|
4540
|
+
* --spacing/spacing-sm → --spacing-spacing-sm (8px)
|
|
4541
|
+
* --spacing/spacing-rg → --spacing-spacing-rg (12px)
|
|
4542
|
+
* --radius/radius-sm → --radius-sm (8px)
|
|
4543
|
+
* --radius/radius-xxs → --radius-xxs (2px)
|
|
4544
|
+
* --base/family/family-sans → --font-family-sans (Lato)
|
|
4545
|
+
* --structure-colors/bg-elevated → --tooltip-default-bg
|
|
4546
|
+
* --structure-colors/border-color → --tooltip-default-border
|
|
4547
|
+
* --structure-colors/bg-spot → --tooltip-spot-bg
|
|
4548
|
+
* --structure-colors/bg-mask → --tooltip-spot-border
|
|
4549
|
+
* --palette/{color}/{color}-5 → --tooltip-{color}-bg
|
|
4550
|
+
* --palette/{color}/{color}-6 → --tooltip-{color}-border
|
|
4551
|
+
*/
|
|
4552
|
+
|
|
4553
|
+
/* ============================================
|
|
4554
|
+
TOOLTIP BODY - Estilos base
|
|
4555
|
+
============================================ */
|
|
4556
|
+
|
|
4557
|
+
/* Base Tooltip Body - Default Theme */
|
|
4558
|
+
voa-tooltip::part(body) {
|
|
4559
|
+
/* Background - Semantic Token (conforme Figma: structure-colors/bg-elevated) */
|
|
4560
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
4561
|
+
|
|
4562
|
+
/* Border - Semantic Token (conforme Figma: structure-colors/border-color) */
|
|
4563
|
+
border: var(--border-width-thick) solid var(--structure-colors-border-color);
|
|
4564
|
+
|
|
4565
|
+
/* Border-radius - Semantic Token (conforme Figma: radius/radius-sm) */
|
|
4566
|
+
border-radius: var(--structure-large-radius-sm);
|
|
4567
|
+
|
|
4568
|
+
/* Padding - Semantic Tokens (conforme Figma: spacing/spacing-sm e spacing/spacing-rg) */
|
|
4569
|
+
padding: var(--structure-large-spacing-sm) var(--structure-large-spacing-rg);
|
|
4570
|
+
|
|
4571
|
+
/* Gap entre ícone e texto - Semantic Token (conforme Figma: spacing/spacing-xs) */
|
|
4572
|
+
gap: var(--structure-large-spacing-xs);
|
|
4573
|
+
|
|
4574
|
+
/* Inset shadow - Semantic Tokens (conforme Figma: radius/radius-xxs e structure-colors/bg-base-disabled) */
|
|
4575
|
+
box-shadow: inset 0px var(--structure-large-radius-xxs) 0px 0px var(--structure-colors-bg-base-disabled);
|
|
4576
|
+
|
|
4577
|
+
/* Box-sizing */
|
|
4578
|
+
box-sizing: border-box;
|
|
4579
|
+
|
|
4580
|
+
/* Variáveis CSS para estilização do triângulo (definidas no componente, podem ser sobrescritas aqui) */
|
|
4581
|
+
--arrow-color: var(--structure-colors-bg-elevated);
|
|
4582
|
+
--arrow-border-color: var(--structure-colors-border-color);
|
|
4583
|
+
--tooltip-bg: var(--structure-colors-bg-elevated);
|
|
4584
|
+
}
|
|
4585
|
+
|
|
4586
|
+
/* ============================================
|
|
4587
|
+
TOOLTIP CONTENT - Tipografia
|
|
4588
|
+
============================================ */
|
|
4589
|
+
|
|
4590
|
+
voa-tooltip::part(content) {
|
|
4591
|
+
/* Cor do texto - Semantic Token (conforme Figma: asset-colors/text-primary) */
|
|
4592
|
+
color: var(--text-primary);
|
|
4593
|
+
|
|
4594
|
+
/* Font-family - Semantic Token (conforme Figma: base/family/family-sans) */
|
|
4595
|
+
font-family: var(--font-family-sans);
|
|
4596
|
+
|
|
4597
|
+
/* Font-size e line-height conforme Figma: Body-sm/Regular (14px / 16px) */
|
|
4598
|
+
font-size: var(--typography-base-body-sm-regular-size);
|
|
4599
|
+
line-height: var(--line-height-body-sm);
|
|
4600
|
+
|
|
4601
|
+
/* Text-align conforme design */
|
|
4602
|
+
text-align: center;
|
|
4603
|
+
}
|
|
4604
|
+
|
|
4605
|
+
/* ============================================
|
|
4606
|
+
TOOLTIP ARROW - Criado via ::after do body
|
|
4607
|
+
============================================ */
|
|
4608
|
+
|
|
4609
|
+
/* As pseudo-elementos ::before e ::after do triângulo são criados no CSS estrutural do componente */
|
|
4610
|
+
/* A estilização (cores) é feita via variáveis CSS definidas aqui */
|
|
4611
|
+
|
|
4612
|
+
/* ============================================
|
|
4613
|
+
TEMA: SPOT (fundo escuro)
|
|
4614
|
+
============================================ */
|
|
4615
|
+
|
|
4616
|
+
voa-tooltip[theme="spot"]::part(body) {
|
|
4617
|
+
background-color: var(--structure-colors-bg-spot);
|
|
4618
|
+
border-color: var(--structure-colors-bg-mask);
|
|
4619
|
+
}
|
|
4620
|
+
|
|
4621
|
+
voa-tooltip[theme="spot"]::part(content) {
|
|
4622
|
+
color: var(--text-on-primary);
|
|
4623
|
+
}
|
|
4624
|
+
|
|
4625
|
+
voa-tooltip[theme="spot"]::part(body) {
|
|
4626
|
+
--arrow-color: var(--structure-colors-bg-spot);
|
|
4627
|
+
--arrow-border-color: var(--structure-colors-bg-mask);
|
|
4628
|
+
--tooltip-bg: var(--structure-colors-bg-spot);
|
|
4629
|
+
}
|
|
4630
|
+
|
|
4631
|
+
/* ============================================
|
|
4632
|
+
TEMA: PINK
|
|
4633
|
+
============================================ */
|
|
4634
|
+
|
|
4635
|
+
voa-tooltip[theme="pink"]::part(body) {
|
|
4636
|
+
background-color: var(--palette-pink-pink-5);
|
|
4637
|
+
border-color: var(--palette-pink-pink-6);
|
|
4638
|
+
}
|
|
4639
|
+
|
|
4640
|
+
voa-tooltip[theme="pink"]::part(content) {
|
|
4641
|
+
color: var(--structure-colors-bg-base);
|
|
4642
|
+
}
|
|
4643
|
+
|
|
4644
|
+
voa-tooltip[theme="pink"]::part(body) {
|
|
4645
|
+
--arrow-color: var(--palette-pink-pink-5);
|
|
4646
|
+
--arrow-border-color: var(--palette-pink-pink-6);
|
|
4647
|
+
--tooltip-bg: var(--palette-pink-pink-5);
|
|
4648
|
+
}
|
|
4649
|
+
|
|
4650
|
+
/* ============================================
|
|
4651
|
+
TEMA: GRAPE
|
|
4652
|
+
============================================ */
|
|
4653
|
+
|
|
4654
|
+
voa-tooltip[theme="grape"]::part(body) {
|
|
4655
|
+
background-color: var(--palette-grape-grape-5);
|
|
4656
|
+
border-color: var(--palette-grape-grape-6);
|
|
4657
|
+
}
|
|
4658
|
+
|
|
4659
|
+
voa-tooltip[theme="grape"]::part(content) {
|
|
4660
|
+
color: var(--structure-colors-bg-base);
|
|
4661
|
+
}
|
|
4662
|
+
|
|
4663
|
+
voa-tooltip[theme="grape"]::part(body) {
|
|
4664
|
+
--arrow-color: var(--palette-grape-grape-5);
|
|
4665
|
+
--arrow-border-color: var(--palette-grape-grape-6);
|
|
4666
|
+
--tooltip-bg: var(--palette-grape-grape-5);
|
|
4667
|
+
}
|
|
4668
|
+
|
|
4669
|
+
/* ============================================
|
|
4670
|
+
TEMA: VIOLET
|
|
4671
|
+
============================================ */
|
|
4672
|
+
|
|
4673
|
+
voa-tooltip[theme="violet"]::part(body) {
|
|
4674
|
+
background-color: var(--palette-violet-violet-5);
|
|
4675
|
+
border-color: var(--palette-violet-violet-6);
|
|
4676
|
+
}
|
|
4677
|
+
|
|
4678
|
+
voa-tooltip[theme="violet"]::part(content) {
|
|
4679
|
+
color: var(--structure-colors-bg-base);
|
|
4680
|
+
}
|
|
4681
|
+
|
|
4682
|
+
voa-tooltip[theme="violet"]::part(body) {
|
|
4683
|
+
--arrow-color: var(--palette-violet-violet-5);
|
|
4684
|
+
--arrow-border-color: var(--palette-violet-violet-6);
|
|
4685
|
+
--tooltip-bg: var(--palette-violet-violet-5);
|
|
4686
|
+
}
|
|
4687
|
+
|
|
4688
|
+
/* ============================================
|
|
4689
|
+
TEMA: INDIGO
|
|
4690
|
+
============================================ */
|
|
4691
|
+
|
|
4692
|
+
voa-tooltip[theme="indigo"]::part(body) {
|
|
4693
|
+
background-color: var(--palette-indigo-indigo-5);
|
|
4694
|
+
border-color: var(--palette-indigo-indigo-6);
|
|
4695
|
+
}
|
|
4696
|
+
|
|
4697
|
+
voa-tooltip[theme="indigo"]::part(content) {
|
|
4698
|
+
color: var(--structure-colors-bg-base);
|
|
4699
|
+
}
|
|
4700
|
+
|
|
4701
|
+
voa-tooltip[theme="indigo"]::part(body) {
|
|
4702
|
+
--arrow-color: var(--palette-indigo-indigo-5);
|
|
4703
|
+
--arrow-border-color: var(--palette-indigo-indigo-6);
|
|
4704
|
+
--tooltip-bg: var(--palette-indigo-indigo-5);
|
|
4705
|
+
}
|
|
4706
|
+
|
|
4707
|
+
/* ============================================
|
|
4708
|
+
TEMA: BLUE
|
|
4709
|
+
============================================ */
|
|
4710
|
+
|
|
4711
|
+
voa-tooltip[theme="blue"]::part(body) {
|
|
4712
|
+
background-color: var(--palette-blue-blue-5);
|
|
4713
|
+
border-color: var(--palette-blue-blue-6);
|
|
4714
|
+
}
|
|
4715
|
+
|
|
4716
|
+
voa-tooltip[theme="blue"]::part(content) {
|
|
4717
|
+
color: var(--structure-colors-bg-base);
|
|
4718
|
+
}
|
|
4719
|
+
|
|
4720
|
+
voa-tooltip[theme="blue"]::part(body) {
|
|
4721
|
+
--arrow-color: var(--palette-blue-blue-5);
|
|
4722
|
+
--arrow-border-color: var(--palette-blue-blue-6);
|
|
4723
|
+
--tooltip-bg: var(--palette-blue-blue-5);
|
|
4724
|
+
}
|
|
4725
|
+
|
|
4726
|
+
/* ============================================
|
|
4727
|
+
TEMA: CYAN
|
|
4728
|
+
============================================ */
|
|
4729
|
+
|
|
4730
|
+
voa-tooltip[theme="cyan"]::part(body) {
|
|
4731
|
+
background-color: var(--palette-cyan-cyan-5);
|
|
4732
|
+
border-color: var(--palette-cyan-cyan-6);
|
|
4733
|
+
}
|
|
4734
|
+
|
|
4735
|
+
voa-tooltip[theme="cyan"]::part(content) {
|
|
4736
|
+
color: var(--structure-colors-bg-base);
|
|
4737
|
+
}
|
|
4738
|
+
|
|
4739
|
+
voa-tooltip[theme="cyan"]::part(body) {
|
|
4740
|
+
--arrow-color: var(--palette-cyan-cyan-5);
|
|
4741
|
+
--arrow-border-color: var(--palette-cyan-cyan-6);
|
|
4742
|
+
--tooltip-bg: var(--palette-cyan-cyan-5);
|
|
4743
|
+
}
|
|
4744
|
+
|
|
4745
|
+
/* ============================================
|
|
4746
|
+
TEMA: TEAL
|
|
4747
|
+
============================================ */
|
|
4748
|
+
|
|
4749
|
+
voa-tooltip[theme="teal"]::part(body) {
|
|
4750
|
+
background-color: var(--palette-teal-teal-5);
|
|
4751
|
+
border-color: var(--palette-teal-teal-6);
|
|
4752
|
+
}
|
|
4753
|
+
|
|
4754
|
+
voa-tooltip[theme="teal"]::part(content) {
|
|
4755
|
+
color: var(--structure-colors-bg-base);
|
|
4756
|
+
}
|
|
4757
|
+
|
|
4758
|
+
voa-tooltip[theme="teal"]::part(body) {
|
|
4759
|
+
--arrow-color: var(--palette-teal-teal-5);
|
|
4760
|
+
--arrow-border-color: var(--palette-teal-teal-6);
|
|
4761
|
+
--tooltip-bg: var(--palette-teal-teal-5);
|
|
4762
|
+
}
|
|
4763
|
+
|
|
4764
|
+
/* ============================================
|
|
4765
|
+
TEMA: LIME
|
|
4766
|
+
============================================ */
|
|
4767
|
+
|
|
4768
|
+
voa-tooltip[theme="lime"]::part(body) {
|
|
4769
|
+
background-color: var(--palette-lime-lime-5);
|
|
4770
|
+
border-color: var(--palette-lime-lime-6);
|
|
4771
|
+
}
|
|
4772
|
+
|
|
4773
|
+
voa-tooltip[theme="lime"]::part(content) {
|
|
4774
|
+
color: var(--structure-colors-bg-base);
|
|
4775
|
+
}
|
|
4776
|
+
|
|
4777
|
+
voa-tooltip[theme="lime"]::part(body) {
|
|
4778
|
+
--arrow-color: var(--palette-lime-lime-5);
|
|
4779
|
+
--arrow-border-color: var(--palette-lime-lime-6);
|
|
4780
|
+
--tooltip-bg: var(--palette-lime-lime-5);
|
|
4781
|
+
}
|
|
4782
|
+
|
|
4783
|
+
/* ============================================
|
|
4784
|
+
TEMA: ORANGE
|
|
4785
|
+
============================================ */
|
|
4786
|
+
|
|
4787
|
+
voa-tooltip[theme="orange"]::part(body) {
|
|
4788
|
+
background-color: var(--palette-orange-orange-5);
|
|
4789
|
+
border-color: var(--palette-orange-orange-6);
|
|
4790
|
+
}
|
|
4791
|
+
|
|
4792
|
+
voa-tooltip[theme="orange"]::part(content) {
|
|
4793
|
+
color: var(--structure-colors-bg-base);
|
|
4794
|
+
}
|
|
4795
|
+
|
|
4796
|
+
voa-tooltip[theme="orange"]::part(body) {
|
|
4797
|
+
--arrow-color: var(--palette-orange-orange-5);
|
|
4798
|
+
--arrow-border-color: var(--palette-orange-orange-6);
|
|
4799
|
+
--tooltip-bg: var(--palette-orange-orange-5);
|
|
4800
|
+
}
|
|
4801
|
+
|
|
4802
|
+
/* ============================================
|
|
4803
|
+
DARK THEME SUPPORT
|
|
4804
|
+
============================================ */
|
|
4805
|
+
|
|
4806
|
+
[data-theme="dark"] voa-tooltip::part(body) {
|
|
4807
|
+
/* Background dark - usando tokens dark */
|
|
4808
|
+
background-color: var(--structure-colors-bg-elevated);
|
|
4809
|
+
|
|
4810
|
+
/* Border dark */
|
|
4811
|
+
border-color: var(--structure-colors-border-color);
|
|
4812
|
+
|
|
4813
|
+
/* Arrow colors for dark mode */
|
|
4814
|
+
--arrow-color: var(--structure-colors-bg-elevated);
|
|
4815
|
+
--arrow-border-color: var(--structure-colors-border-color);
|
|
4816
|
+
--tooltip-bg: var(--structure-colors-bg-elevated);
|
|
4817
|
+
}
|
|
4818
|
+
|
|
4819
|
+
[data-theme="dark"] voa-tooltip::part(content) {
|
|
4820
|
+
/* Cor do texto dark - garantir contraste adequado */
|
|
4821
|
+
color: var(--text-primary, #ffffff);
|
|
4822
|
+
}
|
|
4823
|
+
|
|
4824
|
+
/* ============================================
|
|
4825
|
+
ICON SLOT - Estilização do ícone
|
|
4826
|
+
============================================ */
|
|
4827
|
+
|
|
4828
|
+
voa-tooltip::part(icon-slot) {
|
|
4829
|
+
display: flex;
|
|
4830
|
+
align-items: center;
|
|
4831
|
+
justify-content: center;
|
|
4832
|
+
flex-shrink: 0;
|
|
4833
|
+
}
|
|
4834
|
+
|
|
4835
|
+
voa-tooltip::part(icon-slot) ::slotted(*) {
|
|
4836
|
+
width: 16px;
|
|
4837
|
+
height: 16px;
|
|
4838
|
+
flex-shrink: 0;
|
|
4839
|
+
}
|