@revolist/ui 0.0.0-stage → 4.0.1-rc
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/OWNERSHIP.md +123 -0
- package/README.md +344 -2
- package/_button.scss +75 -0
- package/_chunks/calendar-BsDxCYhI.js +248 -0
- package/_chunks/cell-visuals-E-2oEKHg.js +264 -0
- package/_chunks/chart-frame-BvxbmEU9.js +126 -0
- package/_chunks/chevron-down-GbplLa6s.js +4 -0
- package/_chunks/chevron-left-D0nc4Z5S.js +4 -0
- package/_chunks/chevron-right-sxHQMSkq.js +4 -0
- package/_chunks/chevron-up-BLuNMPDn.js +4 -0
- package/_chunks/choice-chips-0HfOnK_4.js +110 -0
- package/_chunks/color-palette-BmZ7kH9R.js +94 -0
- package/_chunks/color-picker-BRv-__AM.js +138 -0
- package/_chunks/component-D4PH5UZT.js +859 -0
- package/_chunks/component-metadata-BENbgTjU.js +202 -0
- package/_chunks/control-tooltip-BCNzQCXE.js +100 -0
- package/_chunks/controller-CmLo-Ajc.js +392 -0
- package/_chunks/controls-NEL5tDaz.js +615 -0
- package/_chunks/date-control-CYCkb1aQ.js +86 -0
- package/_chunks/date-time-DjucJmbc.js +769 -0
- package/_chunks/delete-button-DnpmDNEJ.js +18 -0
- package/_chunks/dialog.parts-Dt3KinUz.js +134 -0
- package/_chunks/dropdown-CkGQBm1Q.js +357 -0
- package/_chunks/duration-BCaktcvz.js +270 -0
- package/_chunks/editor-commit-D6Rf5rGz.js +12 -0
- package/_chunks/editor-popup-B7fu_A_T.js +81 -0
- package/_chunks/framework-mount-BKIOsvY-.js +54 -0
- package/_chunks/icons-Ci5mADVc.js +13 -0
- package/_chunks/iso-B0YHBK7m.js +40 -0
- package/_chunks/model-mPO2tG2f.js +120 -0
- package/_chunks/mount-0-8opf1j.js +90 -0
- package/_chunks/native.view-8q_nwQ7x.js +32 -0
- package/_chunks/number-input-NnH57J4j.js +242 -0
- package/_chunks/picker-oazJ7sO_.js +121 -0
- package/_chunks/rating-choice-CWAsNQNS.js +27 -0
- package/_chunks/reorder-list-BV3kZXso.js +59 -0
- package/_chunks/request-trail-D0oVzdRd.js +347 -0
- package/_chunks/rich-text-2Rla349o.js +477 -0
- package/_chunks/xmark-DD_PBvZI.js +4 -0
- package/_dialog.scss +327 -0
- package/_form.scss +125 -0
- package/_legend.scss +36 -0
- package/_shared/chart-utils/colors.d.ts +6 -0
- package/_shared/chart-utils/conditional-rule.d.ts +8 -0
- package/_shared/chart-utils/csv.d.ts +5 -0
- package/_shared/chart-utils/tooltip-owner.d.ts +4 -0
- package/_shared/data-query/binding.d.ts +30 -0
- package/_shared/data-query/blocks.d.ts +30 -0
- package/_shared/data-query/commands.d.ts +47 -0
- package/_shared/data-query/contracts.d.ts +106 -0
- package/_shared/data-query/cursor-reader.d.ts +25 -0
- package/_shared/data-query/direct-binding.d.ts +3 -0
- package/_shared/data-query/index.d.ts +23 -0
- package/_shared/data-query/infinite-binding.d.ts +18 -0
- package/_shared/data-query/keys.d.ts +9 -0
- package/_shared/data-query/limiter.d.ts +12 -0
- package/_shared/data-query/load-options.d.ts +25 -0
- package/_shared/data-query/materialize.d.ts +2 -0
- package/_shared/data-query/policy.d.ts +14 -0
- package/_shared/data-query/provider-queries.d.ts +22 -0
- package/_shared/data-query/reader.d.ts +23 -0
- package/_shared/data-query/remote-load.d.ts +7 -0
- package/_shared/data-query/source.d.ts +40 -0
- package/_shared/dates/analysis-calendar.d.ts +8 -0
- package/_shared/dates/calendar-range.d.ts +18 -0
- package/_shared/dates/calendar-tick-label.d.ts +6 -0
- package/_shared/dates/calendar-ticks.d.ts +10 -0
- package/_shared/dates/calendars.d.ts +133 -0
- package/_shared/dates/civil-time.d.ts +45 -0
- package/_shared/dates/coercion.d.ts +2 -0
- package/_shared/dates/date-bucket.d.ts +40 -0
- package/_shared/dates/date-controls.d.ts +11 -0
- package/_shared/dates/date-entry.d.ts +12 -0
- package/_shared/dates/date-math.d.ts +90 -0
- package/_shared/dates/display-calendar.d.ts +15 -0
- package/_shared/dates/display.d.ts +16 -0
- package/_shared/dates/duration-control.d.ts +15 -0
- package/_shared/dates/duration.d.ts +69 -0
- package/_shared/dates/index.d.ts +27 -0
- package/_shared/dates/iso.d.ts +60 -0
- package/_shared/dates/local-calendar.d.ts +6 -0
- package/_shared/dates/relative-window.d.ts +35 -0
- package/_shared/dates/sequence.d.ts +72 -0
- package/_shared/dates/session-calendar.d.ts +19 -0
- package/_shared/dates/spreadsheet-date.d.ts +54 -0
- package/_shared/dates/temporal-controls.d.ts +23 -0
- package/_shared/dates/temporal-value.d.ts +17 -0
- package/_shared/dates/time-of-day.d.ts +82 -0
- package/_shared/dates/time-selection.d.ts +21 -0
- package/_shared/dates/timeline.d.ts +28 -0
- package/_shared/dates/working-days.d.ts +54 -0
- package/_shared/dates/zoned-calendar-range.d.ts +12 -0
- package/_variables.scss +51 -0
- package/activity-message.d.ts +12 -0
- package/activity-message.js +40 -0
- package/ai/_style.scss +252 -0
- package/ai/components.d.ts +59 -0
- package/ai/index.d.ts +5 -0
- package/ai/index.js +3 -0
- package/ai/mount.d.ts +33 -0
- package/ai/request-trail.d.ts +26 -0
- package/ai/translation-context.d.ts +7 -0
- package/ai/translations.d.ts +4 -0
- package/alert-native.d.ts +8 -0
- package/alert.d.ts +12 -0
- package/angular/angular-control.d.ts +10 -0
- package/angular/angular-control.js +31 -0
- package/angular/angular.d.ts +44 -0
- package/angular/angular.js +149 -0
- package/assignee/assignee.scss +104 -0
- package/assignee/field.d.ts +13 -0
- package/assignee/index.d.ts +5 -0
- package/assignee/index.js +212 -0
- package/assignee/layout.d.ts +9 -0
- package/assignee/model.d.ts +17 -0
- package/assignee/picker.d.ts +3 -0
- package/assignee/types.d.ts +45 -0
- package/avatar/avatar.style.scss +65 -0
- package/avatar/index.d.ts +2 -0
- package/avatar/index.js +68 -0
- package/avatar/index.view.d.ts +25 -0
- package/badge.d.ts +7 -0
- package/badge.js +6 -0
- package/brush-range/_brush-range.scss +49 -0
- package/brush-range/component.d.ts +17 -0
- package/brush-range/component.js +52 -0
- package/buttons/delete-button.d.ts +11 -0
- package/buttons/delete-button.js +1 -0
- package/buttons/delete-button.style.scss +14 -0
- package/buttons/index.d.ts +3 -0
- package/buttons/remove-button.d.ts +8 -0
- package/buttons/remove-button.js +11 -0
- package/buttons/remove-button.style.scss +10 -0
- package/buttons/svg-button.d.ts +18 -0
- package/buttons/svg-button.js +64 -0
- package/calendar/_calendar.scss +376 -0
- package/calendar/calendar.d.ts +3 -0
- package/calendar/calendar.js +1 -0
- package/calendar/caption.d.ts +14 -0
- package/calendar/day.d.ts +27 -0
- package/calendar/day.js +43 -0
- package/calendar/header.d.ts +25 -0
- package/calendar/header.js +61 -0
- package/calendar/index.d.ts +10 -0
- package/calendar/index.js +9 -0
- package/calendar/model.d.ts +11 -0
- package/calendar/model.js +1 -0
- package/calendar/month-grid.d.ts +29 -0
- package/calendar/month-grid.js +56 -0
- package/calendar/picker.d.ts +40 -0
- package/calendar/translations.d.ts +3 -0
- package/calendar/translations.js +15 -0
- package/calendar/types.d.ts +122 -0
- package/calendar/types.js +0 -0
- package/calendar/year-grid.d.ts +14 -0
- package/calendar/year-grid.js +33 -0
- package/cell-input.d.ts +9 -0
- package/cell-input.js +14 -0
- package/cell-input.scss +19 -0
- package/cell-visuals/badge.style.scss +42 -0
- package/cell-visuals/bar-chart.style.scss +43 -0
- package/cell-visuals/change.style.css +46 -0
- package/cell-visuals/column-type.style.css +14 -0
- package/cell-visuals/heatmap.d.ts +11 -0
- package/cell-visuals/heatmap.style.css +10 -0
- package/cell-visuals/index.d.ts +6 -0
- package/cell-visuals/index.js +1 -0
- package/cell-visuals/mini-bars.d.ts +8 -0
- package/cell-visuals/pie-chart.style.css +4 -0
- package/cell-visuals/pie.d.ts +11 -0
- package/cell-visuals/presentation.d.ts +44 -0
- package/cell-visuals/progress-line-value.renderer.style.scss +50 -0
- package/cell-visuals/progress-line.style.scss +32 -0
- package/cell-visuals/sparkline.d.ts +8 -0
- package/cell-visuals/sparkline.style.scss +35 -0
- package/cell-visuals/styles.scss +13 -0
- package/cell-visuals/summary-aggregate.style.css +4 -0
- package/cell-visuals/summary-percentage.style.css +12 -0
- package/cell-visuals/thumbs.style.css +3 -0
- package/cell-visuals/timeline.d.ts +30 -0
- package/cell-visuals/timeline.style.css +66 -0
- package/cell-visuals/types.d.ts +2 -0
- package/checkbox/_layout.scss +8 -0
- package/checkbox/checkbox.scss +105 -0
- package/checkbox/index.d.ts +32 -0
- package/checkbox/index.js +33 -0
- package/choice-chips/index.d.ts +44 -0
- package/choice-chips/index.js +1 -0
- package/color-palette/built-in-palettes.d.ts +9 -0
- package/color-palette/built-in-palettes.js +19 -0
- package/color-palette/chart-palettes.d.ts +95 -0
- package/color-palette/chart-palettes.js +74 -0
- package/color-palette/color-model.d.ts +3 -0
- package/color-palette/color-palette.d.ts +15 -0
- package/color-palette/color-palette.js +3 -0
- package/color-palette/color-palette.style.scss +267 -0
- package/color-palette/color-picker.constants.d.ts +2 -0
- package/color-palette/color-picker.constants.js +5 -0
- package/color-palette/color-picker.d.ts +16 -0
- package/color-palette/color-picker.id.d.ts +2 -0
- package/color-palette/color-picker.id.js +1 -0
- package/color-palette/color-picker.js +3 -0
- package/color-palette/color-picker.style.scss +195 -0
- package/color-palette/common-palettes.d.ts +741 -0
- package/color-palette/common-palettes.js +386 -0
- package/color-palette/gantt-palettes.d.ts +419 -0
- package/color-palette/gantt-palettes.js +184 -0
- package/color-palette/native.d.ts +2 -0
- package/color-palette/native.view.d.ts +15 -0
- package/color-palette/palette.d.ts +7 -0
- package/color-palette/palette.js +98 -0
- package/color-palette/pivot-palettes.d.ts +43 -0
- package/color-palette/pivot-palettes.js +41 -0
- package/color-palette/platform-palettes.d.ts +40 -0
- package/color-palette/platform-palettes.js +29 -0
- package/color-palette/pro-palettes.d.ts +403 -0
- package/color-palette/pro-palettes.js +269 -0
- package/color-palette/scheduler-palettes.d.ts +572 -0
- package/color-palette/scheduler-palettes.js +255 -0
- package/component-catalog.d.ts +209 -0
- package/component-metadata.d.ts +17 -0
- package/control-attributes.d.ts +5 -0
- package/control-attributes.js +23 -0
- package/control-presentation.d.ts +2 -0
- package/control-presentation.js +36 -0
- package/control-presentation.view.d.ts +8 -0
- package/controls.d.ts +171 -0
- package/controls.js +3 -0
- package/core/anchored-popover.d.ts +11 -0
- package/core/anchored-popover.js +12 -0
- package/core/control-id.d.ts +2 -0
- package/core/control-id.js +6 -0
- package/core/editor-commit.d.ts +4 -0
- package/core/editor-popup-position.d.ts +11 -0
- package/core/editor-popup.d.ts +13 -0
- package/core/editor-popup.js +1 -0
- package/core/editor-popup.scss +35 -0
- package/core/motion.d.ts +8 -0
- package/core/motion.js +46 -0
- package/core/top-layer-popup.d.ts +9 -0
- package/core/top-layer-popup.js +23 -0
- package/date-time/attach.d.ts +3 -0
- package/date-time/date-control.d.ts +20 -0
- package/date-time/field.d.ts +11 -0
- package/date-time/index.d.ts +5 -0
- package/date-time/index.js +1 -0
- package/date-time/picker.d.ts +2 -0
- package/date-time/style.scss +115 -0
- package/date-time/time-control.d.ts +11 -0
- package/date-time/time-selection.d.ts +15 -0
- package/date-time/types.d.ts +74 -0
- package/date-time/validation.d.ts +8 -0
- package/date-time/value.d.ts +10 -0
- package/date-time/value.scss +30 -0
- package/dialog/dialog-action-footer.d.ts +2 -0
- package/dialog/dialog-action-footer.view.d.ts +20 -0
- package/dialog/dialog.dom.d.ts +2 -0
- package/dialog/dialog.dom.js +92 -0
- package/dialog/dialog.dom.view.d.ts +15 -0
- package/dialog/dialog.drag.d.ts +10 -0
- package/dialog/dialog.drag.js +72 -0
- package/dialog/dialog.parts.d.ts +62 -0
- package/dialog/dialog.parts.js +1 -0
- package/dialog/dialog.preact.d.ts +10 -0
- package/dialog/dialog.preact.js +18 -0
- package/dialog/dialog.types.d.ts +24 -0
- package/dialog/dialog.types.js +0 -0
- package/distribution-chart/_distribution-chart.scss +196 -0
- package/distribution-chart/area-chart.d.ts +4 -0
- package/distribution-chart/area-chart.js +54 -0
- package/distribution-chart/bar-chart.d.ts +5 -0
- package/distribution-chart/bar-chart.js +17 -0
- package/distribution-chart/chart-frame.d.ts +16 -0
- package/distribution-chart/geometry.d.ts +17 -0
- package/distribution-chart/index.d.ts +8 -0
- package/distribution-chart/index.js +10 -0
- package/distribution-chart/line-chart.d.ts +5 -0
- package/distribution-chart/line-chart.js +22 -0
- package/distribution-chart/types.d.ts +32 -0
- package/dropdown/content.d.ts +42 -0
- package/dropdown/content.js +141 -0
- package/dropdown/dropdown.service.d.ts +19 -0
- package/dropdown/dropdown.service.js +105 -0
- package/dropdown/dropdown.types.d.ts +114 -0
- package/dropdown/dropdown.types.js +0 -0
- package/dropdown/editor-dropdown.style.scss +308 -0
- package/dropdown/index.d.ts +16 -0
- package/dropdown/index.js +4 -0
- package/dropdown/lookup-field.d.ts +29 -0
- package/dropdown/lookup-field.js +64 -0
- package/dropdown/popup.d.ts +27 -0
- package/dropdown/popup.js +140 -0
- package/dropdown/remote-hook.d.ts +23 -0
- package/dropdown/remote.d.ts +74 -0
- package/duration/controls.d.ts +13 -0
- package/duration/index.d.ts +45 -0
- package/duration/index.js +1 -0
- package/duration/style.scss +33 -0
- package/editor-actions.d.ts +20 -0
- package/editor-actions.js +35 -0
- package/editor-layout/index.d.ts +49 -0
- package/editor-layout/index.js +84 -0
- package/editor-layout/style.scss +84 -0
- package/field-configurator.d.ts +89 -0
- package/field-configurator.js +170 -0
- package/field-reorder.d.ts +9 -0
- package/field-reorder.hook.d.ts +53 -0
- package/field-reorder.hook.js +146 -0
- package/field-reorder.js +19 -0
- package/filter/filters/slider/_single-slider.scss +45 -0
- package/filter/filters/slider/_slider.scss +132 -0
- package/filter/filters/slider/component.d.ts +4 -0
- package/filter/filters/slider/component.js +50 -0
- package/filter/filters/slider/control.d.ts +8 -0
- package/filter/filters/slider/control.js +58 -0
- package/filter/filters/slider/inputs.d.ts +8 -0
- package/filter/filters/slider/inputs.js +45 -0
- package/filter/filters/slider/logic.d.ts +54 -0
- package/filter/filters/slider/logic.js +57 -0
- package/filter/filters/slider/preact.d.ts +3 -0
- package/filter/filters/slider/preact.js +8 -0
- package/filter/filters/slider/runtime.d.ts +45 -0
- package/filter/filters/slider/runtime.js +63 -0
- package/filter/filters/slider/single.d.ts +33 -0
- package/filter/filters/slider/single.js +63 -0
- package/filter/filters/slider/types.d.ts +61 -0
- package/filter/filters/slider/types.js +0 -0
- package/filter-badge.d.ts +12 -0
- package/filter-badge.js +35 -0
- package/filter-controls.d.ts +22 -0
- package/filter-controls.js +46 -0
- package/form-controls/index.d.ts +2 -0
- package/form-controls/index.js +39 -0
- package/form-controls/index.view.d.ts +12 -0
- package/form-controls/presentation.d.ts +37 -0
- package/form-controls/presentation.js +99 -0
- package/formatting/comparison-preview.d.ts +15 -0
- package/formatting/control-tooltip.d.ts +27 -0
- package/formatting/icon-controls.d.ts +18 -0
- package/formatting/index.d.ts +5 -0
- package/formatting/index.js +226 -0
- package/formatting/inspector-section.d.ts +9 -0
- package/formatting/styles.scss +281 -0
- package/formatting/typography-controls.d.ts +26 -0
- package/framework-mount.d.ts +15 -0
- package/framework.d.ts +3 -0
- package/framework.js +230 -0
- package/html-controls.d.ts +4 -0
- package/html-controls.js +24 -0
- package/icons/cancel.svg +1 -0
- package/icons/drawing-tools.d.ts +9 -0
- package/icons/icon.d.ts +7 -0
- package/icons/icon.js +12 -0
- package/icons/index.d.ts +2 -0
- package/icons/pagination.d.ts +6 -0
- package/legend.d.ts +17 -0
- package/legend.js +24 -0
- package/masked-input/edit.d.ts +22 -0
- package/masked-input/index.d.ts +10 -0
- package/masked-input/index.js +302 -0
- package/masked-input/model.d.ts +38 -0
- package/masked-input/style.scss +18 -0
- package/native-control.d.ts +28 -0
- package/native-control.js +26 -0
- package/native-controls.d.ts +2 -0
- package/native-controls.view.d.ts +54 -0
- package/native-styles.css +1 -0
- package/native-styles.scss +18 -0
- package/native.d.ts +29 -0
- package/native.js +77 -0
- package/number-input/index.d.ts +12 -0
- package/number-input/index.js +1 -0
- package/number-input/model.d.ts +43 -0
- package/number-input/style.scss +18 -0
- package/package.json +748 -3
- package/pagination.d.ts +53 -0
- package/pagination.js +160 -0
- package/pdf-viewer/component.d.ts +24 -0
- package/pdf-viewer/controller.d.ts +57 -0
- package/pdf-viewer/controller.js +1 -0
- package/pdf-viewer/header.d.ts +9 -0
- package/pdf-viewer/icons.d.ts +16 -0
- package/pdf-viewer/index.d.ts +9 -0
- package/pdf-viewer/index.js +16 -0
- package/pdf-viewer/model.d.ts +12 -0
- package/pdf-viewer/print.d.ts +3 -0
- package/pdf-viewer/runtime.d.ts +89 -0
- package/pdf-viewer/search-bar.d.ts +12 -0
- package/pdf-viewer/status.d.ts +11 -0
- package/pdf-viewer/style.scss +80 -0
- package/pdf-viewer/surfaces.view.d.ts +6 -0
- package/pdf-viewer/toolbar-options.d.ts +23 -0
- package/pdf-viewer/toolbar.d.ts +18 -0
- package/pdf-viewer/translations.d.ts +46 -0
- package/pdf-viewer/types.d.ts +38 -0
- package/pickers.d.ts +66 -0
- package/preact-mount.d.ts +8 -0
- package/preact-mount.js +42 -0
- package/preact.d.ts +53 -0
- package/preact.js +64 -0
- package/progress/_bar.scss +41 -0
- package/progress/_circular.scss +52 -0
- package/progress/bar.d.ts +12 -0
- package/progress/bar.js +21 -0
- package/progress/circular.d.ts +7 -0
- package/progress/circular.js +17 -0
- package/progress/range.d.ts +7 -0
- package/progress/range.js +15 -0
- package/rating-choice.d.ts +11 -0
- package/rating-choice.js +1 -0
- package/react-adapter.d.ts +21 -0
- package/react-control.d.ts +5 -0
- package/react-control.js +17 -0
- package/react-native-select.d.ts +6 -0
- package/react.d.ts +182 -0
- package/react.js +139 -0
- package/reorder-list.d.ts +20 -0
- package/reorder-list.js +1 -0
- package/reorder-list.scss +42 -0
- package/resource-picker/index.d.ts +3 -0
- package/resource-picker/index.js +3 -0
- package/resource-picker/resource-picker-avatar.d.ts +15 -0
- package/resource-picker/resource-picker-avatar.js +56 -0
- package/resource-picker/resource-picker-option.d.ts +19 -0
- package/resource-picker/resource-picker-option.js +41 -0
- package/resource-picker/resource-picker-popup.d.ts +10 -0
- package/resource-picker/resource-picker-popup.js +18 -0
- package/resource-picker/resource-picker.d.ts +3 -0
- package/resource-picker/resource-picker.js +201 -0
- package/resource-picker/resource-picker.scss +368 -0
- package/resource-picker/resource-picker.types.d.ts +53 -0
- package/resource-picker/resource-picker.types.js +0 -0
- package/resource-picker/resource-picker.utils.d.ts +5 -0
- package/resource-picker/resource-picker.utils.js +15 -0
- package/rich-text/engine.d.ts +21 -0
- package/rich-text/index.d.ts +15 -0
- package/rich-text/index.js +1 -0
- package/rich-text/model.d.ts +3 -0
- package/rich-text/render-model.d.ts +9 -0
- package/rich-text/style.scss +126 -0
- package/rich-text/syntax.d.ts +2 -0
- package/rich-text/toolbar.d.ts +9 -0
- package/rich-text/translations.d.ts +40 -0
- package/search-input/index.d.ts +26 -0
- package/search-input/index.js +50 -0
- package/search-input/native.d.ts +2 -0
- package/search-input/native.view.d.ts +21 -0
- package/segmented-switch/index.d.ts +47 -0
- package/segmented-switch/index.js +60 -0
- package/selection-list.d.ts +2 -0
- package/selection-list.js +1 -0
- package/status-feedback/badge.d.ts +3 -0
- package/status-feedback/badge.js +10 -0
- package/status-feedback/exit-snapshot.d.ts +2 -0
- package/status-feedback/exit-snapshot.js +39 -0
- package/status-feedback/header.d.ts +2 -0
- package/status-feedback/header.js +58 -0
- package/status-feedback/icons.d.ts +2 -0
- package/status-feedback/icons.js +1 -0
- package/status-feedback/index.d.ts +3 -0
- package/status-feedback/index.js +4 -0
- package/status-feedback/item.d.ts +2 -0
- package/status-feedback/item.js +36 -0
- package/status-feedback/motion.d.ts +2 -0
- package/status-feedback/motion.js +18 -0
- package/status-feedback/placement.d.ts +15 -0
- package/status-feedback/placement.js +9 -0
- package/status-feedback/popover.d.ts +34 -0
- package/status-feedback/popover.js +83 -0
- package/status-feedback/render.d.ts +7 -0
- package/status-feedback/render.js +44 -0
- package/status-feedback/status-feedback.scss +190 -0
- package/status-feedback/types.d.ts +51 -0
- package/status-feedback/types.js +0 -0
- package/styles/_activity-message.scss +46 -0
- package/styles/_alert.scss +35 -0
- package/styles/_built-in-palettes.scss +918 -0
- package/styles/_compositions.scss +132 -0
- package/styles/_control.scss +28 -0
- package/styles/_disclosure.scss +54 -0
- package/styles/_editor-counter.scss +68 -0
- package/styles/_editor-slider.scss +58 -0
- package/styles/_field-configurator.scss +290 -0
- package/styles/_filter-badge.scss +47 -0
- package/styles/_filter-controls.scss +119 -0
- package/styles/_icon-action.scss +28 -0
- package/styles/_loading.scss +20 -0
- package/styles/_motion.scss +58 -0
- package/styles/_palette.scss +69 -0
- package/styles/_primitives.scss +963 -0
- package/styles/_theme.scss +163 -0
- package/styles/_thresholds.scss +28 -0
- package/styles/_time-grid.scss +94 -0
- package/styles/_tokens.scss +22 -0
- package/styles/color-roles.d.ts +130 -0
- package/styles/color-roles.js +165 -0
- package/styles/legacy-pagination.css +112 -0
- package/styles/legacy-rating.css +49 -0
- package/styles.css +1 -0
- package/styles.scss +46 -0
- package/surfaces.d.ts +2 -0
- package/surfaces.js +198 -0
- package/surfaces.view.d.ts +63 -0
- package/svelte/UiComponent.server.js +109 -0
- package/svelte/UiComponent.svelte +70 -0
- package/svelte/UiComponent.svelte.d.ts +4 -0
- package/svelte-control.d.ts +5 -0
- package/svelte-control.js +18 -0
- package/svelte-props.d.ts +13 -0
- package/svelte-server.js +2 -0
- package/svelte-source.js +2 -0
- package/svelte.d.ts +9 -0
- package/svelte.js +93 -0
- package/switch/index.d.ts +14 -0
- package/switch/index.js +26 -0
- package/time-grid.d.ts +44 -0
- package/time-grid.js +114 -0
- package/timeline-track/_style.scss +121 -0
- package/timeline-track/component.d.ts +23 -0
- package/timeline-track/index.d.ts +2 -0
- package/timeline-track/index.js +139 -0
- package/timeline-track/model.d.ts +17 -0
- package/timeline-track/model.js +38 -0
- package/ui.css +2 -0
- package/vue-adapter.d.ts +36 -0
- package/vue-badge.d.ts +4 -0
- package/vue-badge.js +7 -0
- package/vue-control.d.ts +6 -0
- package/vue-control.js +17 -0
- package/vue-native-select.d.ts +9 -0
- package/vue-segmented-switch.d.ts +4 -0
- package/vue-segmented-switch.js +35 -0
- package/vue.d.ts +952 -0
- package/vue.js +320 -0
package/OWNERSHIP.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Shared UI ownership
|
|
2
|
+
|
|
3
|
+
`@revolist/ui` is the implementation owner for reusable product controls. Pro's
|
|
4
|
+
existing exports and leaf modules are compatibility adapters. Product code owns
|
|
5
|
+
values, validation, commands, persistence and domain layout.
|
|
6
|
+
|
|
7
|
+
AI prompt, suggestions, applied-request trail, action status, result and assistant compositions live in
|
|
8
|
+
`src/ai/`; `src/ai/_style.scss` owns their token-based presentation. Pro's AI
|
|
9
|
+
adapter owns interpretation, field policy, view commands, query execution and
|
|
10
|
+
view snapshots. Framework adapters and native mounting reuse the same TSX.
|
|
11
|
+
|
|
12
|
+
| Component family | Implementation owner under `src/` | Style owner under `src/` |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| Native button, input, select, textarea, summary | `control-presentation.view.tsx`; Preact `native-control.tsx` | `styles/_primitives.scss`, `styles/_control.scss`, `_form.scss` |
|
|
15
|
+
| Button variants, icon button, toggle, group | `controls.tsx`, `buttons/` | `styles/_primitives.scss` |
|
|
16
|
+
| Icon | `icons/icon.tsx` | `styles/_primitives.scss` |
|
|
17
|
+
| Checkbox | `checkbox/index.ts` | `checkbox/checkbox.scss` |
|
|
18
|
+
| Switch | `switch/index.tsx` | `styles/_primitives.scss` |
|
|
19
|
+
| Radio group | `controls.tsx` | `_form.scss`, `styles/_compositions.scss` |
|
|
20
|
+
| Choice chips, segmented control, tabs | `choice-chips/`, `segmented-switch/`; semantic exports in `controls.tsx` | `styles/_primitives.scss` |
|
|
21
|
+
| Search | `search-input/native.view.tsx`; Preact `search-input/index.tsx` | `styles/_primitives.scss` |
|
|
22
|
+
| Number/date/time inputs, stepper | `controls.tsx`; grid scalar/counter adapters in `native-controls.view.tsx` | `_form.scss`, `styles/_editor-counter.scss` |
|
|
23
|
+
| Listbox, panes, split layout | `editor-layout/index.tsx`; neutral aliases in `controls.tsx` | `editor-layout/style.scss` |
|
|
24
|
+
| Form field, hint, error, section, disclosure | `form-controls/`, `controls.tsx` | `_form.scss`, `styles/_compositions.scss` |
|
|
25
|
+
| Chips | `form-controls/presentation.tsx` | `styles/_primitives.scss` |
|
|
26
|
+
| Scalar/range sliders | `filter/filters/slider/`, `native-controls.view.tsx` | `filter/filters/slider/_slider.scss`, `styles/_editor-slider.scss` |
|
|
27
|
+
| Calendar and date pickers | `calendar/`, `pickers.tsx` | `calendar/_calendar.scss`, `styles/_compositions.scss` |
|
|
28
|
+
| Dropdown, combobox, multi-select | `dropdown/`; compositions in `pickers.tsx` | `dropdown/editor-dropdown.style.scss`, `styles/_compositions.scss` |
|
|
29
|
+
| Color palette/picker | `color-palette/` | `color-palette/*.scss` |
|
|
30
|
+
| Resource picker, avatar | `resource-picker/`, `avatar/` | `resource-picker/resource-picker.scss`, `avatar/avatar.style.scss` |
|
|
31
|
+
| Dialog, popover, tooltip, menu, resize | `surfaces.view.tsx`, `dialog/`, `core/`; Preact compositions in `controls.tsx` and `pickers.tsx` | `_dialog.scss`, `styles/_primitives.scss`, `styles/_compositions.scss` |
|
|
32
|
+
| Toolbar, panel, empty state, alerts | `controls.tsx` | `styles/_compositions.scss` |
|
|
33
|
+
| Status feedback and badges | `status-feedback/`, `controls.tsx` | `status-feedback/status-feedback.scss`, `styles/_primitives.scss` |
|
|
34
|
+
| Loading | `native-controls.view.tsx`, `controls.tsx` | `styles/_loading.scss`, `styles/_compositions.scss` |
|
|
35
|
+
| Pagination, progress, rating | `pagination.ts`, `progress/`, `native-controls.view.tsx`, `controls.tsx` | `progress/_bar.scss`, `progress/_circular.scss`, `styles/legacy-rating.css`, `styles/legacy-pagination.css`, `styles/_compositions.scss` |
|
|
36
|
+
| BarChart, LineChart, AreaChart; distribution adapter and brush range | `distribution-chart/bar-chart.tsx`, `line-chart.tsx`, `area-chart.tsx`; shared `chart-frame.tsx` and `geometry.ts`; `brush-range/` | `distribution-chart/_distribution-chart.scss`, `brush-range/_brush-range.scss` |
|
|
37
|
+
| Option rows, legend, inline fields | `filter-controls.tsx` | `styles/_filter-controls.scss` |
|
|
38
|
+
| Weekly time grid and keyboard/paint gesture lifecycle | `time-grid.tsx` | `styles/_time-grid.scss` |
|
|
39
|
+
| Highlighted text input and scroll synchronization | `filter-controls.tsx` | `styles/_filter-controls.scss` |
|
|
40
|
+
| Theme tokens | `styles/_theme.scss` | `styles/_tokens.scss` installs light/dark scopes |
|
|
41
|
+
|
|
42
|
+
## Renderer and stylesheet contracts
|
|
43
|
+
|
|
44
|
+
- Preact products use `@revolist/ui/native-control` when they need transparent
|
|
45
|
+
native attributes, native input/change events, or DOM refs. Semantic
|
|
46
|
+
compositions come from `@revolist/ui/preact` or their leaf entry.
|
|
47
|
+
- RevoGrid/Stencil templates use `renderControl(h, tag, attributes, ...children)`
|
|
48
|
+
or `controlAttributes` with their existing JSX factory. They retain Core VNodes.
|
|
49
|
+
- Element-returning hosts use the Preact mount adapters `createControl` or `createSearchInput`. Set the input type at
|
|
50
|
+
creation. Preserve the shared class when adding product classes.
|
|
51
|
+
- Charts keeps its native renderer. It normalizes controls through
|
|
52
|
+
`controlAttributes` and installs `native-styles.scss?inline` inside its control
|
|
53
|
+
hosts. These styles are scoped and include no Preact or Pro runtime.
|
|
54
|
+
- Standalone product stylesheet entries include `@revolist/ui/styles.scss`.
|
|
55
|
+
Products customize `--rv-ui-*`, `--rv-control-*`, and `--rv-search-input-*`
|
|
56
|
+
variables. Legacy selector-based Pivot fields include the same `control.scss`
|
|
57
|
+
mixin. Feature styles own layout and documented variants, not a second base.
|
|
58
|
+
|
|
59
|
+
## Intentional product adapters
|
|
60
|
+
|
|
61
|
+
Working calendars, task/card/event forms, configurators, chart inspectors and
|
|
62
|
+
menus keep domain policy and data operations in their product. Large title
|
|
63
|
+
fields and toolbar layouts remain product compositions using shared primitives.
|
|
64
|
+
Grid cells, timeline event/task hit targets, dependency handles, card drag
|
|
65
|
+
surfaces, grid expansion and virtualization keep their product geometry.
|
|
66
|
+
`src/ownership.test.ts` records the explicit scene exceptions and rejects new
|
|
67
|
+
local primitive JSX/factories elsewhere. UI's native dependency boundary and
|
|
68
|
+
Charts' rendering boundary have separate assertions.
|
|
69
|
+
|
|
70
|
+
Changes to a shared owner need UI coverage and the affected product's existing
|
|
71
|
+
integration tests. Canonical suite selection is documented in `TESTING.md`.
|
|
72
|
+
|
|
73
|
+
History and export commands use UI's `SvgButton` (or `IconButton` convenience composition) for SVG, count badge and pointer/keyboard tooltip presentation. Element-returning adapters use `decorateIconAction`; Charts renders controls through Preact. Products supply localized labels, permissions, actions and history counts. `ToolbarGroup` groups commands with spacing; `ButtonGroup` remains the bordered choice composition. Both danger button variants use the same red outline presentation.
|
|
74
|
+
|
|
75
|
+
Structured filter adapters retain aggregation, matching, amount/date validation, timezone policy, preset meaning and commit transactions. UI receives explicit data and formatted labels. Expression parsing, syntax tokens, diagnostics and debounce remain in Pro; UI owns the highlighted input's geometry and scroll synchronization. TimeGrid owns keyboard focus and paint gesture cleanup; Pro expands visual buckets into selected hourly filter values. Legacy filter CSS classes remain adapter hooks, with theme aliases at the Pro boundary.
|
|
76
|
+
|
|
77
|
+
## Grid-backed filter compositions stay in Pro
|
|
78
|
+
|
|
79
|
+
Selection lists and their search/select-all composition are owned by
|
|
80
|
+
`packages/pro/plugins/filter/filters/selection/list/`. They render the existing
|
|
81
|
+
RevoGrid `SelectionGrid`, including virtualization, grouping, option columns and
|
|
82
|
+
selection transactions. They must not be replaced with a shared checkbox list.
|
|
83
|
+
Faceted-list composition also stays in Pro; it already used native rows before
|
|
84
|
+
this migration. Both consume UI primitives for checkbox, search and progress.
|
|
85
|
+
|
|
86
|
+
The independent UI gallery contains no imitation selection filter.
|
|
87
|
+
Statistical/date preset meaning, expression parsing and time-matrix bucket
|
|
88
|
+
conversion remain Pro policy; generic option rows, highlighted input geometry,
|
|
89
|
+
distribution rendering and time-grid gestures remain UI presentation.
|
|
90
|
+
|
|
91
|
+
BarChart and LineChart are independent compact visual components, exported through the Preact entry and `@revolist/ui/bar-chart` / `@revolist/ui/line-chart`. Each owns its series rendering. The shared chart frame owns keyboard focus and tooltips; DistributionChart only dispatches to the selected standalone chart. BrushRange composes that adapter with the existing range slider; Pro retains bins, matching, date semantics and filter commits.
|
|
92
|
+
|
|
93
|
+
### Field configurators
|
|
94
|
+
|
|
95
|
+
`src/field-configurator.tsx` owns field libraries, headings, lists, drag-ready rows, neutral items and icon/caption slots. `src/styles/_field-configurator.scss` owns presentation and UI-token fallbacks. Pivot configurator exports remain aliases; its SCSS mixin delegates to UI. Query rules, native policy inspection, field metadata icons, tooltips and grid drag/drop stay in Pivot. The gallery demonstrates these primitives independently.
|
|
96
|
+
|
|
97
|
+
Pivot configuration and chart query searchable fields both use `PivotDimensionsGrid` and Pro `TreeDataPlugin` in Pivot. The UI field library is a neutral disclosure/list shell, never a substitute for these grid-backed browsers.
|
|
98
|
+
|
|
99
|
+
Active filter badges use `filter-badge.tsx` (`FilterBadge` and `FilterBadgeInfoButton`) and `styles/_filter-badge.scss`. Pro owns filter state, localization, custom render values, slots and tooltip lifecycle; its old stylesheet is a compatibility import.
|
|
100
|
+
|
|
101
|
+
FilterBadge composes ChoiceChip; ChoiceChip owns optional info and close actions as siblings of the selection button. ChoiceChipInfoButton owns the common details action appearance.
|
|
102
|
+
|
|
103
|
+
Active filter badges in Pro, Audit History, Order Explorer, planning and Pivot compose shared Choice chips. Consumers retain filter state and layout only; chip shape, surfaces, font weight and actions belong to UI.
|
|
104
|
+
|
|
105
|
+
ChoiceChip, ChoiceChips options and FilterBadge accept optional `color`. UI owns colored selected text/border/tint; chip-badge filter descriptors only supply color values, labels and filter policy.
|
|
106
|
+
|
|
107
|
+
Link-style action buttons use `Button variant="link"` or `SvgButton variant="link"`. UI owns the borderless blue text, icon spacing, hover/focus and disabled presentation; grouped-filter TextIconButton is a compatibility adapter without local appearance CSS.
|
|
108
|
+
|
|
109
|
+
## Interactive timeline track
|
|
110
|
+
|
|
111
|
+
`src/timeline-track/` owns controlled bar rendering, selection, pointer capture/movement/resizing, keyboard edits, numeric geometry helpers and track styles. Pro's Timeline editor adapter retains draft validation, localization and commits; its existing model helper exports forward to the shared model. The read-only cell timeline renderer remains in `cell-visuals/timeline.ts`.
|
|
112
|
+
|
|
113
|
+
## Editable dialog composition
|
|
114
|
+
|
|
115
|
+
`dialog/dialog.parts.tsx` owns editable-name headers (including optional dialog caption), close controls and the standard action footer with start/end slots. `_dialog.scss` owns header insets, message separation and footer layout. Scheduler, Kanban and Gantt retain validation, permissions, translations and persistence, without local footer-button appearance overrides.
|
|
116
|
+
|
|
117
|
+
## Selection lists
|
|
118
|
+
|
|
119
|
+
`selection-list.ts` exposes the general Listbox/option/group API backed by `editor-layout/index.tsx` and its existing stylesheet. Optional icon/label/description content lives in the shared option owner. Format Cells and generic gallery lists use the same markup, keyboard handling and styles; formatter-specific IDs and data policy stay in Pro.
|
|
120
|
+
|
|
121
|
+
## Preact element construction
|
|
122
|
+
|
|
123
|
+
All shared UI markup is Preact TSX. Element-returning compatibility APIs mount the same TSX through `preact-mount.tsx`; they do not build parallel DOM trees. Lifecycle controllers may attach, position, focus and dispose rendered roots. Grid/Stencil VNode adapters retain the Core rendering contract. Charts controls use Preact through the same mount boundary; chart scene/export geometry remains scene-owned.
|
package/README.md
CHANGED
|
@@ -1,3 +1,345 @@
|
|
|
1
|
-
#
|
|
1
|
+
# RevoGrid shared UI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Shared controls for Grid Pro, Pivot, Charts, Gantt, Scheduler, Kanban and standalone examples. The workspace uses source exports; `pnpm pack:public` prepares an independently installable, ESM distribution with JavaScript, declarations, CSS and Angular partial-compilation metadata. Preparing the archive does not publish it to a registry. Public availability does not change the existing Commercial license.
|
|
4
|
+
|
|
5
|
+
## Entry points
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
// No grid or global browser state required at import time.
|
|
9
|
+
// Preact is the required shared rendering peer.
|
|
10
|
+
import {
|
|
11
|
+
DialogController,
|
|
12
|
+
PopoverController,
|
|
13
|
+
attachMenuKeyboard,
|
|
14
|
+
} from '@revolist/ui/native';
|
|
15
|
+
|
|
16
|
+
// Optional Preact rendering adapters.
|
|
17
|
+
import { Button, Switch, Calendar, DateRangePicker } from '@revolist/ui/preact';
|
|
18
|
+
|
|
19
|
+
// Import once in a product's styles entry.
|
|
20
|
+
import '@revolist/ui/styles.scss';
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The root entry is the native entry. `tokens.scss` exposes tokens separately. The distribution preserves the existing exported subpaths. Import only declared package exports; unexported implementation files are not an API.
|
|
24
|
+
|
|
25
|
+
## Inline badges
|
|
26
|
+
|
|
27
|
+
Use `Badge` from `@revolist/ui/preact` or `VueBadge` from
|
|
28
|
+
`@revolist/ui/vue-badge`. Both accept `variant="neutral"` for inactive counts,
|
|
29
|
+
`variant="accent"` for blue selected states, and `shape="pill"` (default) or
|
|
30
|
+
`shape="rounded"`. The default `solid` variant preserves existing badge tokens.
|
|
31
|
+
Vue renders the default slot and forwards native attributes and classes.
|
|
32
|
+
|
|
33
|
+
## Component catalog
|
|
34
|
+
|
|
35
|
+
| Family | Components |
|
|
36
|
+
| ----------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
37
|
+
| Actions | Button, IconButton, ToggleButton, ButtonGroup, Icon |
|
|
38
|
+
| Binary and choice | Checkbox, Switch, RadioGroup, ChoiceChips |
|
|
39
|
+
| Navigation | SegmentedControl, Tabs, TabPanel, Listbox, ListboxOption |
|
|
40
|
+
| Fields | TextInput, Textarea, SearchInput, NumberInput, NumberStepper, NativeSelect |
|
|
41
|
+
| Selection | Dropdown, Combobox, MultiSelect, Chip, RemovableChip, ResourcePicker |
|
|
42
|
+
| Numeric ranges | TimelineTrack, Slider, RangeSlider; native scalar-slider/counter adapters |
|
|
43
|
+
| Dates | Calendar and its header/day/month/year parts, DateInput, TimeInput, DateTimeInput, DatePicker, DateRangePicker |
|
|
44
|
+
| Appearance | ColorPalette, ColorPicker, Avatar |
|
|
45
|
+
| Forms | FormField, FieldHint, FieldError, FormSection, Disclosure, DisclosureSummary |
|
|
46
|
+
| Surfaces | Dialog, DialogHeader, DialogBody, DialogFooter, ConfirmDialog, Popover, Tooltip, Menu, MenuItem, MenuSeparator, Submenu |
|
|
47
|
+
| Composition | Toolbar, ToolbarGroup, ToolbarSeparator, SplitLayout, Pane, Panel, ResizeHandle |
|
|
48
|
+
| Feedback | Badge, CountBadge, StatusBadge, Alert, FeedbackPanel, Spinner, LoadingOverlay, EmptyState |
|
|
49
|
+
| Indicators | Pagination, ProgressBar, CircularProgress, Rating |
|
|
50
|
+
|
|
51
|
+
Native controllers own lifecycle, keyboard interaction, portal placement and cleanup. Preact adapters own rendered state, while product adapters own grid integration. Exported native rendering helpers accept the host's element factory so Charts can keep its existing DOM renderer.
|
|
52
|
+
|
|
53
|
+
See [OWNERSHIP.md](./OWNERSHIP.md) for implementation/style owners, renderer contracts and intentional product adapters.
|
|
54
|
+
|
|
55
|
+
## Ownership and compatibility
|
|
56
|
+
|
|
57
|
+
- UI does not import Core, Pro, or another product. Dates and working-calendar calculations stay in `@revolist/dates`.
|
|
58
|
+
- Existing Pro exports and leaf modules forward to the shared owner. Grid edit events, focus preservation, popup coordination, remote loading and cell/column types stay in Pro adapters.
|
|
59
|
+
- Task/card/event editors, working-calendar editors, Pivot configurators and chart inspectors remain product compositions.
|
|
60
|
+
- Controlled inputs receive values and callbacks. Date controls use civil date/native input strings; products retain timezone conversion, storage and validation policy.
|
|
61
|
+
- Sliders distinguish live input and commit callbacks. Popup/dialog handles have explicit teardown, and returned cleanup functions release listeners.
|
|
62
|
+
- `--rv-ui-*` variables define semantic surfaces, text, focus and control tokens. Existing classes and legacy feature variable overrides remain supported.
|
|
63
|
+
- Use the separate native entry in Charts. Importing the Preact barrel in Charts would violate the dependency boundary.
|
|
64
|
+
|
|
65
|
+
## Gallery and checks
|
|
66
|
+
|
|
67
|
+
The standalone gallery app lives in [`apps/ui-gallery`](../../apps/ui-gallery). Run `pnpm dev:ui` from the repository root, or `pnpm dev` from that app directory.
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
pnpm --filter @revolist/ui-gallery dev
|
|
71
|
+
pnpm --filter @revolist/ui-gallery build
|
|
72
|
+
pnpm --filter @revolist/ui lint
|
|
73
|
+
pnpm --filter @revolist/ui test
|
|
74
|
+
pnpm --filter @revolist/ui-gallery test:browser
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The gallery shows default, compact, disabled, selected, mixed, invalid, read-only, loading, light/dark and RTL examples. The Chromium suite uses the built gallery and covers keyboard controls, nested overlays, focus return, multiple picker instances and narrow layouts. CI runs UI unit tests in the remaining-package group and browser tests alongside the existing Chromium integration job.
|
|
78
|
+
|
|
79
|
+
Colocated owner tests cover extracted implementations. Pro keeps consumer integration tests for its event adapters and compatibility exports. The build tooling bundles UI declarations into each product's `_shared/ui` directory so published types do not depend on this private workspace package.
|
|
80
|
+
|
|
81
|
+
The gallery also demonstrates filter building blocks without a grid: distribution charts with range brushes, generic option rows, weekly time grids and legends, inline field groups and highlighted text inputs. Import these from the Preact entry; consuming products supply data, localized text and domain policy.
|
|
82
|
+
|
|
83
|
+
Grid-backed selection and filter policy belong to Pro.
|
|
84
|
+
|
|
85
|
+
Compact `BarChart`, `LineChart` and `AreaChart` render independently of brush controls or grid instances. Import them from `@revolist/ui/preact` or their leaf entries (`@revolist/ui/bar-chart`, `@revolist/ui/line-chart`, `@revolist/ui/area-chart`). They accept explicit `data`, `ariaLabel`, height, selection flags and tooltip content. `DistributionChart` preserves the existing type-switching contract; `BrushRange` remains the slider composition. The gallery includes separate bar and line cards.
|
|
86
|
+
|
|
87
|
+
Field configurators use `FieldLibrary`, `FieldLibraryList`, `FieldGroup`, `FieldGroupHeading`, `FieldList`, `FieldRow`, `FieldItem`, and `FieldContent` from `@revolist/ui/field-configurator` (also in the Preact entry). They provide native disclosure, row structure and slots, not field metadata or query policy. Pivot compatibility exports delegate here; Pivot owns search policy, axis assignment, ordering and selection state.
|
|
88
|
+
|
|
89
|
+
### Interactive timeline track
|
|
90
|
+
|
|
91
|
+
`TimelineTrack` from `@revolist/ui/timeline-track` (also exported through `preact`) renders controlled `{ id, event: { start, end, label? } }` rows. Supply a finite increasing `range`, optional selected ID and label callbacks, `onSelect`, and `onEventChange`. Event changes preserve extra event metadata. The component owns pointer movement, edge resizing, ArrowLeft/ArrowRight edits, selection presentation and range labels; consumers own draft validation, storage and commits. Import the common styles entry once. The Sliders gallery includes an interactive example.
|
|
92
|
+
|
|
93
|
+
### Editable dialogs and standard actions
|
|
94
|
+
|
|
95
|
+
Compose `EditableDialogHeader`, `DialogBody`, and `DialogActionFooter` inside `DialogForm`. These parts are exported from `@revolist/ui/dialog/dialog.parts` and `@revolist/ui/preact`; they preserve the consumer's native dialog lifecycle and form callbacks. Scheduler, Kanban and Gantt use this composition.
|
|
96
|
+
|
|
97
|
+
The header accepts `titleId`, controlled `title`/`inputProps`, an accessible `inputLabel`, optional dialog `name` and description, and a close callback/label. Use `inputProps={false}` for a static heading. Native disabled/readonly semantics pass through.
|
|
98
|
+
|
|
99
|
+
The footer shows standard Cancel and submit Save actions by default. `cancel`, `save`, `deleteAction`, and `reset` accept labels and native button attributes/callbacks; set any action to `false` to hide it. Delete and Reset are opt-in and default to `type="button"`, so they never accidentally submit. `start` and `end` accept custom content on each side; `children` adds validation or other content above the action panel. Product translations and permissions remain explicit. See the Dialogs and floating surfaces gallery example for all actions, custom slots and hidden defaults.
|
|
100
|
+
|
|
101
|
+
### Selection lists
|
|
102
|
+
|
|
103
|
+
`Listbox`, `ListboxOption`, and `ListboxGroup` are available from `@revolist/ui/selection-list` and the Preact entry. Options support `icon`, `label`, and `description` directly, or arbitrary children for custom content. Groups add visible headings and accessible group labels. List selection and ArrowUp/ArrowDown/Home/End handling share one owner, including disabled-option skipping. Plain text, rich and grouped variants are demonstrated together in the Selection list gallery example. Format Cells consumes this same option API; it has no separate selection-list implementation. Existing EditorList and content-wrapper imports remain compatible.
|
|
104
|
+
|
|
105
|
+
### Interface colors
|
|
106
|
+
|
|
107
|
+
See [Colors and usage](COLORS.md) for semantic roles, theming, and compatibility overrides. The gallery header links to the independent Colors page (`?page=colors`).
|
|
108
|
+
|
|
109
|
+
Built-in product defaults live in named `src/color-palette/*-palettes.ts` modules. The Colors page shows each palette's values, usage, and consumers. Products import purpose-specific constants or the generated `@revolist/ui/palettes.scss` lookup; run `pnpm --filter @revolist/ui generate:palettes` after changing definitions. `check:palettes` verifies the generated source is current.
|
|
110
|
+
|
|
111
|
+
## Accessibility
|
|
112
|
+
|
|
113
|
+
See [Accessibility review and integration requirements](ACCESSIBILITY.md) for tested coverage, remaining gaps, and consumer responsibilities. Automated gallery checks are part of the shared UI browser suite.
|
|
114
|
+
|
|
115
|
+
## Motion
|
|
116
|
+
|
|
117
|
+
See [Shared UI motion](MOTION.md) for the component review, timings, and disable policy. Add `data-rv-ui-motion="off"` to the document or a region to disable motion; OS reduced motion is always respected. The gallery includes a Motion selector.
|
|
118
|
+
|
|
119
|
+
### Busy buttons
|
|
120
|
+
|
|
121
|
+
`Button`, `IconButton`, `ToggleButton`, `SvgButton` and `ButtonControl` accept `busy?: boolean`. Set `busy` while an action is pending, then clear it when the action completes (including failure). A loading ring appears, the accessible name stays intact, and native disabling blocks clicks, keyboard activation and form submission. Busy buttons retain their normal variant colors; an explicit `disabled` prop still takes precedence visually and remains disabled after busy clears. The same option is supported by `createControl(document, 'button', { busy: true })`.
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
<Button variant="primary" busy={saving} onClick={save}>Save changes</Button>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The ring inherits the button text color. Motion Off (`data-rv-ui-motion="off"`) and `prefers-reduced-motion` keep the loading ring visible without spinning. Busy state is controlled by the caller; it does not start or finish an asynchronous task itself.
|
|
128
|
+
|
|
129
|
+
## Standalone framework controls
|
|
130
|
+
|
|
131
|
+
Import `@revolist/ui/styles.css` once for compiled standard styles. The public build bundles private date/chart utilities; customers do not need private workspace packages or a TypeScript/Sass source compiler. Preact is required by the shared rendering layer; React, Vue, Angular and Svelte are optional peers used only by their adapter subpaths.
|
|
132
|
+
|
|
133
|
+
```ts
|
|
134
|
+
import { createControl, applyControlPresentation } from '@revolist/ui';
|
|
135
|
+
import { ButtonControl, Input, Select, TextArea } from '@revolist/ui/react-control';
|
|
136
|
+
import { vRvControl } from '@revolist/ui/vue-control'; // <button v-rv-control>
|
|
137
|
+
import { UiControlDirective } from '@revolist/ui/angular-control'; // standalone imports; <button rvControl>
|
|
138
|
+
import { rvControl } from '@revolist/ui/svelte-control'; // <button use:rvControl>
|
|
139
|
+
import '@revolist/ui/styles.css';
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Each adapter preserves native elements, events, values and form bindings. React controls forward native refs. Vue and Angular directives and the Svelte action retain native refs and bindings. `applyControlPresentation(root)` handles existing static toolbar HTML; call it after replacing that HTML or changing a control type.
|
|
143
|
+
|
|
144
|
+
## Build and release preparation
|
|
145
|
+
|
|
146
|
+
Run `pnpm --dir packages/ui pack:public` from the monorepo, then `pnpm --dir packages/ui test:public`. The generated public package is `dist/`, and the archive is `artifacts/revolist-ui-<version>.tgz`. The workspace manifest intentionally remains private; the generated distribution manifest declares public access and contains no workspace dependencies.
|
|
147
|
+
|
|
148
|
+
Before publication, standalone repositories consume an identical archive in their own `vendor/` directory using relative `file:` dependencies and a lockfile generated against that real archive. These paths are portable with the cloned repository. Include its vendor archive when copying a starter out of that repository. After an authorized registry release, dependencies can switch to the published version and locks can be regenerated from the registry. Do not substitute unverified registry URLs or integrity values for the prepared archive.
|
|
149
|
+
|
|
150
|
+
The Publish NPM workflow includes UI in `all` releases and supports a standalone `ui` selection. It applies the release tag version, runs the public build and archive consumer checks, then signs and publishes the compiled `dist/` package to npm with public access using the `NPM_TOKEN` repository secret. Local build and preparation scripts do not publish. Once the release is available, demos can install `@revolist/ui` from npm with their required framework peers.
|
|
151
|
+
|
|
152
|
+
## Vue component wrappers
|
|
153
|
+
|
|
154
|
+
`@revolist/ui/vue` exposes Vue wrappers for the Preact component catalog and the
|
|
155
|
+
standalone number, mask, duration, temporal, assignee and Markdown editors.
|
|
156
|
+
These wrappers retain the existing Preact implementation and require both Vue
|
|
157
|
+
and Preact. Use `vue-control` for native HTML controls that only need presentation;
|
|
158
|
+
its runtime presentation helpers do not import Preact.
|
|
159
|
+
|
|
160
|
+
```vue
|
|
161
|
+
<script setup lang="ts">
|
|
162
|
+
import { ref } from 'vue';
|
|
163
|
+
import { Dropdown, DatePicker, Dialog } from '@revolist/ui/vue';
|
|
164
|
+
import '@revolist/ui/styles.css';
|
|
165
|
+
|
|
166
|
+
const status = ref('open');
|
|
167
|
+
const source = [
|
|
168
|
+
{ value: 'open', label: 'Open' },
|
|
169
|
+
{ value: 'closed', label: 'Closed' },
|
|
170
|
+
];
|
|
171
|
+
</script>
|
|
172
|
+
|
|
173
|
+
<template>
|
|
174
|
+
<Dropdown v-model="status" :source="source">
|
|
175
|
+
<template #option="{ option, selected }">
|
|
176
|
+
<strong>{{ option.label }}</strong>
|
|
177
|
+
<span v-if="selected"> Selected</span>
|
|
178
|
+
</template>
|
|
179
|
+
</Dropdown>
|
|
180
|
+
</template>
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
- Values, callback props and configuration keep their existing contracts.
|
|
184
|
+
`v-model` additionally connects Dropdown/Combobox/MultiSelect, the scalar
|
|
185
|
+
inputs, Switch/Checkbox, choice controls, rating, color and date pickers.
|
|
186
|
+
ResourcePicker uses `selectedResourceIds`; CalendarPicker uses `selected`.
|
|
187
|
+
RangeSlider keeps `fromValue`, `toValue`, `onRangeChange` and `onRangeCommit`;
|
|
188
|
+
it does not flatten a two-handle range into a scalar model.
|
|
189
|
+
- Default slots supply `children`; named content slots supply the matching
|
|
190
|
+
component prop (for example Dialog's `footer` and Switch's `label`). Dropdown
|
|
191
|
+
has scoped `option` (`option`, `selected`), `value` (`option`), `content`
|
|
192
|
+
(`content.id`, `content.close`) and `noResults` slots. ReorderList has `item`
|
|
193
|
+
and `handle` slots (`item`, `index`). Use Vue slots for Vue VNodes, rather than
|
|
194
|
+
returning them from a Preact render callback.
|
|
195
|
+
- Vue owns slot content via Teleport, preserving injection and reactive updates.
|
|
196
|
+
Preact owns the surrounding control. Mount and slot boundaries add elements
|
|
197
|
+
styled with `display: contents`; DOM code depending on direct-child selectors
|
|
198
|
+
must account for these boundaries. Supply explicit accessible labels and input
|
|
199
|
+
associations instead of relying on Preact inspecting Vue slot VNodes.
|
|
200
|
+
- The exposed `element` ref is the mount boundary, not the component's internal
|
|
201
|
+
input. Existing explicit `inputRef` callback props remain available.
|
|
202
|
+
- Wrappers render empty boundaries on the server and mount interactive UI on the
|
|
203
|
+
client. They do not provide server-rendered component content.
|
|
204
|
+
- Unmounting disposes the Preact root and its effects, portals and controllers.
|
|
205
|
+
|
|
206
|
+
`createVueAdapter` is exported for application-owned Preact compositions using the
|
|
207
|
+
same lifecycle. The catalog's wrapper factory calls are marked pure for consumer
|
|
208
|
+
bundle tree shaking.
|
|
209
|
+
|
|
210
|
+
The focused browser check runs against its own framework fixture, independently of the
|
|
211
|
+
Preact gallery:
|
|
212
|
+
|
|
213
|
+
```sh
|
|
214
|
+
pnpm --filter @revolist/ui-gallery exec playwright test --config ../../tests/shared-ui/playwright.framework-adapters.config.ts
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## React, Angular and Svelte component adapters
|
|
218
|
+
|
|
219
|
+
All adapters reuse the existing Preact controls and their interaction lifecycle.
|
|
220
|
+
Import `@revolist/ui/styles.css` once. Install Preact and your host framework;
|
|
221
|
+
React component wrappers also require `react-dom`. The primitive `*-control`
|
|
222
|
+
entries remain available for framework-owned native elements.
|
|
223
|
+
|
|
224
|
+
### React
|
|
225
|
+
|
|
226
|
+
`@revolist/ui/react` provides named components matching the shared catalog and
|
|
227
|
+
standalone editors. Props and controlled callbacks keep their shared names.
|
|
228
|
+
React owns children and custom content through portals, preserving React context
|
|
229
|
+
and state. `renderPlaceholder` receives only placeholder text; `renderSelectedValue`
|
|
230
|
+
receives only selected options. Built-in Preact child VNodes are not passed to React. Dropdown render callbacks omit the Preact element-factory argument:
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
import { Dropdown, Dialog } from '@revolist/ui/react';
|
|
234
|
+
|
|
235
|
+
<Dropdown
|
|
236
|
+
source={source}
|
|
237
|
+
value={selected}
|
|
238
|
+
onChange={setSelected}
|
|
239
|
+
renderOption={(option, selected) => (
|
|
240
|
+
<strong aria-current={selected}>{option.label}</strong>
|
|
241
|
+
)}
|
|
242
|
+
/>
|
|
243
|
+
|
|
244
|
+
<Dialog open={open} title="Edit" closeLabel="Close" onClose={close}
|
|
245
|
+
footer={<button onClick={save}>Save</button>}>
|
|
246
|
+
<Editor />
|
|
247
|
+
</Dialog>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Wrappers expose `{ element }` through their React ref: this is the mount boundary,
|
|
251
|
+
not an internal input. Shared control callbacks receive native DOM events; they
|
|
252
|
+
do not synthesize React events. NativeSelect renders directly in React to retain
|
|
253
|
+
native `<option>` children and also offers `onValueChange`.
|
|
254
|
+
|
|
255
|
+
### Angular
|
|
256
|
+
|
|
257
|
+
Import standalone `UiComponent` and `UiSlotDirective` from `@revolist/ui/angular`.
|
|
258
|
+
The generic `<rv-ui>` host accepts any shared catalog name in `component` and its
|
|
259
|
+
controlled values/configuration in `props`. `valueChange` forwards the component's
|
|
260
|
+
primary model callback; `uiEvent` forwards `{ name, args }` for supplied `on*`
|
|
261
|
+
callbacks, the primary model callback, and `onClose`. Supplied callbacks still run
|
|
262
|
+
and retain their return values. Use immutable `props` updates so Angular can
|
|
263
|
+
observe configuration changes.
|
|
264
|
+
|
|
265
|
+
```html
|
|
266
|
+
<rv-ui component="Dropdown" [props]="{ source: source, value: selected }"
|
|
267
|
+
(valueChange)="selected = $any($event)">
|
|
268
|
+
<ng-template rvUiSlot="option" let-option="option" let-selected="selected">
|
|
269
|
+
<strong>{{ option.label }}</strong>
|
|
270
|
+
</ng-template>
|
|
271
|
+
</rv-ui>
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Use `rvUiSlot="default"` for children, `rvUiSlot="footer"` for a dialog footer,
|
|
275
|
+
and the same scoped option/value/content slots described for Vue. Angular keeps
|
|
276
|
+
ownership and change detection of embedded views after they move into controls.
|
|
277
|
+
Use `<select rvControl>` for Angular-owned native option templates; the generic
|
|
278
|
+
host rejects NativeSelect template slots instead of nesting options in an invalid
|
|
279
|
+
slot container. Public Angular entries ship partial-compilation metadata.
|
|
280
|
+
|
|
281
|
+
### Svelte 5
|
|
282
|
+
|
|
283
|
+
`@revolist/ui/svelte` exports `UiComponent`, a generic catalog host. Supply shared
|
|
284
|
+
props and callbacks, or use `onValueChange` to observe the primary controlled
|
|
285
|
+
callback. `onUiEvent` receives the same event envelope as Angular. Named snippets
|
|
286
|
+
use the same scope names as Angular/Vue slots. Replace the `props` object when
|
|
287
|
+
changing configuration.
|
|
288
|
+
|
|
289
|
+
```svelte
|
|
290
|
+
<script lang="ts">
|
|
291
|
+
import { UiComponent } from '@revolist/ui/svelte';
|
|
292
|
+
let selected = $state('open');
|
|
293
|
+
const source = [{ value: 'open', label: 'Open' }];
|
|
294
|
+
</script>
|
|
295
|
+
|
|
296
|
+
<UiComponent component="Dropdown" props={{ source, value: selected }}
|
|
297
|
+
onValueChange={value => selected = value as string} slots={{ option }} />
|
|
298
|
+
|
|
299
|
+
{#snippet option(scope: Record<string, any>)}
|
|
300
|
+
<strong>{scope.option.label}</strong>
|
|
301
|
+
{/snippet}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Default children and named snippets remain Svelte-owned, with their original
|
|
305
|
+
context and reactive updates. NativeSelect renders options directly in Svelte.
|
|
306
|
+
The public package supplies a Svelte source condition plus precompiled browser
|
|
307
|
+
and server entry points, so server imports do not execute client mounting code.
|
|
308
|
+
|
|
309
|
+
### Rendering boundaries and verification
|
|
310
|
+
|
|
311
|
+
Complex wrappers mount on the client and render empty boundaries on the server;
|
|
312
|
+
full server-rendered control markup is not provided. Native selects retain their
|
|
313
|
+
framework's native rendering. Content uses additional elements styled with
|
|
314
|
+
`display: contents`; direct-child DOM selectors must account for those elements.
|
|
315
|
+
Provide explicit labels and associations when child-VNode inspection would
|
|
316
|
+
otherwise determine them. Unmounting releases Preact effects and portals along
|
|
317
|
+
with the host framework's content. Angular/Svelte's generic hosts include the
|
|
318
|
+
catalog lookup; React's named factory calls are marked pure for tree shaking.
|
|
319
|
+
|
|
320
|
+
`UiComponentName` and `UiComponentProps<Name>` are available from the Angular,
|
|
321
|
+
Svelte and framework entries for explicitly typing application configurations.
|
|
322
|
+
The dedicated browser fixture covers all four frameworks:
|
|
323
|
+
|
|
324
|
+
```sh
|
|
325
|
+
pnpm --filter @revolist/ui lint:svelte
|
|
326
|
+
pnpm --filter @revolist/ui-gallery exec playwright test --config ../../tests/shared-ui/playwright.framework-adapters.config.ts
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### PDF viewer
|
|
330
|
+
|
|
331
|
+
`PdfViewer` adds PDF rendering, text selection/search, page navigation, zoom/fit,
|
|
332
|
+
rotation, local files, download and printing. It is available through the Preact,
|
|
333
|
+
React and Vue entries and the Angular/Svelte component catalog. Install the optional
|
|
334
|
+
`pdfjs-dist` peer and provide its matching worker URL. See
|
|
335
|
+
[`src/pdf-viewer/README.md`](src/pdf-viewer/README.md) for setup, API and lifecycle.
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
Pagination supports `boundaryButtons` to show or hide the first/last page buttons.
|
|
339
|
+
The native `PaginationPanel` (and Pro pagination) defaults to `true`; the framework
|
|
340
|
+
`Pagination` component defaults to `false` to preserve its existing appearance.
|
|
341
|
+
Set `boundaryButtons={false}` to keep only previous/next controls. With
|
|
342
|
+
`navigation={false}`, all navigation buttons are hidden. Framework `Pagination`
|
|
343
|
+
also accepts localized `firstLabel`/`lastLabel` and children for a page field or selector.
|
|
344
|
+
|
|
345
|
+
`DateTimeField` and the native date/time popup adapter share a compact time selector: typed entry plus keyboard-accessible hour/minute columns, optional seconds (`precision: 'second'`) and localized AM/PM (`timeFormat: '12h'` or `'locale'`). `minTime`, `maxTime` and `timeStep` constrain each choice; intervals are anchored to `minTime` when supplied. Single datetime pickers place the same panel beside the calendar and stack it on narrow screens. Existing `autoApply`, `showActions`, `required` and action labels retain their behavior. Override `text.hours`, `minutes`, `seconds`, `dayPeriod` and `noTimes` alongside the existing time labels for translations. Vue, React and Angular fields use the same shared implementation.
|
package/_button.scss
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
@use './styles/motion';
|
|
2
|
+
/**
|
|
3
|
+
* Buttons styling
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@use './variables' as *;
|
|
7
|
+
|
|
8
|
+
.rv-button {
|
|
9
|
+
border: 1px solid var(--rv-ui-btn-outline-border);
|
|
10
|
+
border-radius: 5px;
|
|
11
|
+
background-color: var(--rv-ui-btn-outline-bg, transparent);
|
|
12
|
+
color: var(--rv-ui-btn-outline-fg, inherit);
|
|
13
|
+
transition:
|
|
14
|
+
background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
|
|
15
|
+
color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
|
|
16
|
+
border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
|
|
17
|
+
opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
|
|
18
|
+
|
|
19
|
+
&:not(.disabled) {
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&.disabled {
|
|
24
|
+
opacity: 0.5;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&.small {
|
|
28
|
+
padding: 3px 6px;
|
|
29
|
+
min-width: 30px;
|
|
30
|
+
font-size: 16px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&:not(.small) {
|
|
34
|
+
padding: 5px 20px;
|
|
35
|
+
font-size: 14px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&:not(.disabled):hover {
|
|
39
|
+
background-color: var(--rv-ui-btn-outline-bg-hover, $button-alt-bg-light-hover);
|
|
40
|
+
border-color: var(--rv-ui-btn-outline-border-hover);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&.dark {
|
|
44
|
+
border-color: var(--rv-ui-btn-outline-border, $button-alt-bg-light);
|
|
45
|
+
background-color: var(--rv-ui-btn-outline-bg, $background-color-dark);
|
|
46
|
+
color: var(--rv-ui-btn-outline-fg, $text-color-dark);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&.solid {
|
|
50
|
+
border-color: transparent;
|
|
51
|
+
background-color: var(--rv-ui-btn-bg);
|
|
52
|
+
color: var(--rv-ui-btn-fg);
|
|
53
|
+
|
|
54
|
+
&:not(.disabled):hover {
|
|
55
|
+
background-color: var(--rv-ui-btn-bg-hover, $button-alt-bg-light);
|
|
56
|
+
border-color: transparent;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
&:focus-visible {
|
|
61
|
+
outline: none;
|
|
62
|
+
box-shadow: 0 0 0 2px var(--rv-ui-focus-ring);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
revo-grid[theme^='dark'] .rv-button:not(.solid) {
|
|
67
|
+
border-color: var(--rv-ui-btn-outline-border, $button-alt-bg-light);
|
|
68
|
+
background-color: var(--rv-ui-btn-outline-bg, $background-color-dark);
|
|
69
|
+
color: var(--rv-ui-btn-outline-fg, $text-color-dark);
|
|
70
|
+
|
|
71
|
+
&:hover {
|
|
72
|
+
background-color: var(--rv-ui-btn-outline-bg-hover, $button-alt-bg-light);
|
|
73
|
+
border-color: var(--rv-ui-btn-outline-border-hover, $button-alt-bg-light);
|
|
74
|
+
}
|
|
75
|
+
}
|