@redvars/peacock 3.6.3 → 3.8.0
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/ButtonConstants-D06bY4uy.js +114 -0
- package/dist/ButtonConstants-D06bY4uy.js.map +1 -0
- package/dist/{BaseHyperlinkMixin-BNuwbiEf.js → NativeHyperlinkMixin-DrYXyfMQ.js} +8 -10
- package/dist/NativeHyperlinkMixin-DrYXyfMQ.js.map +1 -0
- package/dist/assets/components.css +1 -1
- package/dist/assets/components.css.map +1 -1
- package/dist/assets/styles.css +1 -1
- package/dist/assets/styles.css.map +1 -1
- package/dist/{button-colors-Cg6oxiz-.js → button-colors-DSuBHd-i.js} +200 -186
- package/dist/button-colors-DSuBHd-i.js.map +1 -0
- package/dist/button-group.js +8 -8
- package/dist/button-group.js.map +1 -1
- package/dist/button.js +224 -124
- package/dist/button.js.map +1 -1
- package/dist/calendar-column-view.js +0 -1
- package/dist/calendar-column-view.js.map +1 -1
- package/dist/calendar-month-view.js +0 -1
- package/dist/calendar-month-view.js.map +1 -1
- package/dist/card-content.js +0 -1
- package/dist/card-content.js.map +1 -1
- package/dist/card.js +96 -90
- package/dist/card.js.map +1 -1
- package/dist/cb-compound-expression.js +4 -1
- package/dist/cb-compound-expression.js.map +1 -1
- package/dist/cb-divider.js +0 -1
- package/dist/cb-divider.js.map +1 -1
- package/dist/cb-expression.js +0 -2
- package/dist/cb-expression.js.map +1 -1
- package/dist/cb-predicate.js +0 -1
- package/dist/cb-predicate.js.map +1 -1
- package/dist/code-highlighter.js +23 -6
- package/dist/code-highlighter.js.map +1 -1
- package/dist/custom-elements-jsdocs.json +5102 -18408
- package/dist/custom-elements.json +19630 -20205
- package/dist/fab.js +181 -117
- package/dist/fab.js.map +1 -1
- package/dist/{flow-designer-node-9Bqyn6qx.js → flow-designer-node-BWrPuxAR.js} +1 -2
- package/dist/flow-designer-node-BWrPuxAR.js.map +1 -0
- package/dist/flow-designer-node.js +1 -1
- package/dist/flow-designer.js +5 -5
- package/dist/icon-button-CYqrnMnF.js +318 -0
- package/dist/icon-button-CYqrnMnF.js.map +1 -0
- package/dist/index.js +8 -8
- package/dist/{navigation-rail-DAUuJ_Yp.js → navigation-rail-CM_svs5_.js} +511 -295
- package/dist/navigation-rail-CM_svs5_.js.map +1 -0
- package/dist/observe-slot-change-D8Xg-kSS.js +60 -0
- package/dist/observe-slot-change-D8Xg-kSS.js.map +1 -0
- package/dist/peacock-loader.js +7 -7
- package/dist/peacock-loader.js.map +1 -1
- package/dist/popover-content.js +0 -1
- package/dist/popover-content.js.map +1 -1
- package/dist/search.js +4 -1
- package/dist/search.js.map +1 -1
- package/dist/src/__controllers/attachable-controller.d.ts +109 -0
- package/dist/src/__mixins/{BaseButtonMixin.d.ts → NativeButtonMixin.d.ts} +3 -3
- package/dist/src/__mixins/{BaseHyperlinkMixin.d.ts → NativeHyperlinkMixin.d.ts} +3 -4
- package/dist/src/__utils/is-link.d.ts +1 -0
- package/dist/src/__utils/observe-slot-change.d.ts +1 -1
- package/dist/src/accordion/accordion-item.d.ts +0 -1
- package/dist/src/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +0 -1
- package/dist/src/button/ButtonConstants.d.ts +1 -0
- package/dist/src/button/GroupButtonInterface.d.ts +4 -0
- package/dist/src/button/button/button.d.ts +32 -7
- package/dist/src/button/button-group/button-group.d.ts +2 -1
- package/dist/src/button/icon-button/icon-button.d.ts +26 -5
- package/dist/src/button/index.d.ts +1 -1
- package/dist/src/calendar/calendar-column-view.d.ts +0 -1
- package/dist/src/calendar/calendar-month-view.d.ts +0 -1
- package/dist/src/card/card-content.d.ts +0 -1
- package/dist/src/card/card.d.ts +9 -6
- package/dist/src/chip/chip/chip.d.ts +22 -3
- package/dist/src/condition-builder/cb-compound-expression.d.ts +0 -1
- package/dist/src/condition-builder/cb-divider.d.ts +0 -1
- package/dist/src/condition-builder/cb-expression.d.ts +0 -1
- package/dist/src/condition-builder/cb-predicate.d.ts +0 -1
- package/dist/src/fab/fab.d.ts +20 -6
- package/dist/src/flow-designer/flow-designer-node.d.ts +0 -1
- package/dist/src/focus-ring/focus-ring.d.ts +26 -20
- package/dist/src/item/item.d.ts +2 -1
- package/dist/src/link/link.d.ts +1 -1
- package/dist/src/list/list-item.d.ts +1 -2
- package/dist/src/menu/menu-item/menu-item.d.ts +1 -2
- package/dist/src/menu/sub-menu/sub-menu.d.ts +0 -1
- package/dist/src/navigation-rail/navigation-rail-item.d.ts +0 -2
- package/dist/src/popover/popover-content.d.ts +0 -1
- package/dist/src/ripple/ripple.d.ts +9 -1
- package/dist/src/segmented-button/segmented-button.d.ts +0 -1
- package/dist/src/select/option.d.ts +0 -1
- package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +0 -1
- package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +0 -1
- package/dist/src/tabs/tab-panel.d.ts +0 -1
- package/dist/src/tabs/tab.d.ts +4 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/readme.md +2 -2
- package/scss/components.scss +0 -1
- package/scss/mixin.scss +10 -13
- package/scss/styles.scss +1 -3
- package/src/__controllers/attachable-controller.ts +198 -0
- package/src/__mixins/NativeButtonMixin.ts +87 -0
- package/src/__mixins/{BaseHyperlinkMixin.ts → NativeHyperlinkMixin.ts} +15 -15
- package/src/__utils/is-link.ts +3 -0
- package/src/__utils/observe-slot-change.ts +46 -14
- package/src/accordion/accordion-item.scss +1 -1
- package/src/accordion/accordion-item.ts +0 -1
- package/src/breadcrumb/breadcrumb-item/breadcrumb-item.ts +0 -1
- package/src/button/ButtonConstants.ts +1 -0
- package/src/button/GroupButtonInterface.ts +4 -0
- package/src/button/button/button-colors.scss +2 -2
- package/src/button/button/button-layers.scss +124 -0
- package/src/button/button/button-sizes.scss +20 -42
- package/src/button/button/button.scss +71 -169
- package/src/button/button/button.ts +229 -78
- package/src/button/button/only-button.scss +13 -0
- package/src/button/button-group/button-group.ts +59 -17
- package/src/button/icon-button/icon-button-sizes.scss +6 -21
- package/src/button/icon-button/icon-button.ts +198 -93
- package/src/button/index.ts +1 -1
- package/src/calendar/calendar-column-view.ts +0 -1
- package/src/calendar/calendar-month-view.ts +0 -1
- package/src/card/card-content.ts +2 -3
- package/src/card/card.scss +87 -95
- package/src/card/card.ts +62 -60
- package/src/chip/chip/chip.scss +65 -70
- package/src/chip/chip/chip.ts +155 -56
- package/src/code-highlighter/code-highlighter.scss +1 -1
- package/src/code-highlighter/code-highlighter.ts +20 -5
- package/src/condition-builder/cb-compound-expression.scss +4 -0
- package/src/condition-builder/cb-compound-expression.ts +0 -1
- package/src/condition-builder/cb-divider.ts +0 -1
- package/src/condition-builder/cb-expression.scss +0 -1
- package/src/condition-builder/cb-expression.ts +0 -1
- package/src/condition-builder/cb-predicate.ts +0 -1
- package/src/elevation/elevation.scss +5 -1
- package/src/fab/fab-colors.scss +2 -2
- package/src/fab/fab-sizes.scss +24 -34
- package/src/fab/fab.scss +77 -71
- package/src/fab/fab.ts +141 -65
- package/src/flow-designer/flow-designer-node.ts +0 -1
- package/src/focus-ring/focus-ring.ts +81 -72
- package/src/item/item.scss +77 -66
- package/src/item/item.ts +61 -39
- package/src/link/link.scss +1 -10
- package/src/link/link.ts +4 -2
- package/src/list/list-item.ts +8 -8
- package/src/menu/menu-item/menu-item.ts +17 -8
- package/src/menu/sub-menu/sub-menu.ts +0 -1
- package/src/navigation-rail/navigation-rail-item.scss +5 -0
- package/src/navigation-rail/navigation-rail-item.ts +10 -15
- package/src/peacock-loader.ts +1 -1
- package/src/popover/popover-content.ts +0 -1
- package/src/ripple/ripple.ts +52 -20
- package/src/search/search.scss +3 -0
- package/src/segmented-button/segmented-button.ts +0 -1
- package/src/select/option.ts +0 -1
- package/src/sidebar-menu/sidebar-menu-item.ts +0 -1
- package/src/sidebar-menu/sidebar-sub-menu.ts +0 -1
- package/src/skeleton/skeleton.scss +5 -1
- package/src/tabs/tab-panel.ts +0 -1
- package/src/tabs/tab.ts +60 -70
- package/src/text/text.css-component.scss +3 -21
- package/src/tooltip/tooltip.scss +5 -8
- package/src/tooltip/tooltip.ts +1 -2
- package/dist/BaseButton-BNFAYn-S.js +0 -219
- package/dist/BaseButton-BNFAYn-S.js.map +0 -1
- package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +0 -1
- package/dist/button-colors-Cg6oxiz-.js.map +0 -1
- package/dist/flow-designer-node-9Bqyn6qx.js.map +0 -1
- package/dist/icon-button-AdJBEoNy.js +0 -251
- package/dist/icon-button-AdJBEoNy.js.map +0 -1
- package/dist/navigation-rail-DAUuJ_Yp.js.map +0 -1
- package/dist/observe-slot-change-BGJfgg2E.js +0 -31
- package/dist/observe-slot-change-BGJfgg2E.js.map +0 -1
- package/dist/src/button/BaseButton.d.ts +0 -28
- package/dist/src/focus-ring/FocusAttachableController.d.ts +0 -8
- package/src/__mixins/BaseButtonMixin.ts +0 -83
- package/src/button/BaseButton.ts +0 -113
- package/src/focus-ring/FocusAttachableController.ts +0 -28
- package/src/popover/tooltip.css-component.scss +0 -19
package/dist/button-group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-group.js","sources":["../../src/button/button-group/button-group.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './button-group.scss';\nimport { Button } from '../button/button.js';\nimport { IconButton } from '../icon-button/icon-button.js';\nimport { BaseButton } from '../BaseButton.js';\n\n/**\n * @label Button Group\n * @tag wc-button-group\n * @rawTag button-group\n *\n * @summary Group a series of buttons together on a single line with the button group, and super-power.\n\n * @example\n * ```html\n * <wc-button-group variant=\"connected\">\n * <wc-icon-button toggle selected><wc-icon name=\"home\"></wc-icon></wc-icon-button>\n * <wc-icon-button toggle><wc-icon name=\"alarm\"></wc-icon></wc-icon-button>\n * </wc-button-group>\n * ```\n *\n * @tags controls\n */\n@IndividualComponent\nexport class ButtonGroup extends LitElement {\n // Lit prefers CSS-in-JS for better performance and scoping.\n // If you prefer keeping the SCSS file, you'll need a build tool (like Vite or Webpack)\n // that can import .scss files as lit-css.\n static styles = [styles];\n\n static Button = Button;\n\n static IconButton = IconButton;\n\n /**\n * Button size.\n * Possible values are `\"sm\"`, `\"md\"`, `\"lg\"`. Defaults to `\"md\"`.\n */\n @property() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * Layout variant of the button group.\n * `\"standard\"` shows buttons with a small gap between them.\n * `\"connected\"` places buttons with a 2px gap; in horizontal orientation outer buttons have fully\n * rounded outer corners and middle buttons keep standard rounded corners. In vertical orientation\n * all buttons keep their default corner shape.\n * Defaults to `\"standard\"`.\n */\n @property({ reflect: true }) variant: 'standard' | 'connected' = 'standard';\n\n /**\n * Orientation of the button group.\n * `\"horizontal\"` lays buttons out in a row.\n * `\"vertical\"` stacks buttons in a column.\n * Defaults to `\"horizontal\"`.\n */\n @property({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Color applied to all buttons in the group.\n * Possible values are `\"primary\"`, `\"success\"`, `\"danger\"`, `\"warning\"`, `\"surface\"`, `\"on-surface\"`.\n */\n @property({ reflect: true }) color?: 'primary' | 'success' | 'danger' | 'warning' | 'surface' | 'on-surface';\n\n /**\n * Visual style applied to all buttons in the group.\n * Possible values are `\"filled\"`, `\"tonal\"`, `\"outlined\"`.\n */\n @property({ attribute: 'button-variant', reflect: true }) buttonVariant?: 'filled' | 'tonal' | 'outlined';\n\n override updated() {\n this._syncChildren();\n }\n\n private _getSlottedElements(): HTMLElement[] {\n const slot = this.shadowRoot?.querySelector('slot');\n return (slot?.assignedElements({ flatten: true }) ?? []) as HTMLElement[];\n }\n\n private _syncChildren() {\n const children = this._getSlottedElements();\n const isVertical = this.orientation === 'vertical';\n\n children.forEach((child, index) => {\n const isFirst = index === 0;\n const isLast = index === children.length - 1;\n const isOnly = children.length === 1;\n\n if (this.color && 'color' in child) {\n (child as BaseButton).color = this.color;\n }\n\n if (this.buttonVariant && 'variant' in child) {\n (child as BaseButton).variant = this.buttonVariant;\n }\n\n if (this.variant === 'connected') {\n child.style.setProperty('--button-container-shape-variant', 'round');\n\n if (isOnly) {\n child.style.setProperty('--button-container-shape', 'var(--shape-corner-full)');\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-end');\n } else if (isFirst) {\n child.style.removeProperty('--button-container-shape');\n if (isVertical) {\n // Top button in vertical group: leave default corner shape\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-end-end');\n } else {\n // Left button in horizontal group: round left corners, standard right corners\n child.style.setProperty('--button-container-shape-start-start', 'calc(var(--button-height) / 2)');\n child.style.setProperty('--button-container-shape-end-start', 'calc(var(--button-height) / 2)');\n child.style.setProperty('--button-container-shape-start-end', 'var(--shape-corner-medium)');\n child.style.setProperty('--button-container-shape-end-end', 'var(--shape-corner-medium)');\n }\n } else if (isLast) {\n child.style.removeProperty('--button-container-shape');\n if (isVertical) {\n // Bottom button in vertical group: leave default corner shape\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-end-end');\n } else {\n // Right button in horizontal group: standard left corners, round right corners\n child.style.setProperty('--button-container-shape-start-start', 'var(--shape-corner-medium)');\n child.style.setProperty('--button-container-shape-end-start', 'var(--shape-corner-medium)');\n child.style.setProperty('--button-container-shape-start-end', 'calc(var(--button-height) / 2)');\n child.style.setProperty('--button-container-shape-end-end', 'calc(var(--button-height) / 2)');\n }\n } else {\n // Middle buttons: standard rounded corners on all sides\n child.style.setProperty('--button-container-shape', 'var(--shape-corner-medium)');\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-end');\n }\n } else {\n child.style.removeProperty('--button-container-shape');\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-end');\n child.style.removeProperty('--button-container-shape-variant');\n }\n });\n }\n\n render() {\n const cssClasses = {\n 'button-group': true,\n [`size-${this.size}`]: true,\n [`variant-${this.variant}`]: true,\n [`orientation-${this.orientation}`]: true,\n };\n return html`\n <div class=${classMap(cssClasses)}>\n <slot @slotchange=${() => this._syncChildren()}></slot>\n </div>\n `;\n }\n}\n"],"names":["LitElement","html","classMap","styles","property"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button-group.js","sources":["../../src/button/button-group/button-group.ts"],"sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './button-group.scss';\nimport { Button } from '../button/button.js';\nimport { IconButton } from '../icon-button/icon-button.js';\nimport type { GroupButtonInterface } from '@/button/GroupButtonInterface.js';\n\n/**\n * @label Button Group\n * @tag wc-button-group\n * @rawTag button-group\n *\n * @summary Group a series of buttons together on a single line with the button group, and super-power.\n\n * @example\n * ```html\n * <wc-button-group variant=\"connected\">\n * <wc-icon-button toggle selected><wc-icon name=\"home\"></wc-icon></wc-icon-button>\n * <wc-icon-button toggle><wc-icon name=\"alarm\"></wc-icon></wc-icon-button>\n * </wc-button-group>\n * ```\n *\n * @tags controls\n */\n@IndividualComponent\nclass ButtonGroup extends LitElement {\n // Lit prefers CSS-in-JS for better performance and scoping.\n // If you prefer keeping the SCSS file, you'll need a build tool (like Vite or Webpack)\n // that can import .scss files as lit-css.\n static styles = [styles];\n\n static Button = Button;\n\n static IconButton = IconButton;\n\n /**\n * Button size.\n * Possible values are `\"sm\"`, `\"md\"`, `\"lg\"`. Defaults to `\"md\"`.\n */\n @property() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * Layout variant of the button group.\n * `\"standard\"` shows buttons with a small gap between them.\n * `\"connected\"` places buttons with a 2px gap; in horizontal orientation outer buttons have fully\n * rounded outer corners and middle buttons keep standard rounded corners. In vertical orientation\n * all buttons keep their default corner shape.\n * Defaults to `\"standard\"`.\n */\n @property({ reflect: true }) variant: 'standard' | 'connected' = 'standard';\n\n /**\n * Orientation of the button group.\n * `\"horizontal\"` lays buttons out in a row.\n * `\"vertical\"` stacks buttons in a column.\n * Defaults to `\"horizontal\"`.\n */\n @property({ reflect: true }) orientation: 'horizontal' | 'vertical' =\n 'horizontal';\n\n /**\n * Color applied to all buttons in the group.\n * Possible values are `\"primary\"`, `\"success\"`, `\"danger\"`, `\"warning\"`, `\"surface\"`, `\"on-surface\"`.\n */\n @property({ reflect: true }) color?:\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'surface'\n | 'on-surface';\n\n /**\n * Visual style applied to all buttons in the group.\n * Possible values are `\"filled\"`, `\"tonal\"`, `\"outlined\"`.\n */\n @property({ attribute: 'button-variant', reflect: true }) buttonVariant?:\n | 'filled'\n | 'tonal'\n | 'outlined';\n\n override updated() {\n this._syncChildren();\n }\n\n private _getSlottedElements(): HTMLElement[] {\n const slot = this.shadowRoot?.querySelector('slot');\n return (slot?.assignedElements({ flatten: true }) ?? []) as HTMLElement[];\n }\n\n private _syncChildren() {\n const children = this._getSlottedElements();\n const isVertical = this.orientation === 'vertical';\n\n children.forEach((child, index) => {\n const isFirst = index === 0;\n const isLast = index === children.length - 1;\n const isOnly = children.length === 1;\n\n if (this.color && 'color' in child) {\n (child as GroupButtonInterface).color = this.color;\n }\n\n if (this.buttonVariant && 'variant' in child) {\n (child as GroupButtonInterface).variant = this.buttonVariant;\n }\n\n if (this.variant === 'connected') {\n child.style.setProperty('--button-container-shape-variant', 'round');\n\n if (isOnly) {\n child.style.setProperty(\n '--button-container-shape',\n 'var(--shape-corner-full)',\n );\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-end');\n } else if (isFirst) {\n child.style.removeProperty('--button-container-shape');\n if (isVertical) {\n // Top button in vertical group: leave default corner shape\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-end-end');\n } else {\n // Left button in horizontal group: round left corners, standard right corners\n child.style.setProperty(\n '--button-container-shape-start-start',\n 'calc(var(--button-height) / 2)',\n );\n child.style.setProperty(\n '--button-container-shape-end-start',\n 'calc(var(--button-height) / 2)',\n );\n child.style.setProperty(\n '--button-container-shape-start-end',\n 'var(--shape-corner-medium)',\n );\n child.style.setProperty(\n '--button-container-shape-end-end',\n 'var(--shape-corner-medium)',\n );\n }\n } else if (isLast) {\n child.style.removeProperty('--button-container-shape');\n if (isVertical) {\n // Bottom button in vertical group: leave default corner shape\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-end-end');\n } else {\n // Right button in horizontal group: standard left corners, round right corners\n child.style.setProperty(\n '--button-container-shape-start-start',\n 'var(--shape-corner-medium)',\n );\n child.style.setProperty(\n '--button-container-shape-end-start',\n 'var(--shape-corner-medium)',\n );\n child.style.setProperty(\n '--button-container-shape-start-end',\n 'calc(var(--button-height) / 2)',\n );\n child.style.setProperty(\n '--button-container-shape-end-end',\n 'calc(var(--button-height) / 2)',\n );\n }\n } else {\n // Middle buttons: standard rounded corners on all sides\n child.style.setProperty(\n '--button-container-shape',\n 'var(--shape-corner-medium)',\n );\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-end');\n }\n } else {\n child.style.removeProperty('--button-container-shape');\n child.style.removeProperty('--button-container-shape-start-start');\n child.style.removeProperty('--button-container-shape-end-start');\n child.style.removeProperty('--button-container-shape-start-end');\n child.style.removeProperty('--button-container-shape-end-end');\n child.style.removeProperty('--button-container-shape-variant');\n }\n });\n }\n\n render() {\n const cssClasses = {\n 'button-group': true,\n [`size-${this.size}`]: true,\n [`variant-${this.variant}`]: true,\n [`orientation-${this.orientation}`]: true,\n };\n return html`\n <div class=${classMap(cssClasses)}>\n <slot @slotchange=${() => this._syncChildren()}></slot>\n </div>\n `;\n }\n}\n\nexport default ButtonGroup;\n"],"names":["LitElement","html","classMap","styles","property"],"mappings":"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"}
|
package/dist/button.js
CHANGED
|
@@ -1,89 +1,80 @@
|
|
|
1
|
-
import { a as i, _ as __decorate, I as IndividualComponent,
|
|
2
|
-
import { n } from './property-1psGvXOq.js';
|
|
3
|
-
import { r } from './state-DwbEjqVk.js';
|
|
1
|
+
import { a as i, b, A, _ as __decorate, I as IndividualComponent, i as i$1 } from './IndividualComponent-DUINtMGK.js';
|
|
2
|
+
import { n as n$1 } from './property-1psGvXOq.js';
|
|
4
3
|
import { e } from './class-map-YU7g0o3B.js';
|
|
5
|
-
import {
|
|
6
|
-
import { c as css_248z$
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
4
|
+
import { N as NativeButtonMixin, o, D as DISABLED_REASON_ID, s as spread } from './ButtonConstants-D06bY4uy.js';
|
|
5
|
+
import { n, c as css_248z$2, a as css_248z$3, b as css_248z$4 } from './button-colors-DSuBHd-i.js';
|
|
6
|
+
import { N as NativeHyperlinkMixin, t as throttle, i as isLink } from './NativeHyperlinkMixin-DrYXyfMQ.js';
|
|
7
|
+
import { o as observerSlotChangesWithCallback } from './observe-slot-change-D8Xg-kSS.js';
|
|
8
|
+
import { i as isActivationClick, d as dispatchActivationClick } from './dispatch-event-utils-CuEqjlPT.js';
|
|
9
9
|
import './directive-ZPhl09Yt.js';
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
|
|
11
|
+
var css_248z$1 = i`/* When both icon and label are present, apply the configured spacing */
|
|
12
|
+
:host([has-icon][has-label]) .button {
|
|
13
|
+
gap: var(--private-button-icon-label-spacing);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
:host(:not([trailing-icon])) .button {
|
|
17
|
+
flex-direction: row;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:host([trailing-icon]) .button {
|
|
21
|
+
flex-direction: row-reverse;
|
|
22
|
+
}`;
|
|
12
23
|
|
|
13
24
|
var css_248z = i`:host([size=xs]),
|
|
14
25
|
:host([size=extra-small]) {
|
|
15
26
|
--button-height: 2rem;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
:host([size=xs]) .button,
|
|
19
|
-
:host([size=extra-small]) .button {
|
|
20
27
|
--private-button-icon-size: 1rem;
|
|
21
28
|
--private-button-container-padding: 0.75rem;
|
|
22
|
-
font-size: 0.875rem !important;
|
|
23
|
-
font-weight: var(--font-weight-medium) !important;
|
|
24
|
-
line-height: 1.25rem !important;
|
|
25
|
-
letter-spacing: 0.1px !important;
|
|
29
|
+
--private-button-font-size: 0.875rem !important;
|
|
30
|
+
--private-button-font-weight: var(--font-weight-medium) !important;
|
|
31
|
+
--private-button-line-height: 1.25rem !important;
|
|
32
|
+
--private-button-letter-spacing: 0.1px !important;
|
|
26
33
|
}
|
|
27
34
|
|
|
28
35
|
:host([size=sm]),
|
|
29
36
|
:host([size=small]) {
|
|
30
37
|
--button-height: 2.5rem;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
:host([size=sm]) .button,
|
|
34
|
-
:host([size=small]) .button {
|
|
35
38
|
--private-button-icon-size: 1.25rem;
|
|
36
39
|
--private-button-container-padding: 1rem;
|
|
37
40
|
--private-button-icon-label-spacing: 0.5rem;
|
|
38
|
-
font-size: 0.875rem !important;
|
|
39
|
-
font-weight: var(--font-weight-medium) !important;
|
|
40
|
-
line-height: 1.25rem !important;
|
|
41
|
-
letter-spacing: 0.1px !important;
|
|
41
|
+
--private-button-font-size: 0.875rem !important;
|
|
42
|
+
--private-button-font-weight: var(--font-weight-medium) !important;
|
|
43
|
+
--private-button-line-height: 1.25rem !important;
|
|
44
|
+
--private-button-letter-spacing: 0.1px !important;
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
:host([size=md]),
|
|
45
48
|
:host([size=medium]) {
|
|
46
49
|
--button-height: 3.5rem;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
:host([size=md]) .button,
|
|
50
|
-
:host([size=medium]) .button {
|
|
51
50
|
--private-button-icon-size: 1.5rem;
|
|
52
51
|
--private-button-container-padding: 1.5rem;
|
|
53
|
-
font-size: 1rem !important;
|
|
54
|
-
font-weight: var(--font-weight-medium) !important;
|
|
55
|
-
line-height: 1.5rem !important;
|
|
56
|
-
letter-spacing: 0.15px !important;
|
|
52
|
+
--private-button-font-size: 1rem !important;
|
|
53
|
+
--private-button-font-weight: var(--font-weight-medium) !important;
|
|
54
|
+
--private-button-line-height: 1.5rem !important;
|
|
55
|
+
--private-button-letter-spacing: 0.15px !important;
|
|
57
56
|
}
|
|
58
57
|
|
|
59
58
|
:host([size=lg]),
|
|
60
59
|
:host([size=large]) {
|
|
61
60
|
--button-height: 6rem;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
:host([size=lg]) .button,
|
|
65
|
-
:host([size=large]) .button {
|
|
66
61
|
--private-button-icon-size: 2rem;
|
|
67
62
|
--private-button-container-padding: 3rem;
|
|
68
|
-
font-size: 1.5rem !important;
|
|
69
|
-
font-weight: var(--font-weight-regular) !important;
|
|
70
|
-
line-height: 2rem !important;
|
|
71
|
-
letter-spacing: 0 !important;
|
|
63
|
+
--private-button-font-size: 1.5rem !important;
|
|
64
|
+
--private-button-font-weight: var(--font-weight-regular) !important;
|
|
65
|
+
--private-button-line-height: 2rem !important;
|
|
66
|
+
--private-button-letter-spacing: 0 !important;
|
|
72
67
|
}
|
|
73
68
|
|
|
74
69
|
:host([size=xl]),
|
|
75
70
|
:host([size=extra-large]) {
|
|
76
71
|
--button-height: 8.5rem;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
:host([size=xl]) .button,
|
|
80
|
-
:host([size=extra-large]) .button {
|
|
81
72
|
--private-button-icon-size: 2.5rem;
|
|
82
73
|
--private-button-container-padding: 4rem;
|
|
83
|
-
font-size: 2rem !important;
|
|
84
|
-
font-weight: var(--font-weight-regular) !important;
|
|
85
|
-
line-height: 2.5rem !important;
|
|
86
|
-
letter-spacing: 0 !important;
|
|
74
|
+
--private-button-font-size: 2rem !important;
|
|
75
|
+
--private-button-font-weight: var(--font-weight-regular) !important;
|
|
76
|
+
--private-button-line-height: 2.5rem !important;
|
|
77
|
+
--private-button-letter-spacing: 0 !important;
|
|
87
78
|
}`;
|
|
88
79
|
|
|
89
80
|
/**
|
|
@@ -128,14 +119,14 @@ var css_248z = i`:host([size=xs]),
|
|
|
128
119
|
* ```
|
|
129
120
|
* @tags display
|
|
130
121
|
*/
|
|
131
|
-
let Button = class Button extends
|
|
122
|
+
let Button = class Button extends NativeButtonMixin(NativeHyperlinkMixin(i$1)) {
|
|
132
123
|
constructor() {
|
|
133
124
|
super(...arguments);
|
|
134
125
|
/**
|
|
135
126
|
* Icon alignment.
|
|
136
127
|
* Possible values are `"start"`, `"end"`. Defaults to `"end"`.
|
|
137
128
|
*/
|
|
138
|
-
this.
|
|
129
|
+
this.trailingIcon = false;
|
|
139
130
|
/**
|
|
140
131
|
* Button size.
|
|
141
132
|
* Possible values are `"xs"`, `"sm"`, `"md"`, `"lg"`, `"xl"`. Defaults to `"sm"`.
|
|
@@ -156,21 +147,77 @@ let Button = class Button extends BaseButton {
|
|
|
156
147
|
* Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.
|
|
157
148
|
*/
|
|
158
149
|
this.color = 'primary';
|
|
159
|
-
this.
|
|
150
|
+
this.skeleton = false;
|
|
151
|
+
this.toggle = false;
|
|
152
|
+
this.selected = false;
|
|
153
|
+
/**
|
|
154
|
+
* Sets the delay for throttle in milliseconds. Defaults to 200 milliseconds.
|
|
155
|
+
*/
|
|
156
|
+
this.throttleDelay = 200;
|
|
157
|
+
/**
|
|
158
|
+
* States
|
|
159
|
+
*/
|
|
160
|
+
this.pressed = false;
|
|
161
|
+
// Query the internal control (button or link) on demand instead of
|
|
162
|
+
// keeping a persistent query reference.
|
|
163
|
+
// cleanup functions returned by observerSlotChangesWithCallback
|
|
164
|
+
this.__iconSlotCleanup = null;
|
|
165
|
+
this.__labelSlotCleanup = null;
|
|
166
|
+
this.__handlePress = (event) => {
|
|
167
|
+
if (this.disabled || this.skeleton || this.softDisabled)
|
|
168
|
+
return;
|
|
169
|
+
this.pressed =
|
|
170
|
+
(event instanceof KeyboardEvent &&
|
|
171
|
+
event.type === 'keydown' &&
|
|
172
|
+
(event.key === 'Enter' || event.key === ' ')) ||
|
|
173
|
+
event.type === 'mousedown';
|
|
174
|
+
};
|
|
175
|
+
this.__dispatchClickWithThrottle = event => {
|
|
176
|
+
this.__dispatchClick(event);
|
|
177
|
+
};
|
|
178
|
+
this.__dispatchClick = (event) => {
|
|
179
|
+
// If the button is soft-disabled or a disabled link, we need to explicitly
|
|
180
|
+
// prevent the click from propagating to other event listeners as well as
|
|
181
|
+
// prevent the default action.
|
|
182
|
+
if (this.softDisabled || (this.disabled && this.href) || this.skeleton) {
|
|
183
|
+
event.stopImmediatePropagation();
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const control = this.getControl();
|
|
188
|
+
if (!isActivationClick(event) || !control) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (this.toggle) {
|
|
192
|
+
this.selected = !this.selected;
|
|
193
|
+
}
|
|
194
|
+
this.focus();
|
|
195
|
+
dispatchActivationClick(control);
|
|
196
|
+
};
|
|
160
197
|
}
|
|
161
198
|
focus() {
|
|
162
|
-
this.
|
|
199
|
+
this.getControl()?.focus();
|
|
163
200
|
}
|
|
164
201
|
blur() {
|
|
165
|
-
this.
|
|
202
|
+
this.getControl()?.blur();
|
|
166
203
|
}
|
|
167
204
|
firstUpdated() {
|
|
168
205
|
this.__dispatchClickWithThrottle = throttle(this.__dispatchClick, this.throttleDelay);
|
|
169
|
-
observerSlotChangesWithCallback(this.renderRoot.querySelector('slot'), hasContent => {
|
|
170
|
-
this.slotHasContent = hasContent;
|
|
171
|
-
this.requestUpdate();
|
|
172
|
-
});
|
|
173
206
|
this.__convertTypeToVariantAndColor();
|
|
207
|
+
// Initialize slot presence tracking for smooth transitions when label/icon are added/removed
|
|
208
|
+
const iconSlot = this.renderRoot.querySelector('slot[name="icon"]');
|
|
209
|
+
const labelSlot = this.renderRoot.querySelector('slot.label');
|
|
210
|
+
// Use MutationObserver-based helper so we react to content/character changes
|
|
211
|
+
if (iconSlot) {
|
|
212
|
+
this.__iconSlotCleanup = observerSlotChangesWithCallback(iconSlot, has => {
|
|
213
|
+
this.toggleAttribute('has-icon', has);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (labelSlot) {
|
|
217
|
+
this.__labelSlotCleanup = observerSlotChangesWithCallback(labelSlot, has => {
|
|
218
|
+
this.toggleAttribute('has-label', has);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
174
221
|
}
|
|
175
222
|
__convertTypeToVariantAndColor() {
|
|
176
223
|
if (this.type === 'primary') {
|
|
@@ -191,107 +238,160 @@ let Button = class Button extends BaseButton {
|
|
|
191
238
|
}
|
|
192
239
|
}
|
|
193
240
|
render() {
|
|
241
|
+
const buttonId = isLink(this) ? 'link' : 'button';
|
|
242
|
+
return b `
|
|
243
|
+
<wc-focus-ring class="focus-ring" for=${buttonId}></wc-focus-ring>
|
|
244
|
+
<wc-elevation class="elevation"></wc-elevation>
|
|
245
|
+
${n(this.variant === 'neo', () => b `<div class="neo-background"></div>`)}
|
|
246
|
+
<div class="background"></div>
|
|
247
|
+
${n(this.variant === 'outlined' || this.variant === 'neo', () => b `<div class="outline"></div>`)}
|
|
248
|
+
<wc-ripple class="ripple" for=${buttonId}></wc-ripple>
|
|
249
|
+
<wc-skeleton class="skeleton"></wc-skeleton>
|
|
250
|
+
|
|
251
|
+
${this.renderButtonElement()} ${this.__renderTooltip()}
|
|
252
|
+
`;
|
|
253
|
+
}
|
|
254
|
+
renderButtonElement() {
|
|
255
|
+
const isElementLink = isLink(this);
|
|
194
256
|
const cssClasses = {
|
|
195
257
|
button: true,
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
disabled: this.disabled || this.softDisabled,
|
|
200
|
-
pressed: this.isPressed,
|
|
201
|
-
'has-content': this.slotHasContent,
|
|
202
|
-
'show-skeleton': this.skeleton,
|
|
203
|
-
[`icon-align-${this.iconAlign}`]: true,
|
|
258
|
+
'native-button': !isElementLink,
|
|
259
|
+
'native-link': isElementLink,
|
|
260
|
+
'trailing-icon': this.trailingIcon,
|
|
204
261
|
};
|
|
205
|
-
if (
|
|
206
|
-
cssClasses['native-button'] = true;
|
|
207
|
-
return b `<button
|
|
208
|
-
class=${e(cssClasses)}
|
|
209
|
-
id="button"
|
|
210
|
-
type=${this.htmlType}
|
|
211
|
-
@click=${this.__dispatchClickWithThrottle}
|
|
212
|
-
@mousedown=${this.__handlePress}
|
|
213
|
-
@keydown=${this.__handlePress}
|
|
214
|
-
@keyup=${this.__handlePress}
|
|
215
|
-
|
|
216
|
-
aria-describedby=${o(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}
|
|
217
|
-
?aria-disabled=${this.softDisabled}
|
|
218
|
-
|
|
219
|
-
?disabled=${this.disabled}
|
|
220
|
-
${spread(this.configAria)}
|
|
221
|
-
>
|
|
222
|
-
${this.renderButtonContent()}
|
|
223
|
-
</button>
|
|
224
|
-
${this.__renderTooltip()}`;
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
cssClasses['native-link'] = true;
|
|
262
|
+
if (isElementLink) {
|
|
228
263
|
return b `<a
|
|
229
264
|
class=${e(cssClasses)}
|
|
230
|
-
id="
|
|
265
|
+
id="link"
|
|
231
266
|
href=${this.href}
|
|
232
267
|
target=${this.target}
|
|
233
268
|
tabindex=${this.disabled ? '-1' : '0'}
|
|
234
|
-
|
|
235
269
|
@click=${this.__dispatchClick}
|
|
236
270
|
@mousedown=${this.__handlePress}
|
|
237
271
|
@keydown=${this.__handlePress}
|
|
238
272
|
@keyup=${this.__handlePress}
|
|
239
273
|
role="button"
|
|
240
|
-
|
|
241
|
-
aria-describedby=${o(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}
|
|
274
|
+
aria-describedby=${o(this.softDisabled ? DISABLED_REASON_ID : undefined)}
|
|
242
275
|
?aria-disabled=${this.softDisabled}
|
|
243
|
-
|
|
244
276
|
${spread(this.configAria)}
|
|
245
277
|
>
|
|
246
278
|
${this.renderButtonContent()}
|
|
247
|
-
</a
|
|
248
|
-
${this.__renderTooltip()}`;
|
|
279
|
+
</a>`;
|
|
249
280
|
}
|
|
281
|
+
return b `<button
|
|
282
|
+
class=${e(cssClasses)}
|
|
283
|
+
id="button"
|
|
284
|
+
type=${this.htmlType}
|
|
285
|
+
@click=${this.__dispatchClickWithThrottle}
|
|
286
|
+
@mousedown=${this.__handlePress}
|
|
287
|
+
@keydown=${this.__handlePress}
|
|
288
|
+
@keyup=${this.__handlePress}
|
|
289
|
+
aria-describedby=${o(this.softDisabled ? DISABLED_REASON_ID : undefined)}
|
|
290
|
+
?aria-disabled=${this.softDisabled}
|
|
291
|
+
?disabled=${this.disabled}
|
|
292
|
+
${spread(this.configAria)}
|
|
293
|
+
>
|
|
294
|
+
${this.renderButtonContent()}
|
|
295
|
+
</button>
|
|
296
|
+
${this.__renderTooltip()}`;
|
|
250
297
|
}
|
|
251
298
|
renderButtonContent() {
|
|
252
|
-
return b `
|
|
253
|
-
<
|
|
254
|
-
<
|
|
255
|
-
<div class="neo-background"></div>
|
|
256
|
-
<div class="background"></div>
|
|
257
|
-
<div class="outline"></div>
|
|
258
|
-
<wc-ripple class="ripple"></wc-ripple>
|
|
259
|
-
<wc-skeleton class="skeleton"></wc-skeleton>
|
|
260
|
-
|
|
261
|
-
<div class="button-content">
|
|
262
|
-
<div class="slot-container">
|
|
263
|
-
<slot></slot>
|
|
264
|
-
</div>
|
|
299
|
+
return b ` <slot class="icon-slot" name="icon"></slot>
|
|
300
|
+
<slot class="label"></slot>
|
|
301
|
+
<div class="touch"></div>
|
|
265
302
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
303
|
+
${this.__renderDisabledReason(this.softDisabled)}`;
|
|
304
|
+
}
|
|
305
|
+
connectedCallback() {
|
|
306
|
+
super.connectedCallback();
|
|
307
|
+
this.addEventListener('click', this.__dispatchClickWithThrottle);
|
|
308
|
+
window.addEventListener('mouseup', this.__handlePress);
|
|
309
|
+
}
|
|
310
|
+
disconnectedCallback() {
|
|
311
|
+
// disconnect slot observers first to avoid callbacks during teardown
|
|
312
|
+
try {
|
|
313
|
+
this.__iconSlotCleanup?.();
|
|
314
|
+
}
|
|
315
|
+
catch (e) {
|
|
316
|
+
/* ignore */
|
|
317
|
+
}
|
|
318
|
+
try {
|
|
319
|
+
this.__labelSlotCleanup?.();
|
|
320
|
+
}
|
|
321
|
+
catch (e) {
|
|
322
|
+
/* ignore */
|
|
323
|
+
}
|
|
324
|
+
window.removeEventListener('mouseup', this.__handlePress);
|
|
325
|
+
this.removeEventListener('click', this.__dispatchClickWithThrottle);
|
|
326
|
+
super.disconnectedCallback();
|
|
327
|
+
}
|
|
328
|
+
getControl() {
|
|
329
|
+
return (this.renderRoot?.querySelector('#button') ??
|
|
330
|
+
this.renderRoot?.querySelector('#link'));
|
|
331
|
+
}
|
|
332
|
+
__renderDisabledReason(softDisabled) {
|
|
333
|
+
if (softDisabled)
|
|
334
|
+
return b `<div
|
|
335
|
+
id=${DISABLED_REASON_ID}
|
|
336
|
+
role="tooltip"
|
|
337
|
+
aria-label=${this.disabledReason}
|
|
338
|
+
class="screen-reader-only"
|
|
339
|
+
>
|
|
340
|
+
${this.disabledReason}
|
|
341
|
+
</div>`;
|
|
342
|
+
return A;
|
|
343
|
+
}
|
|
344
|
+
__renderTooltip() {
|
|
345
|
+
if (this.tooltip) {
|
|
346
|
+
const buttonId = isLink(this) ? 'link' : 'button';
|
|
347
|
+
return b `<wc-tooltip class="tooltip" for=${buttonId}>${this.tooltip}</wc-tooltip>`;
|
|
348
|
+
}
|
|
349
|
+
return A;
|
|
271
350
|
}
|
|
272
351
|
};
|
|
273
|
-
Button.styles = [
|
|
352
|
+
Button.styles = [
|
|
353
|
+
css_248z$2,
|
|
354
|
+
css_248z$3,
|
|
355
|
+
css_248z$1,
|
|
356
|
+
css_248z,
|
|
357
|
+
css_248z$4,
|
|
358
|
+
];
|
|
274
359
|
__decorate([
|
|
275
|
-
n({ attribute: 'icon
|
|
276
|
-
], Button.prototype, "
|
|
360
|
+
n$1({ type: Boolean, reflect: true, attribute: 'trailing-icon' })
|
|
361
|
+
], Button.prototype, "trailingIcon", void 0);
|
|
277
362
|
__decorate([
|
|
278
|
-
n({ reflect: true })
|
|
363
|
+
n$1({ reflect: true })
|
|
279
364
|
], Button.prototype, "size", void 0);
|
|
280
365
|
__decorate([
|
|
281
|
-
n({ type: String })
|
|
366
|
+
n$1({ type: String })
|
|
282
367
|
], Button.prototype, "type", void 0);
|
|
283
368
|
__decorate([
|
|
284
|
-
n()
|
|
369
|
+
n$1({ reflect: true })
|
|
285
370
|
], Button.prototype, "variant", void 0);
|
|
286
371
|
__decorate([
|
|
287
|
-
n({ reflect: true })
|
|
372
|
+
n$1({ reflect: true })
|
|
288
373
|
], Button.prototype, "color", void 0);
|
|
289
374
|
__decorate([
|
|
290
|
-
n({ reflect: true })
|
|
375
|
+
n$1({ reflect: true })
|
|
291
376
|
], Button.prototype, "configAria", void 0);
|
|
292
377
|
__decorate([
|
|
293
|
-
|
|
294
|
-
], Button.prototype, "
|
|
378
|
+
n$1({ type: Boolean, reflect: true })
|
|
379
|
+
], Button.prototype, "skeleton", void 0);
|
|
380
|
+
__decorate([
|
|
381
|
+
n$1({ type: Boolean, reflect: true })
|
|
382
|
+
], Button.prototype, "toggle", void 0);
|
|
383
|
+
__decorate([
|
|
384
|
+
n$1({ type: Boolean, reflect: true })
|
|
385
|
+
], Button.prototype, "selected", void 0);
|
|
386
|
+
__decorate([
|
|
387
|
+
n$1()
|
|
388
|
+
], Button.prototype, "throttleDelay", void 0);
|
|
389
|
+
__decorate([
|
|
390
|
+
n$1()
|
|
391
|
+
], Button.prototype, "tooltip", void 0);
|
|
392
|
+
__decorate([
|
|
393
|
+
n$1({ type: Boolean, reflect: true })
|
|
394
|
+
], Button.prototype, "pressed", void 0);
|
|
295
395
|
Button = __decorate([
|
|
296
396
|
IndividualComponent
|
|
297
397
|
], Button);
|
package/dist/button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sources":["../../src/button/button/button.ts"],"sourcesContent":["import { html } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './button.scss';\nimport colorStyles from './button-colors.scss';\nimport sizeStyles from './button-sizes.scss';\nimport { observerSlotChangesWithCallback } from '@/__utils/observe-slot-change.js';\nimport { throttle } from '@/__utils/throttle.js';\nimport { spread } from '@/__directive/spread.js';\nimport { BaseButton } from '../BaseButton.js';\n\n/**\n * @label Button\n * @tag wc-button\n * @rawTag button\n *\n * @summary Buttons help people initiate actions, from sending an email, to sharing a document, to liking a post.\n * @overview\n * <p>Buttons are clickable elements that are used to trigger actions. They communicate calls to action to the user and allow users to interact with pages in a variety of ways. Button labels express what action will occur when the user interacts with it.</p>\n *\n * @cssprop --button-container-shape: Defines the border radius of the button container shape.\n *\n * @cssprop --button-container-shape-start-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-start-end: Defines the end position of the button container shape.\n * @cssprop --button-container-shape-end-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-end-end: Defines the end position of the button container shape.\n *\n *\n * @cssprop --filled-button-container-color: Color of the filled button container.\n * @cssprop --filled-button-label-text-color: Text color of the filled button label.\n *\n * @cssprop --outlined-button-container-color: Color of the outlined button container.\n * @cssprop --outlined-button-label-text-color: Text color of the outlined button label.\n *\n * @cssprop --text-button-label-text-color: Text color of the text button label.\n *\n * @cssprop --tonal-button-container-color: Color of the tonal button container.\n * @cssprop --tonal-button-label-text-color: Text color of the tonal button label.\n *\n * @cssprop --elevated-button-container-color: Color of the elevated button container.\n * @cssprop --elevated-button-label-text-color: Text color of the elevated button label.\n *\n * @cssprop --neo-button-container-color: Color of the neo button container.\n * @cssprop --neo-button-label-text-color: Text color of the neo button label.\n *\n * @fires {MouseEvent} click - Dispatched when the button is clicked.\n *\n * @example\n * ```html\n * <wc-button>Button</wc-button>\n * ```\n * @tags display\n */\n@IndividualComponent\nexport class Button extends BaseButton {\n static override styles = [styles, colorStyles, sizeStyles];\n\n /**\n * Icon alignment.\n * Possible values are `\"start\"`, `\"end\"`. Defaults to `\"end\"`.\n */\n @property({ attribute: 'icon-align' })\n iconAlign: 'start' | 'end' = 'end';\n\n /**\n * Button size.\n * Possible values are `\"xs\"`, `\"sm\"`, `\"md\"`, `\"lg\"`, `\"xl\"`. Defaults to `\"sm\"`.\n */\n @property({ reflect: true }) size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * Type is preset of color and variant. Type will be only applied.\n *\n */\n @property({ type: String }) type?: 'primary' | 'secondary' | 'tertiary';\n\n /**\n * The visual style of the button.\n *\n * Possible variant values:\n * `\"filled\"` is a filled button.\n * `\"outlined\"` is an outlined button.\n * `\"text\"` is a transparent button.\n * `\"tonal\"` is a light color button.\n * `\"elevated\"` is elevated button\n */\n @property() variant:\n | 'elevated'\n | 'filled'\n | 'tonal'\n | 'outlined'\n | 'text'\n | 'neo' = 'filled';\n\n /**\n * Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.\n */\n @property({ reflect: true }) color:\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'surface'\n | 'on-surface' = 'primary';\n\n /**\n * Additional ARIA attributes to pass to the inner button/anchor element.\n */\n @property({ reflect: true })\n configAria?: { [key: string]: any };\n\n @state()\n private slotHasContent = false;\n\n override focus() {\n this.buttonElement?.focus();\n }\n\n override blur() {\n this.buttonElement?.blur();\n }\n\n override firstUpdated() {\n this.__dispatchClickWithThrottle = throttle(\n this.__dispatchClick,\n this.throttleDelay,\n );\n observerSlotChangesWithCallback(\n this.renderRoot.querySelector('slot'),\n hasContent => {\n this.slotHasContent = hasContent;\n this.requestUpdate();\n },\n );\n\n this.__convertTypeToVariantAndColor();\n }\n\n __convertTypeToVariantAndColor() {\n if (this.type === 'primary') {\n this.color = 'primary';\n this.variant = 'filled';\n } else if (this.type === 'secondary') {\n this.color = 'surface';\n this.variant = 'filled';\n } else if (this.type === 'tertiary') {\n this.color = 'primary';\n this.variant = 'text';\n } else if (this.type === 'danger') {\n this.color = 'danger';\n this.variant = 'filled';\n }\n }\n\n override render() {\n\n const cssClasses: any = {\n button: true,\n [`size-${this.size}`]: true,\n [`variant-${this.variant}`]: true,\n [`color-${this.color}`]: true,\n disabled: this.disabled || this.softDisabled,\n pressed: this.isPressed,\n 'has-content': this.slotHasContent,\n 'show-skeleton': this.skeleton,\n [`icon-align-${this.iconAlign}`]: true,\n };\n\n if (!this.__isLink()) {\n cssClasses['native-button'] = true;\n\n return html`<button\n class=${classMap(cssClasses)}\n id=\"button\"\n type=${this.htmlType}\n @click=${this.__dispatchClickWithThrottle}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n\n aria-describedby=${ifDefined(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}\n ?aria-disabled=${this.softDisabled}\n\n ?disabled=${this.disabled}\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </button>\n ${this.__renderTooltip()}`;\n } else {\n cssClasses['native-link'] = true;\n return html`<a\n class=${classMap(cssClasses)}\n id=\"button\"\n href=${this.href}\n target=${this.target}\n tabindex=${this.disabled ? '-1' : '0'}\n \n @click=${this.__dispatchClick}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n role=\"button\"\n\n aria-describedby=${ifDefined(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}\n ?aria-disabled=${this.softDisabled}\n\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </a>\n ${this.__renderTooltip()}`;\n }\n }\n\n renderButtonContent() {\n return html`\n <wc-focus-ring class=\"focus-ring\" for='button'></wc-focus-ring>\n <wc-elevation class=\"elevation\"></wc-elevation>\n <div class=\"neo-background\"></div>\n <div class=\"background\"></div>\n <div class=\"outline\"></div>\n <wc-ripple class=\"ripple\"></wc-ripple>\n <wc-skeleton class=\"skeleton\"></wc-skeleton>\n\n <div class=\"button-content\">\n <div class=\"slot-container\">\n <slot></slot>\n </div>\n\n <slot name=\"icon\"></slot>\n </div>\n\n ${this.__renderDisabledReason(this.softDisabled)}\n `;\n }\n}\n"],"names":["html","classMap","ifDefined","styles","colorStyles","sizeStyles","property","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button.js","sources":["../../src/button/button/button.ts"],"sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { when } from 'lit/directives/when.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './button.scss';\nimport onlyButton from './only-button.scss';\nimport buttonLayers from './button-layers.scss';\nimport colorStyles from './button-colors.scss';\nimport sizeStyles from './button-sizes.scss';\nimport { throttle } from '@/__utils/throttle.js';\nimport { spread } from '@/__directive/spread.js';\nimport { isLink } from '@/__utils/is-link.js';\nimport { observerSlotChangesWithCallback } from '@/__utils/observe-slot-change.js';\nimport NativeButtonMixin from '@/__mixins/NativeButtonMixin.js';\nimport NativeHyperlinkMixin from '@/__mixins/NativeHyperlinkMixin.js';\nimport { GroupButtonInterface } from '@/button/GroupButtonInterface.js';\nimport {\n dispatchActivationClick,\n isActivationClick,\n} from '@/__utils/dispatch-event-utils.js';\nimport { DISABLED_REASON_ID } from '@/button/ButtonConstants.js';\n\n/**\n * @label Button\n * @tag wc-button\n * @rawTag button\n *\n * @summary Buttons help people initiate actions, from sending an email, to sharing a document, to liking a post.\n * @overview\n * <p>Buttons are clickable elements that are used to trigger actions. They communicate calls to action to the user and allow users to interact with pages in a variety of ways. Button labels express what action will occur when the user interacts with it.</p>\n *\n * @cssprop --button-container-shape: Defines the border radius of the button container shape.\n *\n * @cssprop --button-container-shape-start-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-start-end: Defines the end position of the button container shape.\n * @cssprop --button-container-shape-end-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-end-end: Defines the end position of the button container shape.\n *\n *\n * @cssprop --filled-button-container-color: Color of the filled button container.\n * @cssprop --filled-button-label-text-color: Text color of the filled button label.\n *\n * @cssprop --outlined-button-container-color: Color of the outlined button container.\n * @cssprop --outlined-button-label-text-color: Text color of the outlined button label.\n *\n * @cssprop --text-button-label-text-color: Text color of the text button label.\n *\n * @cssprop --tonal-button-container-color: Color of the tonal button container.\n * @cssprop --tonal-button-label-text-color: Text color of the tonal button label.\n *\n * @cssprop --elevated-button-container-color: Color of the elevated button container.\n * @cssprop --elevated-button-label-text-color: Text color of the elevated button label.\n *\n * @cssprop --neo-button-container-color: Color of the neo button container.\n * @cssprop --neo-button-label-text-color: Text color of the neo button label.\n *\n * @fires {MouseEvent} click - Dispatched when the button is clicked.\n *\n * @example\n * ```html\n * <wc-button>Button</wc-button>\n * ```\n * @tags display\n */\n@IndividualComponent\nexport class Button\n extends NativeButtonMixin(NativeHyperlinkMixin(LitElement))\n implements GroupButtonInterface\n{\n static override styles = [\n buttonLayers,\n styles,\n onlyButton,\n sizeStyles,\n colorStyles,\n ];\n\n /**\n * Icon alignment.\n * Possible values are `\"start\"`, `\"end\"`. Defaults to `\"end\"`.\n */\n @property({ type: Boolean, reflect: true, attribute: 'trailing-icon' })\n trailingIcon = false;\n\n /**\n * Button size.\n * Possible values are `\"xs\"`, `\"sm\"`, `\"md\"`, `\"lg\"`, `\"xl\"`. Defaults to `\"sm\"`.\n */\n @property({ reflect: true }) size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * Type is preset of color and variant. Type will be only applied.\n *\n */\n @property({ type: String }) type?: 'primary' | 'secondary' | 'tertiary';\n\n /**\n * The visual style of the button.\n *\n * Possible variant values:\n * `\"filled\"` is a filled button.\n * `\"outlined\"` is an outlined button.\n * `\"text\"` is a transparent button.\n * `\"tonal\"` is a light color button.\n * `\"elevated\"` is elevated button\n */\n @property({ reflect: true }) variant:\n | 'elevated'\n | 'filled'\n | 'tonal'\n | 'outlined'\n | 'text'\n | 'neo' = 'filled';\n\n /**\n * Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.\n */\n @property({ reflect: true }) color:\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'surface'\n | 'on-surface' = 'primary';\n\n /**\n * Additional ARIA attributes to pass to the inner button/anchor element.\n */\n @property({ reflect: true })\n configAria?: { [key: string]: any };\n\n override focus() {\n this.getControl()?.focus();\n }\n\n override blur() {\n this.getControl()?.blur();\n }\n\n override firstUpdated() {\n this.__dispatchClickWithThrottle = throttle(\n this.__dispatchClick,\n this.throttleDelay,\n );\n\n this.__convertTypeToVariantAndColor();\n // Initialize slot presence tracking for smooth transitions when label/icon are added/removed\n const iconSlot = this.renderRoot.querySelector(\n 'slot[name=\"icon\"]',\n ) as HTMLSlotElement | null;\n const labelSlot = this.renderRoot.querySelector(\n 'slot.label',\n ) as HTMLSlotElement | null;\n\n // Use MutationObserver-based helper so we react to content/character changes\n if (iconSlot) {\n this.__iconSlotCleanup = observerSlotChangesWithCallback(\n iconSlot,\n has => {\n this.toggleAttribute('has-icon', has);\n },\n );\n }\n\n if (labelSlot) {\n this.__labelSlotCleanup = observerSlotChangesWithCallback(\n labelSlot,\n has => {\n this.toggleAttribute('has-label', has);\n },\n );\n }\n }\n\n __convertTypeToVariantAndColor() {\n if (this.type === 'primary') {\n this.color = 'primary';\n this.variant = 'filled';\n } else if (this.type === 'secondary') {\n this.color = 'surface';\n this.variant = 'filled';\n } else if (this.type === 'tertiary') {\n this.color = 'primary';\n this.variant = 'text';\n } else if (this.type === 'danger') {\n this.color = 'danger';\n this.variant = 'filled';\n }\n }\n\n override render() {\n const buttonId = isLink(this) ? 'link' : 'button';\n\n return html`\n <wc-focus-ring class=\"focus-ring\" for=${buttonId}></wc-focus-ring>\n <wc-elevation class=\"elevation\"></wc-elevation>\n ${when(\n this.variant === 'neo',\n () => html`<div class=\"neo-background\"></div>`,\n )}\n <div class=\"background\"></div>\n ${when(\n this.variant === 'outlined' || this.variant === 'neo',\n () => html`<div class=\"outline\"></div>`,\n )}\n <wc-ripple class=\"ripple\" for=${buttonId}></wc-ripple>\n <wc-skeleton class=\"skeleton\"></wc-skeleton>\n\n ${this.renderButtonElement()} ${this.__renderTooltip()}\n `;\n }\n\n renderButtonElement() {\n const isElementLink = isLink(this);\n\n const cssClasses: any = {\n button: true,\n 'native-button': !isElementLink,\n 'native-link': isElementLink,\n 'trailing-icon': this.trailingIcon,\n };\n\n if (isElementLink) {\n return html`<a\n class=${classMap(cssClasses)}\n id=\"link\"\n href=${this.href}\n target=${this.target}\n tabindex=${this.disabled ? '-1' : '0'}\n @click=${this.__dispatchClick}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n role=\"button\"\n aria-describedby=${ifDefined(\n this.softDisabled ? DISABLED_REASON_ID : undefined,\n )}\n ?aria-disabled=${this.softDisabled}\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </a>`;\n }\n return html`<button\n class=${classMap(cssClasses)}\n id=\"button\"\n type=${this.htmlType}\n @click=${this.__dispatchClickWithThrottle}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n aria-describedby=${ifDefined(\n this.softDisabled ? DISABLED_REASON_ID : undefined,\n )}\n ?aria-disabled=${this.softDisabled}\n ?disabled=${this.disabled}\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </button>\n ${this.__renderTooltip()}`;\n }\n\n renderButtonContent() {\n return html` <slot class=\"icon-slot\" name=\"icon\"></slot>\n <slot class=\"label\"></slot>\n <div class=\"touch\"></div>\n\n ${this.__renderDisabledReason(this.softDisabled)}`;\n }\n\n @property({ type: Boolean, reflect: true }) skeleton: boolean = false;\n\n @property({ type: Boolean, reflect: true }) toggle: boolean = false;\n\n @property({ type: Boolean, reflect: true }) selected: boolean = false;\n\n /**\n * Sets the delay for throttle in milliseconds. Defaults to 200 milliseconds.\n */\n @property() throttleDelay = 200;\n\n @property() tooltip?: string;\n\n /**\n * States\n */\n @property({ type: Boolean, reflect: true })\n pressed = false;\n\n // Query the internal control (button or link) on demand instead of\n // keeping a persistent query reference.\n\n // cleanup functions returned by observerSlotChangesWithCallback\n private __iconSlotCleanup: (() => void) | null = null;\n\n private __labelSlotCleanup: (() => void) | null = null;\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('click', this.__dispatchClickWithThrottle);\n window.addEventListener('mouseup', this.__handlePress);\n }\n\n override disconnectedCallback() {\n // disconnect slot observers first to avoid callbacks during teardown\n try {\n this.__iconSlotCleanup?.();\n } catch (e) {\n /* ignore */\n }\n try {\n this.__labelSlotCleanup?.();\n } catch (e) {\n /* ignore */\n }\n\n window.removeEventListener('mouseup', this.__handlePress);\n this.removeEventListener('click', this.__dispatchClickWithThrottle);\n super.disconnectedCallback();\n }\n\n __handlePress = (event: KeyboardEvent | MouseEvent) => {\n if (this.disabled || this.skeleton || this.softDisabled) return;\n this.pressed =\n (event instanceof KeyboardEvent &&\n event.type === 'keydown' &&\n (event.key === 'Enter' || event.key === ' ')) ||\n event.type === 'mousedown';\n };\n\n __dispatchClickWithThrottle: (event: MouseEvent | KeyboardEvent) => void =\n event => {\n this.__dispatchClick(event);\n };\n\n __dispatchClick = (event: MouseEvent | KeyboardEvent) => {\n // If the button is soft-disabled or a disabled link, we need to explicitly\n // prevent the click from propagating to other event listeners as well as\n // prevent the default action.\n if (this.softDisabled || (this.disabled && this.href) || this.skeleton) {\n event.stopImmediatePropagation();\n event.preventDefault();\n return;\n }\n\n const control = this.getControl();\n\n if (!isActivationClick(event) || !control) {\n return;\n }\n\n if (this.toggle) {\n this.selected = !this.selected;\n }\n\n this.focus();\n dispatchActivationClick(control);\n };\n\n private getControl(): HTMLElement | null {\n return (\n (this.renderRoot?.querySelector('#button') as HTMLElement | null) ??\n (this.renderRoot?.querySelector('#link') as HTMLElement | null)\n );\n }\n\n __renderDisabledReason(softDisabled: boolean) {\n if (softDisabled)\n return html`<div\n id=${DISABLED_REASON_ID}\n role=\"tooltip\"\n aria-label=${this.disabledReason}\n class=\"screen-reader-only\"\n >\n ${this.disabledReason}\n </div>`;\n return nothing;\n }\n\n __renderTooltip() {\n if (this.tooltip) {\n const buttonId = isLink(this) ? 'link' : 'button';\n return html`<wc-tooltip class=\"tooltip\" for=${buttonId}>${this.tooltip}</wc-tooltip>`;\n }\n return nothing;\n }\n}\n"],"names":["LitElement","html","when","classMap","ifDefined","nothing","buttonLayers","styles","onlyButton","sizeStyles","colorStyles","property"],"mappings":"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"}
|
|
@@ -297,7 +297,6 @@ var css_248z = i`@charset "UTF-8";
|
|
|
297
297
|
* @label Calendar Column View
|
|
298
298
|
* @tag wc-calendar-column-view
|
|
299
299
|
* @rawTag calendar-column-view
|
|
300
|
-
* @parentRawTag calendar
|
|
301
300
|
* @summary Internal column view component for the calendar (day/week views).
|
|
302
301
|
*/
|
|
303
302
|
let CalendarColumnView = class CalendarColumnView extends i$1 {
|