From e5191713338f55e952b7da0e2aca0f004bc4ca60 Mon Sep 17 00:00:00 2001 From: Aziz Ramos Date: Mon, 19 May 2025 18:18:57 -0400 Subject: [PATCH 01/10] feat(picker-markup): add shirt size within template --- components/dropzone/index.css | 4 ++-- components/picker/dist/metadata.json | 13 ++++--------- components/picker/index.css | 21 +++------------------ components/picker/stories/template.js | 11 ++++++++++- 4 files changed, 19 insertions(+), 30 deletions(-) diff --git a/components/dropzone/index.css b/components/dropzone/index.css index c5824560074..b495fc596e1 100644 --- a/components/dropzone/index.css +++ b/components/dropzone/index.css @@ -68,7 +68,7 @@ &.is-dragged { --mod-drop-zone-border-style: var(--mod-drop-zone-border-style-dragged, solid); - --mod-drop-zone-background-color: rgba(var(--spectrum-drop-zone-background-color), var(--mod-drop-zone-background-color-opacity, var(--spectrum-drop-zone-dragged-background-color))); + --mod-drop-zone-background-color: rgb(var(--spectrum-drop-zone-background-color), var(--mod-drop-zone-background-color-opacity, var(--spectrum-drop-zone-dragged-background-color))); --spectrum-drop-zone-border-color: var(--highcontrast-drop-zone-border-color-hover, var(--mod-drop-zone-border-color-hover, var(--spectrum-drop-zone-border-color-hover))); /* Updated values for a nested illustrated message when state changes */ @@ -83,7 +83,7 @@ &.is-filled { /* note: the below applies to .is-filled.is-dragged but works here b/c dragged is the only state applying background color */ - --mod-drop-zone-background-color: rgba(var(--spectrum-drop-zone-background-color), var(--mod-drop-zone-background-color-opacity-filled, var(--spectrum-drop-zone-background-color-opacity-filled))); + --mod-drop-zone-background-color: rgb(var(--spectrum-drop-zone-background-color), var(--mod-drop-zone-background-color-opacity-filled, var(--spectrum-drop-zone-background-color-opacity-filled))); /* Updated values for a nested illustrated message when state changes */ --mod-illustrated-message-display: none; diff --git a/components/picker/dist/metadata.json b/components/picker/dist/metadata.json index 9133755e956..b430d560652 100644 --- a/components/picker/dist/metadata.json +++ b/components/picker/dist/metadata.json @@ -2,7 +2,6 @@ "sourceFile": "index.css", "selectors": [ ".spectrum-Picker", - ".spectrum-Picker + .spectrum-Popover--bottom-start.is-open", ".spectrum-Picker .spectrum-Picker-icon", ".spectrum-Picker .spectrum-Picker-label", ".spectrum-Picker .spectrum-ProgressCircle", @@ -13,17 +12,15 @@ ".spectrum-Picker--quiet:focus-visible:after", ".spectrum-Picker--sideLabel", ".spectrum-Picker--sizeL", - ".spectrum-Picker--sizeL + .spectrum-Popover--bottom-start.is-open", ".spectrum-Picker--sizeS", - ".spectrum-Picker--sizeS + .spectrum-Popover--bottom-start.is-open", ".spectrum-Picker--sizeXL", - ".spectrum-Picker--sizeXL + .spectrum-Popover--bottom-start.is-open", ".spectrum-Picker-label", ".spectrum-Picker-label.is-placeholder", ".spectrum-Picker-label.is-placeholder:active", ".spectrum-Picker-label.is-placeholder:hover", ".spectrum-Picker-menuIcon", ".spectrum-Picker-menuIcon:active", + ".spectrum-Picker-popover", ".spectrum-Picker-validationIcon", ".spectrum-Picker.is-disabled", ".spectrum-Picker.is-disabled .spectrum-Picker-icon", @@ -123,6 +120,7 @@ "--mod-picker-min-inline-size-quiet", "--mod-picker-placeholder-font-style", "--mod-picker-placeholder-font-weight", + "--mod-picker-popover-animation-distance", "--mod-picker-spacing-bottom-to-text", "--mod-picker-spacing-edge-to-disclosure-icon", "--mod-picker-spacing-edge-to-disclosure-icon-quiet", @@ -131,7 +129,6 @@ "--mod-picker-spacing-icon-to-disclosure-icon", "--mod-picker-spacing-label-to-picker", "--mod-picker-spacing-label-to-picker-quiet", - "--mod-picker-spacing-picker-to-popover", "--mod-picker-spacing-starting-icon-to-text", "--mod-picker-spacing-text-to-icon-inline-end", "--mod-picker-spacing-top-to-alert-icon", @@ -196,7 +193,6 @@ "--spectrum-picker-spacing-icon-to-disclosure-icon", "--spectrum-picker-spacing-label-to-picker", "--spectrum-picker-spacing-label-to-picker-quiet", - "--spectrum-picker-spacing-picker-to-popover", "--spectrum-picker-spacing-starting-icon-to-text", "--spectrum-picker-spacing-text-to-icon-inline-end", "--spectrum-picker-spacing-top-to-alert-icon", @@ -227,9 +223,7 @@ "--spectrum-component-size-difference-down", "--spectrum-component-size-width-ratio-down", "--spectrum-component-to-menu-extra-large", - "--spectrum-component-to-menu-large", "--spectrum-component-to-menu-medium", - "--spectrum-component-to-menu-small", "--spectrum-component-top-to-text-100", "--spectrum-component-top-to-text-200", "--spectrum-component-top-to-text-300", @@ -302,7 +296,8 @@ "passthroughs": [ "--mod-button-animation-duration", "--mod-button-font-family", - "--mod-button-line-height" + "--mod-button-line-height", + "--mod-popover-animation-distance" ], "high-contrast": [ "--highcontrast-picker-background-color", diff --git a/components/picker/index.css b/components/picker/index.css index 924bef384d1..eae8b811c15 100644 --- a/components/picker/index.css +++ b/components/picker/index.css @@ -102,10 +102,6 @@ --spectrum-picker-focus-indicator-gap: var(--spectrum-focus-indicator-gap); --spectrum-picker-focus-indicator-thickness: var(--spectrum-focus-indicator-thickness); --spectrum-picker-focus-indicator-color: var(--spectrum-focus-indicator-color); - - & + .spectrum-Popover--bottom-start.is-open { - --spectrum-picker-spacing-picker-to-popover: var(--spectrum-component-to-menu-medium); - } } .spectrum-Picker--sizeS { @@ -124,10 +120,6 @@ --spectrum-picker-spacing-top-to-progress-circle: var(--spectrum-field-top-to-progress-circle-small); --spectrum-picker-spacing-top-to-disclosure-icon: var(--spectrum-field-top-to-disclosure-icon-75); --spectrum-picker-spacing-edge-to-disclosure-icon: var(--spectrum-field-end-edge-to-disclosure-icon-75); - - & + .spectrum-Popover--bottom-start.is-open { - --spectrum-picker-spacing-picker-to-popover: var(--spectrum-component-to-menu-small); - } } .spectrum-Picker--sizeL { @@ -146,10 +138,6 @@ --spectrum-picker-spacing-top-to-progress-circle: var(--spectrum-field-top-to-progress-circle-large); --spectrum-picker-spacing-top-to-disclosure-icon: var(--spectrum-field-top-to-disclosure-icon-200); --spectrum-picker-spacing-edge-to-disclosure-icon: var(--spectrum-field-end-edge-to-disclosure-icon-200); - - & + .spectrum-Popover--bottom-start.is-open { - --spectrum-picker-spacing-picker-to-popover: var(--spectrum-component-to-menu-large); - } } .spectrum-Picker--sizeXL { @@ -168,10 +156,7 @@ --spectrum-picker-spacing-top-to-progress-circle: var(--spectrum-field-top-to-progress-circle-extra-large); --spectrum-picker-spacing-top-to-disclosure-icon: var(--spectrum-field-top-to-disclosure-icon-300); --spectrum-picker-spacing-edge-to-disclosure-icon: var(--spectrum-field-end-edge-to-disclosure-icon-300); - - & + .spectrum-Popover--bottom-start.is-open { - --spectrum-picker-spacing-picker-to-popover: var(--spectrum-component-to-menu-extra-large); - } + --mod-picker-popover-animation-distance: var(--spectrum-component-to-menu-extra-large); } .spectrum-Picker--quiet { @@ -410,8 +395,8 @@ margin-inline-end: var(--mod-picker-spacing-icon-to-disclosure-icon, var(--spectrum-picker-spacing-icon-to-disclosure-icon)); } -.spectrum-Picker + .spectrum-Popover--bottom-start.is-open { - transform: translateY(var(--mod-picker-spacing-picker-to-popover, var(--spectrum-picker-spacing-picker-to-popover))); +.spectrum-Picker-popover { + --mod-popover-animation-distance: var(--mod-picker-popover-animation-distance, var(--spectrum-component-to-menu-medium)); } .spectrum-Picker--quiet { diff --git a/components/picker/stories/template.js b/components/picker/stories/template.js index d2713463154..89cf29893a5 100644 --- a/components/picker/stories/template.js +++ b/components/picker/stories/template.js @@ -176,6 +176,7 @@ export const Template = ({ content: popoverContent, size, customStyles: customPopoverStyles, + customClasses: [`${rootClass}-popover`], popoverWrapperStyles: { "display": "block", }, @@ -189,6 +190,13 @@ export const Template = ({ isDisabled, }, context) : ""; + const sizeMap = { + s: "small", + m: "medium", + l: "large", + xl: "extra-large", + }; + const markup = html`
${when(label, () => From e5eaac5882d95dd37dea19a6733e91d43b584ba4 Mon Sep 17 00:00:00 2001 From: Aziz Ramos Date: Tue, 20 May 2025 15:56:59 -0400 Subject: [PATCH 02/10] feat(picker-markup): adjusting picker markup to higher level of template --- .changeset/open-squids-refuse.md | 16 +++++++ components/picker/dist/metadata.json | 60 +++++++++++++++------------ components/picker/index.css | 16 +++++-- components/picker/stories/template.js | 24 ++++------- 4 files changed, 72 insertions(+), 44 deletions(-) create mode 100644 .changeset/open-squids-refuse.md diff --git a/.changeset/open-squids-refuse.md b/.changeset/open-squids-refuse.md new file mode 100644 index 00000000000..40cb6f3dbc5 --- /dev/null +++ b/.changeset/open-squids-refuse.md @@ -0,0 +1,16 @@ +--- +"@spectrum-css/picker": major +--- + +### S2 Picker Component Refactor + +- Refactors Picker component to use proper custom property naming conventions +- Adds size-specific animation distances for Popover component +- Improves component structure with proper class by renaming `spectrum-Picker` to `spectrum-Picker-button` +- `spectrum-Picker` now encapsulates help text, label, and popover components +- Adds `flex-shrink` to progress circle for better layout control when truncation and loading is visible +- Updates Popover animation distance to use `spectrum-Picker` custom properties + +#### New mods + +`--spectrum-picker-popover-animation-distance` diff --git a/components/picker/dist/metadata.json b/components/picker/dist/metadata.json index b430d560652..3f3b9e474d2 100644 --- a/components/picker/dist/metadata.json +++ b/components/picker/dist/metadata.json @@ -14,6 +14,37 @@ ".spectrum-Picker--sizeL", ".spectrum-Picker--sizeS", ".spectrum-Picker--sizeXL", + ".spectrum-Picker-button", + ".spectrum-Picker-button.is-disabled", + ".spectrum-Picker-button.is-invalid.is-keyboardFocused:not(:disabled, .is-disabled)", + ".spectrum-Picker-button.is-invalid.is-open:not(:disabled, .is-disabled)", + ".spectrum-Picker-button.is-invalid.is-open:not(:disabled, .is-disabled):hover", + ".spectrum-Picker-button.is-invalid:not(:disabled, .is-disabled)", + ".spectrum-Picker-button.is-invalid:not(:disabled, .is-disabled) .spectrum-Picker-validationIcon", + ".spectrum-Picker-button.is-invalid:not(:disabled, .is-disabled):active", + ".spectrum-Picker-button.is-invalid:not(:disabled, .is-disabled):focus-visible", + ".spectrum-Picker-button.is-invalid:not(:disabled, .is-disabled):hover", + ".spectrum-Picker-button.is-keyboardFocused", + ".spectrum-Picker-button.is-keyboardFocused .spectrum-Picker-label.is-placeholder", + ".spectrum-Picker-button.is-keyboardFocused .spectrum-Picker-menuIcon", + ".spectrum-Picker-button.is-keyboardFocused:after", + ".spectrum-Picker-button.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading)", + ".spectrum-Picker-button.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading) .spectrum-Picker-menuIcon", + ".spectrum-Picker-button.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading):hover", + ".spectrum-Picker-button.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading):hover .spectrum-Picker-menuIcon", + ".spectrum-Picker-button::-moz-focus-inner", + ".spectrum-Picker-button:active", + ".spectrum-Picker-button:active .spectrum-Picker-label.is-placeholder", + ".spectrum-Picker-button:active:after", + ".spectrum-Picker-button:after", + ".spectrum-Picker-button:disabled", + ".spectrum-Picker-button:focus", + ".spectrum-Picker-button:focus-visible", + ".spectrum-Picker-button:focus-visible .spectrum-Picker-label.is-placeholder", + ".spectrum-Picker-button:focus-visible .spectrum-Picker-menuIcon", + ".spectrum-Picker-button:focus-visible:after", + ".spectrum-Picker-button:hover", + ".spectrum-Picker-button:hover .spectrum-Picker-menuIcon", ".spectrum-Picker-label", ".spectrum-Picker-label.is-placeholder", ".spectrum-Picker-label.is-placeholder:active", @@ -28,28 +59,9 @@ ".spectrum-Picker.is-disabled .spectrum-Picker-menuIcon", ".spectrum-Picker.is-disabled .spectrum-Picker-validationIcon", ".spectrum-Picker.is-disabled:not(.spectrum-Picker--quiet)", - ".spectrum-Picker.is-invalid.is-keyboardFocused:not(:disabled, .is-disabled)", - ".spectrum-Picker.is-invalid.is-open:not(:disabled, .is-disabled)", - ".spectrum-Picker.is-invalid.is-open:not(:disabled, .is-disabled):hover", - ".spectrum-Picker.is-invalid:not(:disabled, .is-disabled)", - ".spectrum-Picker.is-invalid:not(:disabled, .is-disabled) .spectrum-Picker-validationIcon", - ".spectrum-Picker.is-invalid:not(:disabled, .is-disabled):active", - ".spectrum-Picker.is-invalid:not(:disabled, .is-disabled):focus-visible", - ".spectrum-Picker.is-invalid:not(:disabled, .is-disabled):hover", ".spectrum-Picker.is-keyboardFocused", - ".spectrum-Picker.is-keyboardFocused .spectrum-Picker-label.is-placeholder", - ".spectrum-Picker.is-keyboardFocused .spectrum-Picker-menuIcon", - ".spectrum-Picker.is-keyboardFocused:after", ".spectrum-Picker.is-loading", ".spectrum-Picker.is-loading .spectrum-Picker-menuIcon", - ".spectrum-Picker.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading)", - ".spectrum-Picker.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading) .spectrum-Picker-menuIcon", - ".spectrum-Picker.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading):hover", - ".spectrum-Picker.is-open:not(.spectrum-Picker--quiet, :disabled, .is-disabled, .is-loading):hover .spectrum-Picker-menuIcon", - ".spectrum-Picker::-moz-focus-inner", - ".spectrum-Picker:active", - ".spectrum-Picker:active .spectrum-Picker-label.is-placeholder", - ".spectrum-Picker:active:after", ".spectrum-Picker:after", ".spectrum-Picker:disabled", ".spectrum-Picker:disabled .spectrum-Picker-icon", @@ -57,13 +69,7 @@ ".spectrum-Picker:disabled .spectrum-Picker-menuIcon", ".spectrum-Picker:disabled .spectrum-Picker-validationIcon", ".spectrum-Picker:disabled:not(.spectrum-Picker--quiet)", - ".spectrum-Picker:focus", ".spectrum-Picker:focus-visible", - ".spectrum-Picker:focus-visible .spectrum-Picker-label.is-placeholder", - ".spectrum-Picker:focus-visible .spectrum-Picker-menuIcon", - ".spectrum-Picker:focus-visible:after", - ".spectrum-Picker:hover", - ".spectrum-Picker:hover .spectrum-Picker-menuIcon", ".spectrum-Picker:lang(ja) .spectrum-Picker-label", ".spectrum-Picker:lang(ko) .spectrum-Picker-label", ".spectrum-Picker:lang(zh) .spectrum-Picker-label" @@ -120,7 +126,6 @@ "--mod-picker-min-inline-size-quiet", "--mod-picker-placeholder-font-style", "--mod-picker-placeholder-font-weight", - "--mod-picker-popover-animation-distance", "--mod-picker-spacing-bottom-to-text", "--mod-picker-spacing-edge-to-disclosure-icon", "--mod-picker-spacing-edge-to-disclosure-icon-quiet", @@ -187,6 +192,7 @@ "--spectrum-picker-min-inline-size", "--spectrum-picker-minimum-width-multiplier", "--spectrum-picker-placeholder-font-style", + "--spectrum-picker-popover-animation-distance", "--spectrum-picker-spacing-bottom-to-text", "--spectrum-picker-spacing-edge-to-disclosure-icon", "--spectrum-picker-spacing-edge-to-text", @@ -223,7 +229,9 @@ "--spectrum-component-size-difference-down", "--spectrum-component-size-width-ratio-down", "--spectrum-component-to-menu-extra-large", + "--spectrum-component-to-menu-large", "--spectrum-component-to-menu-medium", + "--spectrum-component-to-menu-small", "--spectrum-component-top-to-text-100", "--spectrum-component-top-to-text-200", "--spectrum-component-top-to-text-300", diff --git a/components/picker/index.css b/components/picker/index.css index eae8b811c15..6912dd3995f 100644 --- a/components/picker/index.css +++ b/components/picker/index.css @@ -102,6 +102,9 @@ --spectrum-picker-focus-indicator-gap: var(--spectrum-focus-indicator-gap); --spectrum-picker-focus-indicator-thickness: var(--spectrum-focus-indicator-thickness); --spectrum-picker-focus-indicator-color: var(--spectrum-focus-indicator-color); + + /* stylelint-disable-next-line spectrum-tools/no-unused-custom-properties -- used in the popover */ + --spectrum-picker-popover-animation-distance: var(--spectrum-component-to-menu-medium); } .spectrum-Picker--sizeS { @@ -120,6 +123,9 @@ --spectrum-picker-spacing-top-to-progress-circle: var(--spectrum-field-top-to-progress-circle-small); --spectrum-picker-spacing-top-to-disclosure-icon: var(--spectrum-field-top-to-disclosure-icon-75); --spectrum-picker-spacing-edge-to-disclosure-icon: var(--spectrum-field-end-edge-to-disclosure-icon-75); + + /* stylelint-disable-next-line spectrum-tools/no-unused-custom-properties -- used in the popover */ + --spectrum-picker-popover-animation-distance: var(--spectrum-component-to-menu-small); } .spectrum-Picker--sizeL { @@ -138,6 +144,9 @@ --spectrum-picker-spacing-top-to-progress-circle: var(--spectrum-field-top-to-progress-circle-large); --spectrum-picker-spacing-top-to-disclosure-icon: var(--spectrum-field-top-to-disclosure-icon-200); --spectrum-picker-spacing-edge-to-disclosure-icon: var(--spectrum-field-end-edge-to-disclosure-icon-200); + + /* stylelint-disable-next-line spectrum-tools/no-unused-custom-properties -- used in the popover */ + --spectrum-picker-popover-animation-distance: var(--spectrum-component-to-menu-large); } .spectrum-Picker--sizeXL { @@ -156,7 +165,7 @@ --spectrum-picker-spacing-top-to-progress-circle: var(--spectrum-field-top-to-progress-circle-extra-large); --spectrum-picker-spacing-top-to-disclosure-icon: var(--spectrum-field-top-to-disclosure-icon-300); --spectrum-picker-spacing-edge-to-disclosure-icon: var(--spectrum-field-end-edge-to-disclosure-icon-300); - --mod-picker-popover-animation-distance: var(--spectrum-component-to-menu-extra-large); + --spectrum-picker-popover-animation-distance: var(--spectrum-component-to-menu-extra-large); } .spectrum-Picker--quiet { @@ -175,7 +184,7 @@ --spectrum-picker-spacing-label-to-picker: var(--mod-picker-spacing-label-to-picker-quiet, var(--spectrum-picker-spacing-label-to-picker-quiet)); } -.spectrum-Picker { +.spectrum-Picker-button { @extend %spectrum-BaseButton; display: flex; @@ -393,10 +402,11 @@ margin-block-start: calc(var(--mod-picker-spacing-top-to-progress-circle, var(--spectrum-picker-spacing-top-to-progress-circle)) - var(--mod-picker-border-width, var(--spectrum-picker-border-width))); margin-block-end: calc(var(--mod-picker-spacing-top-to-progress-circle, var(--spectrum-picker-spacing-top-to-progress-circle)) - var(--mod-picker-border-width, var(--spectrum-picker-border-width))); margin-inline-end: var(--mod-picker-spacing-icon-to-disclosure-icon, var(--spectrum-picker-spacing-icon-to-disclosure-icon)); + flex-shrink: 0; } .spectrum-Picker-popover { - --mod-popover-animation-distance: var(--mod-picker-popover-animation-distance, var(--spectrum-component-to-menu-medium)); + --mod-popover-animation-distance: var(--spectrum-picker-popover-animation-distance, var(--spectrum-component-to-menu-medium)); } .spectrum-Picker--quiet { diff --git a/components/picker/stories/template.js b/components/picker/stories/template.js index 89cf29893a5..7dd482c990e 100644 --- a/components/picker/stories/template.js +++ b/components/picker/stories/template.js @@ -18,13 +18,11 @@ import "../index.css"; */ export const Picker = ({ rootClass = "spectrum-Picker", - id = getRandomId("picker"), + id = getRandomId("picker-button"), size = "m", - labelPosition = "top", placeholder, currentValue, contentIconName, - isQuiet = false, isKeyboardFocused = false, showWorkflowIcon = false, isOpen = false, @@ -42,11 +40,7 @@ export const Picker = ({ return html`