@gzmjs/button 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.es.js","sources":["../src/010-btn/00-btnBase.ts","../src/010-btn/03-btnClick.ts","../src/010-btn/06-btnLink.ts","../src/010-btn/09-btnCheck.ts","../src/010-btn/12-btnRadio.ts","../src/010-btn/20-btnText.ts","../src/010-btn/23-btnNum.ts","../src/010-btn/26-btnDate.ts","../src/010-btn/29-btnMenu.ts","../src/010-btn/50-btnGroup.ts","../src/010-btn/53-btnBar.ts"],"sourcesContent":["import {type Badge, badgeTagName, baseStyle, boolAttr, createStyleSheet, type Icon, iconTagName, strAttr} from '@gzmjs/ui-basic';\r\nimport {type ViewModel, ViewElement} from '@gzmjs/mvvm';\r\n\r\nexport const styleSheet = createStyleSheet({\r\n '.gzm-btn': {\r\n //如果不设置 line-height,则会导致文本按钮 和 icon-only 按钮的高度不一致。\r\n 'line-height': 'inherit',\r\n //<button> 这类 form 元素,其浏览器默认 font 与文本 font 是不一样的,这里强制其使用文本 font。具体参考 style-font.md。\r\n 'font': 'inherit',\r\n\r\n //允许 btn-group 传入参数\r\n 'border-top-left-radius': 'var(--gzm-left-radius, 0.5rem)',\r\n 'border-bottom-left-radius': 'var(--gzm-left-radius, 0.5rem)',\r\n 'border-top-right-radius': 'var(--gzm-right-radius, 0.5rem)',\r\n 'border-bottom-right-radius': 'var(--gzm-right-radius, 0.5rem)',\r\n\r\n position: 'relative',//为了可能出现的 badge\r\n\r\n //主题\r\n color: 'var(--gzm-btn-txt-color)',\r\n background: 'var(--gzm-btn-background)',\r\n border: 'var(--gzm-btn-border)',\r\n\r\n //btn-link 的 <a>\r\n 'text-decoration': 'none',\r\n 'display': 'inline-block',\r\n\r\n 'padding': '0.375rem 0.75rem',\r\n 'margin': '0px',\r\n 'cursor': 'pointer',\r\n },\r\n '.gzm-btn:active, .gzm-btn:has(>input:checked)': {\r\n color: 'var(--gzm-a-btn-txt-color)',\r\n background: 'var(--gzm-a-btn-background)',\r\n border: 'var(--gzm-a-btn-border)',\r\n },\r\n '.gzm-btn:hover': {\r\n color: 'var(--gzm-h-btn-txt-color)',\r\n background: 'var(--gzm-h-btn-background)',\r\n border: 'var(--gzm-h-btn-border)',\r\n },\r\n '.gzm-btn > :not([hidden]) ~ :not([hidden])': {\r\n 'margin-left': '0.25rem'\r\n },\r\n\r\n //input\r\n '.gzm-btn > input': {\r\n outline: 'none',\r\n 'background-color': 'transparent',\r\n 'border-bottom': '2px solid currentColor',\r\n 'font-weight': 'normal',\r\n 'font-size': '1rem',\r\n 'margin-bottom': '-2px', //只设置 border-b-2 导致整个按钮被撑高,所以用 mb-2px 对冲一下\r\n 'text-align': 'center', \r\n },\r\n '.gzm-btn > input:focus': {\r\n background: 'var(--gzm-a-btn-background)', //高亮显示输入框\r\n color: 'var(--gzm-a-btn-txt-color)',\r\n }\r\n});\r\n\r\nexport interface BtnOptions<E extends BtnBase<BtnOptions<E>>> extends ViewModel<E> {\r\n //label 和 icon 至少要有一个\r\n label?: string;\r\n icon?: string;\r\n iconOnly?: boolean;\r\n};\r\n\r\nexport abstract class BtnBase<T extends BtnOptions<BtnBase<T>>> extends ViewElement<T> {\r\n constructor(noShadow?: boolean) {\r\n super();\r\n\r\n this.$ele = this.createButton()\r\n if (noShadow) return;\r\n \r\n const root = this.attachShadow({ mode: 'open' });\r\n root.adoptedStyleSheets = [baseStyle, styleSheet];\r\n root.appendChild(this.$ele);\r\n }\r\n \r\n protected $ele: HTMLElement; //可能是 <button> <label> <a> 等元素,是所有其他元素的父元素。\r\n protected $ipt?: HTMLInputElement; //<input> 元素\r\n protected $lbl?: HTMLElement; //显示文本的元素\r\n protected $icn?: Icon; //显示图标的元素\r\n protected $bdg?: Badge;\r\n /**\r\n * 以下所有的 create* 方法都是直接或者间接在构造函数中调用。\r\n * 所以不应该判断 attributes 的值。\r\n */\r\n\r\n /**\r\n * 生成 thie.$ele,由子类重写。\r\n * 只在构造函数中调用一次。\r\n */\r\n protected abstract createButton(): HTMLElement;\r\n \r\n protected _createInputFirst(inputType: string): HTMLElement {\r\n const $lbl = document.createElement('label');\r\n $lbl.className = 'gzm-btn';\r\n $lbl.onclick = e => e.stopPropagation();\r\n\r\n this._createInput(inputType, $lbl);\r\n this._createLabel($lbl);\r\n return $lbl;\r\n }\r\n protected _createInputLast(inputType: string): HTMLElement {\r\n const $lbl = document.createElement('label');\r\n $lbl.className = 'gzm-btn';\r\n $lbl.onclick = e => e.stopPropagation();\r\n\r\n this._createLabel($lbl);\r\n this._createInput(inputType, $lbl);\r\n return $lbl;\r\n }\r\n protected _createLabel($ele: HTMLElement): void {\r\n const $lbl = this.$lbl = document.createElement('strong');\r\n $ele.appendChild($lbl);\r\n }\r\n protected _createIcon($ele: HTMLElement): void {\r\n const $icn = this.$icn = document.createElement(iconTagName);\r\n $ele.insertBefore($icn, this.$lbl!); //总是在文本的前面,必须在 spn 之后生成。\r\n }\r\n protected _createInput(inputType: string, $ele: HTMLElement): HTMLInputElement {\r\n const $ipt = this.$ipt = document.createElement('input');\r\n $ipt.type = inputType;\r\n $ipt.name = inputType; //分属不同 shadow DOM,相同 name 的 checkbox 或者 radio 不会被认为一组。设置 name 只是为了 edge 不显示警告。\r\n $ipt.onchange = () => {\r\n this._iptChanged();\r\n this.dispatchEvent(new MouseEvent('click', {bubbles: true}));\r\n }\r\n $ele.appendChild($ipt);\r\n return $ipt;\r\n }\r\n protected _iptChanged(): void {}\r\n\r\n // #region 属性\r\n @strAttr\r\n accessor label: string | undefined;\r\n\r\n @strAttr\r\n accessor icon: string | undefined;\r\n\r\n @boolAttr\r\n accessor iconOnly: boolean = false;\r\n\r\n @strAttr\r\n accessor badge: string | undefined;\r\n\r\n _label_set(newval: string | null): void {\r\n if (this.$lbl) {\r\n this.$lbl.textContent = newval;\r\n }\r\n }\r\n _icon_set(newval: string | null): void {\r\n if (newval) {\r\n if (!this.$icn) {\r\n this._createIcon(this.$ele);\r\n }\r\n this.$icn!.icon = newval;\r\n }\r\n else {\r\n if (this.$icn) {\r\n this.$icn.remove();\r\n this.$icn = void 0;\r\n }\r\n this.iconOnly = false;\r\n }\r\n }\r\n _icon_only_set(): void {\r\n const $lbl = this.$lbl;\r\n if (!$lbl) return;\r\n\r\n if (this.iconOnly && this.icon) {\r\n /** 设置 hidden 属性有 2 个原因:\r\n * 1 - tailwind 本身有 [hidden] {display:none} 的定义,所以只要设置了 hidden 就相当于 class display-hidden。\r\n * 2 - ele 上添加了 space-x-1,经过查看发现::not([hidden]),也就是说设置 hidden 将使其不起作用,只显示一个图标的时候不会留出多余的空间。\r\n * https://devdocs.io/tailwindcss/space\r\n */\r\n\r\n $lbl.hidden = true;\r\n\r\n if (!this.hasAttribute('title') && this.label) {\r\n this.title = this.label;\r\n }\r\n }\r\n else {\r\n $lbl.hidden = false;\r\n\r\n if (this.title === this.label) {\r\n this.title = '';\r\n }\r\n }\r\n }\r\n _badge_set(newval: string | null): void {\r\n if (!newval) {\r\n this.$bdg?.remove();\r\n this.$bdg = void 0;\r\n return;\r\n }\r\n\r\n if (!this.$bdg) {\r\n this.$bdg = document.createElement(badgeTagName);\r\n this.$bdg.corner = true;\r\n this.$ele.append(this.$bdg);\r\n }\r\n this.$bdg.badge = newval;\r\n }\r\n // #endregion\r\n}","import * as BTN from './00-btnBase';\r\nimport { defineElement, type AttributeHandlers } from '@gzmjs/ui-basic';\r\n\r\nexport const tagName = 'GZM-BTN-CLICK';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: ClickButton;\r\n }\r\n}\r\n\r\nexport interface ClickBtnOptions extends BTN.BtnOptions<ClickButton> {\r\n readonly tag?: 'click';\r\n badge?: string;\r\n onclick?: (this: ClickBtnOptions, ev: MouseEvent, vm: ClickBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only', 'badge'] as const;\r\n\r\n@defineElement({tagName, mutableAttributes})\r\nexport class ClickButton extends BTN.BtnBase<ClickBtnOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n protected createButton(): HTMLElement {\r\n const $btn = document.createElement('button');\r\n $btn.type = 'button';\r\n $btn.className = 'gzm-btn';\r\n\r\n this._createLabel($btn);\r\n return $btn;\r\n }\r\n}","import * as BTN from './00-btnBase';\r\nimport { defineElement, strAttr } from '@gzmjs/ui-basic';\r\n\r\nexport const tagName = 'GZM-BTN-LINK';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: LinkButton;\r\n }\r\n}\r\n\r\nexport interface LinkBtnOptions extends BTN.BtnOptions<LinkButton> {\r\n readonly tag?: 'link';\r\n badge?: string;\r\n href: string; \r\n target?: string;\r\n onclick?: (this: LinkBtnOptions, ev: MouseEvent, vm: LinkBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only', 'href', 'target'] as const;\r\nconst copyAttributes = {\r\n href: '$ele',\r\n target: '$ele'\r\n};\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class LinkButton extends BTN.BtnBase<LinkBtnOptions> {\r\n protected createButton(): HTMLElement {\r\n const $a = document.createElement('a');\r\n $a.className = 'gzm-btn';\r\n $a.target = this.target ?? '_blank';\r\n this._createLabel($a);\r\n return $a;\r\n }\r\n\r\n @strAttr\r\n accessor href: string | undefined;\r\n\r\n @strAttr\r\n accessor target: string | undefined;\r\n}","import * as BTN from './00-btnBase';\r\nimport {defineElement, type AttributeHandlers} from '@gzmjs/ui-basic';\r\n\r\nexport const tagName = 'GZM-BTN-CHECK';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: CheckButton;\r\n }\r\n}\r\n\r\nexport interface CheckBtnOptions extends BTN.BtnOptions<CheckButton> {\r\n readonly tag?: 'check';\r\n checked?: boolean;\r\n onclick?: (this: CheckBtnOptions, ev: MouseEvent, vm: CheckBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only'] as const;\r\n\r\n@defineElement({tagName, mutableAttributes})\r\nexport class CheckButton extends BTN.BtnBase<CheckBtnOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n protected createButton(): HTMLElement {\r\n return this._createInputFirst('checkbox');\r\n }\r\n\r\n protected _iptChanged(): void {\r\n this.setModelProperty('checked', this.checked);\r\n }\r\n\r\n public get checked(): boolean {return this.$ipt!.checked;}\r\n public set checked(v: boolean) {this.$ipt!.checked = v;}\r\n}","import * as BTN from './00-btnBase';\r\nimport {defineElement, type AttributeHandlers} from '@gzmjs/ui-basic';\r\n\r\n/**\r\n * 此组件不宜单独使用,应该配合 btnGroup 使用。原因有2:\r\n * 1 - <input type=radio> 在各自的 shadow dom 中,即使 name 属性相同,也不会形成一个互斥组。\r\n * 所以只能不使用 shadow dom,封装性被破坏。\r\n * 2 - radio 的特性:单个 radio 选中后就无法取消选中,没有实用价值。\r\n */\r\n\r\nexport const tagName = 'GZM-BTN-RADIO';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: RadioButton;\r\n }\r\n}\r\n\r\nexport interface RadioBtnOptions extends BTN.BtnOptions<RadioButton> {\r\n readonly tag?: 'radio';\r\n checked?: boolean;\r\n onclick?: (this: RadioBtnOptions, ev: MouseEvent, vm: RadioBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only'] as const;\r\n\r\n/**\r\n * 因为没有使用 shadow,所以需要输出 .gzm-btn 的样式定义。\r\n * 这样就允许网页上的任意一个按钮使用 .gzm-btn 类名,就会获得相同的样式。\r\n */\r\n@defineElement({tagName, mutableAttributes})\r\nexport class RadioButton extends BTN.BtnBase<RadioBtnOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n constructor() {\r\n super(true);\r\n }\r\n connectedCallback(): void {\r\n if (!this.$ele.parentElement) {\r\n this.append(this.$ele);\r\n }\r\n }\r\n\r\n protected createButton(): HTMLElement {\r\n return this._createInputFirst('radio');\r\n }\r\n\r\n protected _iptChanged(): void {\r\n this.setModelProperty('checked', this.checked);\r\n }\r\n\r\n public get checked(): boolean {return this.$ipt!.checked;}\r\n public set checked(v: boolean) {this.$ipt!.checked = v;}\r\n}","import * as BTN from './00-btnBase';\r\nimport {defineElement, intAttr, strAttr} from '@gzmjs/ui-basic';\r\n\r\nexport const tagName = 'GZM-BTN-TEXT';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: TextButton;\r\n }\r\n}\r\n\r\nexport interface TextBtnOptions extends BTN.BtnOptions<TextButton> {\r\n readonly tag?: 'text';\r\n type?: 'text' | 'tel' | 'url' | 'email' | 'search' | 'password';\r\n maxlength?: number;\r\n minlength?: number;\r\n pattern?: string;\r\n placeholder?: string;\r\n size?: number;\r\n value?: string;\r\n onclick?: (this: TextBtnOptions, ev: MouseEvent, vm: TextBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only', 'type', 'maxlength', 'minlength', 'pattern', 'placeholder', 'size'];\r\n\r\nconst iptOfBtn = ['$ipt'];\r\nconst copyAttributes = {//因为有这个不必实现 ELE.AttributeHandlers\r\n type: iptOfBtn,\r\n maxlength: iptOfBtn,\r\n minlength: iptOfBtn,\r\n size: iptOfBtn,\r\n pattern: iptOfBtn,\r\n placeholder: iptOfBtn\r\n};\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class TextButton extends BTN.BtnBase<TextBtnOptions> {\r\n protected createButton(): HTMLElement {\r\n return this._createInputLast(this.type ?? 'text');\r\n }\r\n\r\n protected _iptChanged(): void {\r\n this.setModelProperty('value', this.value);\r\n }\r\n\r\n @strAttr\r\n accessor type: string | undefined;\r\n\r\n @intAttr\r\n accessor maxlength: number | undefined;\r\n \r\n @intAttr\r\n accessor minlength: number | undefined;\r\n \r\n @strAttr\r\n accessor pattern: string | undefined;\r\n\r\n @strAttr\r\n accessor placeholder: string | undefined;\r\n\r\n @intAttr\r\n accessor size: number | undefined; //https://devdocs.io/dom/htmlinputelement/size\r\n\r\n public get value(): string {return this.$ipt!.value;}\r\n public set value(v: string) {this.$ipt!.value = v;}\r\n}","import * as BTN from './00-btnBase';\r\nimport {defineElement, strAttr} from '@gzmjs/ui-basic';\r\n\r\nexport const tagName = 'GZM-BTN-NUM';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: NumButton;\r\n }\r\n}\r\n\r\nexport interface NumBtnOptions extends BTN.BtnOptions<NumButton> {\r\n readonly tag?: 'num';\r\n type?: 'number';\r\n max?: string;//不一定是整数,所以还是作为字符串吧\r\n min?: string;\r\n step?: string;\r\n placeholder?: string;\r\n value?: number;\r\n onclick?: (this: NumBtnOptions, ev: MouseEvent, vm: NumBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only', 'max', 'min', 'step', 'placeholder'] as const;\r\n\r\nconst iptOfBtn = ['$ipt'];\r\nconst copyAttributes = {//因为有这个不必实现 ELE.AttributeHandlers\r\n max: iptOfBtn,\r\n min: iptOfBtn,\r\n step: iptOfBtn,\r\n placeholder: iptOfBtn,\r\n};\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class NumButton extends BTN.BtnBase<NumBtnOptions> {\r\n protected createButton(): HTMLElement {\r\n return this._createInputLast('number');\r\n }\r\n\r\n protected _iptChanged(): void {\r\n this.setModelProperty('value', this.value);\r\n }\r\n\r\n @strAttr\r\n accessor max: string | undefined;\r\n \r\n @strAttr\r\n accessor min: string | undefined;\r\n \r\n @strAttr\r\n accessor step: string | undefined; //https://devdocs.io/dom/htmlinputelement/step\r\n\r\n @strAttr\r\n accessor placeholder: string | undefined;\r\n\r\n public get value(): number {return this.$ipt!.valueAsNumber;}\r\n public set value(v: number) {this.$ipt!.valueAsNumber = v;}\r\n}","import * as BTN from './00-btnBase';\r\nimport {defineElement, strAttr} from '@gzmjs/ui-basic';\r\n\r\nexport const tagName = 'GZM-BTN-DATE';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: DateButton;\r\n }\r\n}\r\n\r\nexport interface DateBtnOptions extends BTN.BtnOptions<DateButton> {\r\n readonly tag?: 'date';\r\n type?: 'date' | 'datetime-local' | 'time' | 'week' | 'month';\r\n max?: string;\r\n min?: string;\r\n step?: string;\r\n value?: string;\r\n onclick?: (this: DateBtnOptions, ev: MouseEvent, vm: DateBtnOptions) => unknown;\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only', 'type', 'max', 'min', 'step'] as const;\r\n\r\nconst iptOfBtn = ['$ipt'];\r\nconst copyAttributes = {//因为有这个不必实现 ELE.AttributeHandlers\r\n type: iptOfBtn,\r\n max: iptOfBtn,\r\n min: iptOfBtn,\r\n step: iptOfBtn,\r\n};\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class DateButton extends BTN.BtnBase<DateBtnOptions> {\r\n protected createButton(): HTMLElement {\r\n return this._createInputLast(this.type ?? 'date');\r\n }\r\n\r\n protected _iptChanged(): void {\r\n this.setModelProperty('value', this.value);\r\n }\r\n\r\n @strAttr\r\n accessor type: string | undefined;\r\n\r\n @strAttr\r\n accessor max: string | undefined;\r\n \r\n @strAttr\r\n accessor min: string | undefined;\r\n \r\n @strAttr\r\n accessor step: string | undefined; //https://devdocs.io/dom/htmlinputelement/step\r\n\r\n /**\r\n * 考虑过使用 <input>.valueAsDate 属性,但是在 type=datetime-local 时发生异常\r\n */\r\n public get value(): string {return this.$ipt!.value;}\r\n public set value(v: string) {this.$ipt!.value = v;}\r\n}","import * as BTN from './00-btnBase';\r\nimport {defineElement, xy, type AttributeHandlers} from '@gzmjs/ui-basic';\r\nimport { type MiOptions, createMenu } from '@gzmjs/menu';\r\n\r\nexport const tagName = 'GZM-BTN-MENU';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: MenuButton;\r\n }\r\n}\r\n\r\nexport interface MenuBtnOptions extends BTN.BtnOptions<MenuButton> {\r\n readonly tag?: 'menu';\r\n badge?: string;\r\n subItems?: MiOptions[];\r\n\r\n /**\r\n * 如果没有设置 subItems,那么就会调用此函数来获得菜单。\r\n * @returns \r\n */\r\n beforeShowMenu?: () => MiOptions[];\r\n}\r\n\r\nconst mutableAttributes = ['label', 'icon', 'icon-only', 'badge'] as const;\r\n\r\n@defineElement({tagName, mutableAttributes})\r\nexport class MenuButton extends BTN.BtnBase<MenuBtnOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n protected createButton(): HTMLElement {\r\n const $btn = document.createElement('button');\r\n $btn.type = 'button';\r\n $btn.className = 'gzm-btn';\r\n $btn.onclick = () => {\r\n const m = this.model;\r\n if (!m) return;\r\n\r\n const sis = m.subItems ?? m.beforeShowMenu?.();\r\n if (sis) {\r\n const $sm = createMenu(...sis);\r\n $sm.show(this, xy.rightBottom, xy.rightTop);\r\n }\r\n };\r\n\r\n this._createLabel($btn);\r\n\r\n const $s = document.createElement('small');\r\n $s.textContent = '▼'; //原来用 <span> + '⋮',但是其高度大于一般字符,导致按钮被撑高!?可能与字体有关。\r\n $btn.appendChild($s);\r\n\r\n return $btn;\r\n }\r\n}","import { strAttr, createStyleSheet, defineElement, type AttributeHandlers, baseStyle } from '@gzmjs/ui-basic';\r\nimport {type ViewListModel, ViewListElement} from '@gzmjs/mvvm';\r\nimport type { MiOptions } from '@gzmjs/menu';\r\nimport * as BB from './00-btnBase';\r\nimport type { CheckBtnOptions } from './09-btnCheck';\r\nimport type { ClickBtnOptions } from './03-btnClick';\r\nimport type { DateBtnOptions } from './26-btnDate';\r\nimport type { LinkBtnOptions } from './06-btnLink';\r\nimport { type MenuBtnOptions, type MenuButton, tagName as menuBtnTagName } from './29-btnMenu';\r\nimport type { NumBtnOptions } from './23-btnNum';\r\nimport type { RadioBtnOptions } from './12-btnRadio';\r\nimport type { TextBtnOptions } from './20-btnText';\r\n\r\nexport type AllBtnOptions = ClickBtnOptions | LinkBtnOptions | CheckBtnOptions | RadioBtnOptions | TextBtnOptions | NumBtnOptions | DateBtnOptions | MenuBtnOptions;\r\n\r\n/* 按钮组的第一个和最后一个按钮有圆角,其他都没有! \r\n* *:first-child/last-child 是在按钮被封装在自定义标签之后定义的,* 代表的就是按钮的标签。\r\n* 本来打算用 :not([hidden]) 来做到排除隐藏的第一个或者最后一个按钮,但是不起作用。\r\n* 因为无法达到这样的效果:先用 :not([hidden]) 过滤一遍,然后再取 :first-child 或者 :last-child。\r\n* \r\n* 新的思路是:之后(next)的按钮有:not(hidden)的,不要右侧圆角;之前(prev)的按钮有:not(hidden)的,不要左侧圆角。\r\n* 但是表达 sibling 的 + 和 ~ 都只能表达 next,而无法表达 prev,所以表达 prev 必须使用 :has()。\r\n* https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors/Combinators\r\n*/\r\nconst styleSheet = createStyleSheet({\r\n /* 本以为能够将所有按钮高度一致,但没有用\r\n ':host': `\r\n display: inline-flex;\r\n `,*/\r\n ':host > :not([hidden]) ~ *': `\r\n --gzm-left-radius: 0px;\r\n `,\r\n ':host > *:has(~ :not([hidden]))': `\r\n --gzm-right-radius: 0px;\r\n `\r\n});\r\n\r\n/**\r\n * 当在 btn-bar 中且有许多按钮,导致无法在一行中显示的时候,就需要折叠按钮组。\r\n * 一开始是正常状态:normal,每一个按钮都按 AllBtnOptions 的设置显示。\r\n * 调用 fold() 开始折叠,从 normal -> icon-only,即只要有 icon,就强制设置 icon-only。\r\n * 从 icon-only -> menu-btn,即只显示一个按钮,其他按钮都作为菜单项,点击后才显示。\r\n * 由于菜单项只能是 click | link | check | radio,所以只有这 4 种按钮可以折叠。\r\n */\r\nconst foldStates = ['normal', 'icon-only', 'menu-btn'] as const;\r\ntype FoldStateType = typeof foldStates[number];\r\n\r\nexport const btnBarAlign = ['left', 'center', 'right'] as const;\r\ntype BtnBarAlign = typeof btnBarAlign[number];\r\n\r\nexport const tagName = 'GZM-BTN-GROUP';\r\nexport interface BtnGroupOptions extends ViewListModel<AllBtnOptions, BB.BtnBase<AllBtnOptions>, BtnGroup> {\r\n /**\r\n * 缩成一个 btn-menu 时显示的文本\r\n */\r\n label?: string;\r\n\r\n /**\r\n * 在 btn-bar 中使用时对应的 slot.name\r\n */\r\n slot: BtnBarAlign;\r\n\r\n /**\r\n * 折叠状态\r\n */\r\n foldState?: FoldStateType;\r\n}\r\nconst mutableAttributes = ['fold-state'] as const;\r\n@defineElement({tagName, mutableAttributes})\r\nexport class BtnGroup extends ViewListElement<AllBtnOptions, BB.BtnBase<AllBtnOptions>, BtnGroupOptions> implements AttributeHandlers<typeof mutableAttributes[number]> {\r\n constructor() {\r\n super();\r\n const sr = this.attachShadow({ mode: 'open' });\r\n sr.adoptedStyleSheets = [baseStyle, styleSheet, BB.styleSheet];\r\n }\r\n declare readonly shadowRoot: ShadowRoot;\r\n\r\n // #region ViewListElement\r\n protected _getViewItemTagName(options: AllBtnOptions): string {return 'gzm-btn-' + (options.tag ?? 'click');}\r\n // #endregion\r\n\r\n // #region 属性\r\n @strAttr\r\n accessor foldState: FoldStateType = foldStates[0];\r\n\r\n _fold_state_set(nv: string | null) {\r\n this.#fold2state((nv ?? 'normal') as FoldStateType);\r\n }\r\n\r\n /* Element 中已经存在 slot 属性\r\n @strAttr\r\n accessor slot: BtnBarAlign | undefined;*/\r\n // #endregion\r\n\r\n // #region 折叠\r\n #canUnfold(): FoldStateType | null {\r\n switch(this.foldState) {\r\n case 'normal':\r\n return null;\r\n case 'icon-only':\r\n return 'normal'; //总是能够展开到 normal\r\n case 'menu-btn':\r\n default:\r\n return this.canFold2State('icon-only') ?? 'normal';\r\n }\r\n } \r\n public unfold(): boolean {\r\n const toState = this.#canUnfold();\r\n if (!toState) return false;\r\n this.setModelProperty('foldState', toState);\r\n return true;\r\n }\r\n\r\n /**\r\n * 允许折叠,就返回可以折叠的类型,否则返回 null\r\n */\r\n #canFold(): FoldStateType | null {\r\n switch(this.foldState) {\r\n case 'menu-btn':\r\n return null;\r\n case 'icon-only':\r\n return this.canFold2State('menu-btn');\r\n case 'normal':\r\n return this.canFold2State('icon-only') ?? this.canFold2State('menu-btn');\r\n default:\r\n return null;\r\n }\r\n }\r\n public fold(): boolean {\r\n const toState = this.#canFold();\r\n if (!toState) return false;\r\n this.setModelProperty('foldState', toState);\r\n return true;\r\n }\r\n\r\n #fold2state(toState: FoldStateType) {\r\n let $mb = this.#menuBtn\r\n \r\n if (toState === 'menu-btn') {\r\n //隐藏原来的按钮,b.hidden 值不变,在还原的时候有用。\r\n this.#getMenuModelList().forEach(b => b.$view!.hidden = true);\r\n\r\n $mb = this.#menuBtn = document.createElement(menuBtnTagName);\r\n $mb.model = {label: this.model?.label, beforeShowMenu: () => this.#createMenuModelList()};\r\n this.shadowRoot.append($mb);\r\n return;\r\n }\r\n \r\n if ($mb) {\r\n this.modelList.forEach(x => {\r\n const $v = x.$view;\r\n if ($v && $v.hidden !== (x.hidden ?? false)) {\r\n $v.hidden = x.hidden ?? false;\r\n }\r\n });\r\n\r\n $mb.remove();\r\n this.#menuBtn = void 0;\r\n }\r\n\r\n\r\n if (toState === 'icon-only') {\r\n //注意:下面修改的时候都直接修改按钮,所有的 AllBtnOptions 都保持初始的状态!就是为了状态改为 normal 时使用原始的设置。\r\n this.$viewItems.filter($x => $x.icon && !$x.iconOnly).forEach($x => $x.iconOnly = true);\r\n }\r\n else if (toState === 'normal') {\r\n //如果按钮的 iconOnly 与 options.iconOnly 不一致,就调整回去,即所谓的 normal。\r\n this.$viewItems.filter($x => !!$x.model?.iconOnly !== $x.iconOnly).forEach($x => $x.iconOnly = !$x.iconOnly);\r\n }\r\n }\r\n #menuBtn?: MenuButton;\r\n\r\n /**\r\n * 判断是否可以处于某一个折叠状态\r\n */\r\n private canFold2State(state: FoldStateType): FoldStateType | null {\r\n switch(state) {\r\n case 'normal': \r\n return 'normal'; //总是能够展开到 normal\r\n case 'icon-only':\r\n //只要有一个按钮设置了 icon 就行。\r\n return this.modelList.some(x => x.icon && !x.iconOnly) ? 'icon-only' : null;\r\n case 'menu-btn':\r\n //label 作为 btn-menu 的 label,且click|link|check|radio 4种类型的按钮数量大于1\r\n return !!this.model?.label && this.#getMenuModelList().length > 1 ? 'menu-btn' : null;\r\n default:\r\n throw new Error('unknown btn group fold state');\r\n } \r\n }\r\n\r\n /**\r\n * 当需要折叠到 menu 的时候,调用此方法\r\n * @returns 只有 4 种按钮可以作为菜单项\r\n */\r\n #getMenuModelList() {\r\n const types = ['click', 'link', 'check', 'radio'];\r\n const ret = this.modelList.filter(x => x && (!x.tag || types.includes(x.tag)));//!tag 就是 click\r\n return ret;\r\n }\r\n #createMenuModelList(btns = this.#getMenuModelList()) {\r\n return btns.map(b => {\r\n const ret = {...b};\r\n delete ret.$view;\r\n\r\n /* 鼠标点击处理。搞这么复杂的理由:\r\n 当 onclick 中对当前 vm 进行修改的时候,确保其修改的是原来的 b,而不是新生成的 ret。\r\n 同时生成 btn-menu 的时候,每次都要调用这个 #createMenuModelList(),那么对 b 的修改也会反应在菜单项上。\r\n */\r\n const mic = Reflect.get(b, 'onclick') as (e: Event, vm: AllBtnOptions) => void;\r\n if (typeof mic === 'function') {\r\n Reflect.set(ret, 'onclick', (e: Event) => {\r\n if ('checked' in ret) {\r\n //还好,菜单项只会修改这一个属性。\r\n Reflect.set(b, 'checked', ret.checked);\r\n }\r\n mic.call(b, e, b);\r\n });\r\n }\r\n return ret;\r\n }) as MiOptions[];\r\n }\r\n // #endregion\r\n}","import {baseStyle, createStyleSheet, debounce, defineElement} from '@gzmjs/ui-basic';\r\nimport {type ViewListModel, ViewListElement} from '@gzmjs/mvvm';\r\nimport {type BtnGroupOptions, BtnGroup, tagName as bgTagName, btnBarAlign} from './50-btnGroup';\r\n\r\nexport const tagName = 'GZM-BTN-BAR';\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n [tagName]: BtnBar;\r\n }\r\n}\r\n\r\nexport interface BtnBarOptions extends ViewListModel<BtnGroupOptions, BtnGroup, BtnBar> {\r\n tagName?: typeof tagName;\r\n}\r\n\r\nconst styleSheet = createStyleSheet({\r\n //如果不起效果,就给父元素递归添加 overflow:hidden\r\n ':host': `\r\n display: flex;\r\n gap: 0.25rem;\r\n overflow-x: hidden;\r\n `,\r\n ':host > div': `\r\n display: flex;\r\n justify-content: center;\r\n gap: 0.25rem;\r\n\r\n flex: 1 1 auto;\r\n white-space: nowrap; /*按钮再多也不换行*/\r\n `,\r\n ':host > div:first-child': `\r\n justify-content: start;\r\n `,\r\n ':host > div:last-child': `\r\n justify-content: end;\r\n `\r\n});\r\n\r\n@defineElement({tagName})\r\nexport class BtnBar extends ViewListElement<BtnGroupOptions, BtnGroup, BtnBarOptions> {\r\n constructor() {\r\n super();\r\n\r\n //因为使用了 <slot> 所以这里没有使用 mode:open,不希望 ViewListElement.$viewItemsContainer 将 shadowRoot 作为容器。\r\n //flex-container 也是同样的情况。\r\n const root = this.attachShadow({ mode: 'closed' });\r\n root.adoptedStyleSheets = [baseStyle, styleSheet];\r\n root.append(...btnBarAlign.map(x => {\r\n const $slot = document.createElement('slot');\r\n $slot.name = x;\r\n const $div = document.createElement('div');\r\n $div.append($slot);\r\n return $div;\r\n }));\r\n }\r\n \r\n // #region ViewGroupElement\r\n protected _getViewItemTagName(): string {\r\n return bgTagName;\r\n }\r\n // #endregion\r\n\r\n // #region 折叠或者展开按钮组\r\n public connectedCallback(): void {\r\n this.#resizeObserver ??= new ResizeObserver(() => this.#groupFold());\r\n this.#resizeObserver.observe(this);\r\n }\r\n public disconnectedCallback(): void {\r\n this.#resizeObserver?.unobserve(this);\r\n }\r\n #resizeObserver?: ResizeObserver;\r\n #groupFold = debounce(() => {\r\n //console.debug(tagName, this.clientWidth, this.scrollWidth);\r\n void (this.scrollWidth > this.clientWidth ? this.#fold(): this.#unfold());\r\n });\r\n #fold($bgs = this.$viewItems) {\r\n while(this.scrollWidth > this.clientWidth) {\r\n $bgs.sort(($g1, $g2) => $g2.offsetWidth - $g1.offsetWidth);//排序,宽度大的在前面\r\n let folded = false;\r\n for (const $bg of $bgs) {\r\n if ($bg.fold()) {\r\n //console.log(tagName, $bg.model?.label, $bg.offsetWidth);\r\n folded = true;\r\n break;//有一个折叠成功,退出for循环,进入 while循环。\r\n }\r\n }\r\n if (!folded) {\r\n //没有一个折叠成功,退出整个循环\r\n break;\r\n }\r\n }\r\n }\r\n #unfold($bgs = this.$viewItems) {\r\n while (this.scrollWidth <= this.clientWidth) {\r\n $bgs.sort(($g1, $g2) => $g1.offsetWidth - $g2.offsetWidth);//排序,宽度小的在前面\r\n let unfolded = false;\r\n for (const $bg of $bgs) {\r\n if ($bg.unfold()) {\r\n //console.log(tagName, $bg.model?.label, $bg.offsetWidth);\r\n if (this.scrollWidth > this.clientWidth) {\r\n $bg.fold();//内容被隐藏了,那么这个就不能展开,重新折叠。不退出 for 期望下一个\r\n }\r\n else {\r\n unfolded = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (!unfolded) {\r\n //没有一个展开成功,退出整个循环\r\n break;\r\n }\r\n }\r\n }\r\n // #endregion\r\n}"],"names":["_a","_init","styleSheet","__privateAdd","__runInitializers","__decoratorStart","__decorateElement","__decoratorMetadata","tagName","mutableAttributes","copyAttributes","BTN.BtnBase","_placeholder_dec","_type_dec","_type","_placeholder","iptOfBtn","_step_dec","_min_dec","_max_dec","_max","_min","_step","BB.styleSheet","menuBtnTagName","bgTagName"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { tagName as clickBtnTagName, type ClickBtnOptions, ClickButton } from './010-btn/03-btnClick';
2
+ export { tagName as linkBtnTagName, type LinkBtnOptions, LinkButton } from './010-btn/06-btnLink';
3
+ export { tagName as checkBtnTagName, type CheckBtnOptions, CheckButton } from './010-btn/09-btnCheck';
4
+ export { tagName as radioBtnTagName, type RadioBtnOptions, RadioButton } from './010-btn/12-btnRadio';
5
+ export { tagName as textBtnTagName, type TextBtnOptions, TextButton } from './010-btn/20-btnText';
6
+ export { tagName as numBtnTagName, type NumBtnOptions, NumButton } from './010-btn/23-btnNum';
7
+ export { tagName as dateBtnTagName, type DateBtnOptions, DateButton } from './010-btn/26-btnDate';
8
+ export { tagName as menuBtnTagName, type MenuBtnOptions, MenuButton } from './010-btn/29-btnMenu';
9
+ export { type AllBtnOptions, btnBarAlign, tagName as btnGroupTagName, type BtnGroupOptions, BtnGroup } from './010-btn/50-btnGroup';
10
+ export { tagName as btnBarTagName, type BtnBarOptions, BtnBar } from './010-btn/53-btnBar';
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@gzmjs/button",
3
+ "description": "GZMJS UI Button Component",
4
+ "version": "0.1.0",
5
+ "module": "dist/button.es.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "dev": "vite",
13
+ "build": "tsc && vite build",
14
+ "preview": "vite preview",
15
+ "analyzer": "vite-bundle-visualizer"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^25.1.0",
19
+ "eslint": "^9.39.2",
20
+ "typescript": "~5.9.3",
21
+ "typescript-eslint": "^8.54.0",
22
+ "vite": "^7.2.4",
23
+ "vite-bundle-visualizer": "^1.2.1",
24
+ "vite-plugin-dts": "^4.5.4"
25
+ },
26
+ "dependencies": {
27
+ "@gzmjs/menu": "^0.1.1",
28
+ "@gzmjs/mvvm": "^0.1.0",
29
+ "@gzmjs/ui-basic": "^0.3.0"
30
+ }
31
+ }