@gzmjs/button 0.2.1 → 0.3.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/010-btn/99-page.d.ts +27 -0
- package/dist/button.es.js +219 -1
- package/dist/button.es.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BtnGroupOptions } from './50-btnGroup';
|
|
2
|
+
interface PageOptions {
|
|
3
|
+
label?: string;
|
|
4
|
+
pageIndex?: number;
|
|
5
|
+
pageSize?: number;
|
|
6
|
+
/**
|
|
7
|
+
* 总的数据量,除以 pageSize,得到页数
|
|
8
|
+
*/
|
|
9
|
+
dataTotal?: number;
|
|
10
|
+
/**
|
|
11
|
+
* true-简化的,不要显示第一页、最后页的按钮
|
|
12
|
+
*/
|
|
13
|
+
simplified?: boolean;
|
|
14
|
+
gotoPage(this: PageOptions, pageIndex: number, pageSize: number): void;
|
|
15
|
+
}
|
|
16
|
+
export interface PageGroupOptions extends BtnGroupOptions {
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @param pageIndex - 从 0 开始
|
|
20
|
+
* @param dataTotal - 总的数量
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
setPage: (pageIndex: number, dataTotal: number) => void;
|
|
24
|
+
getPageSize(): number;
|
|
25
|
+
}
|
|
26
|
+
export declare function createPageGroup(options: PageOptions): PageGroupOptions;
|
|
27
|
+
export {};
|
package/dist/button.es.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createStyleSheet, strAttr, boolAttr, baseStyle, iconTagName, badgeTagName, defineElement, intAttr, xy, debounce } from "@gzmjs/ui-basic";
|
|
1
|
+
import { createStyleSheet, strAttr, boolAttr, baseStyle, iconTagName, badgeTagName, defineElement, intAttr, xy, debounce, createText } from "@gzmjs/ui-basic";
|
|
2
2
|
import { ViewElement, ViewListElement } from "@gzmjs/mvvm";
|
|
3
3
|
import { createMenu } from "@gzmjs/menu";
|
|
4
|
+
import "@gzmjs/tooltip";
|
|
4
5
|
var __create$a = Object.create;
|
|
5
6
|
var __defProp$a = Object.defineProperty;
|
|
6
7
|
var __getOwnPropDesc$a = Object.getOwnPropertyDescriptor;
|
|
@@ -1128,6 +1129,222 @@ class BtnBar extends (_a = ViewListElement) {
|
|
|
1128
1129
|
_init = __decoratorStart(_a);
|
|
1129
1130
|
BtnBar = __decorateElement(_init, 0, "BtnBar", _BtnBar_decorators, BtnBar);
|
|
1130
1131
|
__runInitializers(_init, 1, BtnBar);
|
|
1132
|
+
const zh = {
|
|
1133
|
+
player_skip_back: "第一页",
|
|
1134
|
+
player_trace_prev: "上一页",
|
|
1135
|
+
player_play: "分页",
|
|
1136
|
+
player_track_next: "下一页",
|
|
1137
|
+
player_skip_forward: "最后页",
|
|
1138
|
+
firstAlready: "已经是第一页了!",
|
|
1139
|
+
lastAlready: "已经是最后一页了!",
|
|
1140
|
+
multiPages: "数据量大,分页显示",
|
|
1141
|
+
pageSize: "分页尺寸:{0}",
|
|
1142
|
+
titleTotal: "总数={0},每页={1},共 {2} 页,当前第 {3} 页",
|
|
1143
|
+
jumpDlgTitle: "跳转到指定页",
|
|
1144
|
+
overPageIndex: "页索引超出范围:从 1 到 {0}!",
|
|
1145
|
+
overPageSize: "页尺寸超出范围:从 1 到 {0}!"
|
|
1146
|
+
};
|
|
1147
|
+
const T = createText({ zh });
|
|
1148
|
+
const btnLabels = [T.player_skip_back, T.player_trace_prev, T.player_play, T.player_track_next, T.player_skip_forward];
|
|
1149
|
+
const btnIcons = ["⏮️", "⏪", "▶️", "⏩", "⏭️"];
|
|
1150
|
+
function createPageGroup(options) {
|
|
1151
|
+
const pg = new PageGroup(options);
|
|
1152
|
+
return pg.group;
|
|
1153
|
+
}
|
|
1154
|
+
class PageGroup {
|
|
1155
|
+
//#region 生成按钮
|
|
1156
|
+
constructor(options) {
|
|
1157
|
+
this.pageIndex = options.pageIndex ?? -1;
|
|
1158
|
+
this.pageSize = options.pageSize ?? 50;
|
|
1159
|
+
this.dataTotal = options.dataTotal ?? 0;
|
|
1160
|
+
this.options = options;
|
|
1161
|
+
this.group = {
|
|
1162
|
+
slot: "right",
|
|
1163
|
+
label: options.label,
|
|
1164
|
+
modelList: [],
|
|
1165
|
+
setPage: this.#setPage,
|
|
1166
|
+
getPageSize: this.#getPageSize
|
|
1167
|
+
};
|
|
1168
|
+
this.#createBtns();
|
|
1169
|
+
this.#showPageInfo();
|
|
1170
|
+
}
|
|
1171
|
+
options;
|
|
1172
|
+
group;
|
|
1173
|
+
pageIndex;
|
|
1174
|
+
pageSize;
|
|
1175
|
+
dataTotal;
|
|
1176
|
+
#firstClick = (ev) => {
|
|
1177
|
+
const $btn = ev.target;
|
|
1178
|
+
if (this.pageIndex <= 0) {
|
|
1179
|
+
$btn.showTooltip({
|
|
1180
|
+
render($tt) {
|
|
1181
|
+
$tt.textContent = T.firstAlready;
|
|
1182
|
+
}
|
|
1183
|
+
});
|
|
1184
|
+
return;
|
|
1185
|
+
}
|
|
1186
|
+
this.#goto(0);
|
|
1187
|
+
};
|
|
1188
|
+
#prevClick = (ev) => {
|
|
1189
|
+
const $btn = ev.target;
|
|
1190
|
+
const pi = this.pageIndex;
|
|
1191
|
+
if (pi <= 0) {
|
|
1192
|
+
$btn.showTooltip({
|
|
1193
|
+
render($tt) {
|
|
1194
|
+
$tt.textContent = T.firstAlready;
|
|
1195
|
+
}
|
|
1196
|
+
});
|
|
1197
|
+
return;
|
|
1198
|
+
}
|
|
1199
|
+
this.#goto(pi - 1);
|
|
1200
|
+
};
|
|
1201
|
+
#pageClick = (ev) => {
|
|
1202
|
+
const $btn = ev.target;
|
|
1203
|
+
this.#showPageSize($btn);
|
|
1204
|
+
};
|
|
1205
|
+
#nextClick = (ev) => {
|
|
1206
|
+
const $btn = ev.target;
|
|
1207
|
+
const pi = this.pageIndex;
|
|
1208
|
+
if (pi >= this.pageTotal - 1) {
|
|
1209
|
+
$btn.showTooltip({
|
|
1210
|
+
render($tt) {
|
|
1211
|
+
$tt.textContent = T.lastAlready;
|
|
1212
|
+
}
|
|
1213
|
+
});
|
|
1214
|
+
return;
|
|
1215
|
+
}
|
|
1216
|
+
this.#goto(pi + 1);
|
|
1217
|
+
};
|
|
1218
|
+
#lastClick = (ev) => {
|
|
1219
|
+
const $btn = ev.target;
|
|
1220
|
+
const pt = this.pageTotal - 1;
|
|
1221
|
+
if (this.pageIndex >= pt) {
|
|
1222
|
+
$btn.showTooltip({
|
|
1223
|
+
render($tt) {
|
|
1224
|
+
$tt.textContent = T.lastAlready;
|
|
1225
|
+
}
|
|
1226
|
+
});
|
|
1227
|
+
return;
|
|
1228
|
+
}
|
|
1229
|
+
this.#goto(pt);
|
|
1230
|
+
};
|
|
1231
|
+
#clicks = [this.#firstClick, this.#prevClick, this.#pageClick, this.#nextClick, this.#lastClick];
|
|
1232
|
+
#createBtns() {
|
|
1233
|
+
const btns = this.group.modelList;
|
|
1234
|
+
for (let i = 0; i < this.#clicks.length; i++) {
|
|
1235
|
+
btns.push({
|
|
1236
|
+
tag: "click",
|
|
1237
|
+
icon: btnIcons[i],
|
|
1238
|
+
label: btnLabels[i],
|
|
1239
|
+
iconOnly: true,
|
|
1240
|
+
onclick: this.#clicks[i]
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
if (this.options.simplified) {
|
|
1244
|
+
btns[0].hidden = true;
|
|
1245
|
+
btns[btns.length - 1].hidden = true;
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
//#endregion
|
|
1249
|
+
//#region 运行
|
|
1250
|
+
get pageTotal() {
|
|
1251
|
+
const dt = this.dataTotal;
|
|
1252
|
+
const ps = this.pageSize;
|
|
1253
|
+
return Math.ceil(dt / ps);
|
|
1254
|
+
}
|
|
1255
|
+
#showPageInfo() {
|
|
1256
|
+
const i = 2;
|
|
1257
|
+
const btn = this.group.modelList[i];
|
|
1258
|
+
const $btn = btn.$view ?? btn;
|
|
1259
|
+
const dt = this.dataTotal;
|
|
1260
|
+
const pt = this.pageTotal;
|
|
1261
|
+
if (dt <= 0) {
|
|
1262
|
+
$btn.icon = btnIcons[i];
|
|
1263
|
+
$btn.iconOnly = true;
|
|
1264
|
+
$btn.title = T.player_play;
|
|
1265
|
+
} else {
|
|
1266
|
+
const pi = this.pageIndex + 1;
|
|
1267
|
+
$btn.label = `[${dt}] ${pi}/${pt}`;
|
|
1268
|
+
$btn.iconOnly = false;
|
|
1269
|
+
$btn.icon = "";
|
|
1270
|
+
$btn.title = T.titleTotal(dt, this.pageSize, pt, pi);
|
|
1271
|
+
}
|
|
1272
|
+
return pt;
|
|
1273
|
+
}
|
|
1274
|
+
#goto(pi, pt = this.pageTotal) {
|
|
1275
|
+
if (pi < 0 || pi >= pt) {
|
|
1276
|
+
const $g = this.group.$view;
|
|
1277
|
+
if ($g) {
|
|
1278
|
+
$g.showTooltip({
|
|
1279
|
+
render($tt) {
|
|
1280
|
+
$tt.textContent = T.overPageIndex(pt);
|
|
1281
|
+
}
|
|
1282
|
+
});
|
|
1283
|
+
}
|
|
1284
|
+
return;
|
|
1285
|
+
}
|
|
1286
|
+
this.pageIndex = pi;
|
|
1287
|
+
this.#showPageInfo();
|
|
1288
|
+
this.options.gotoPage(pi, this.pageSize);
|
|
1289
|
+
}
|
|
1290
|
+
#showPageSize($btn) {
|
|
1291
|
+
const minSize = 50;
|
|
1292
|
+
const maxSize = 200;
|
|
1293
|
+
let psv = this.pageSize;
|
|
1294
|
+
psv = Math.max(minSize, psv);
|
|
1295
|
+
psv = Math.min(maxSize, psv);
|
|
1296
|
+
$btn.showTooltip({
|
|
1297
|
+
render($tt) {
|
|
1298
|
+
const $min = document.createElement("span");
|
|
1299
|
+
$min.textContent = minSize + " ";
|
|
1300
|
+
const $range = document.createElement("input");
|
|
1301
|
+
$range.type = "range";
|
|
1302
|
+
$range.min = minSize.toString();
|
|
1303
|
+
$range.max = maxSize.toString();
|
|
1304
|
+
$range.step = "50";
|
|
1305
|
+
$range.value = psv.toString();
|
|
1306
|
+
$range.oninput = () => $ps.textContent = T.pageSize($range.value);
|
|
1307
|
+
const $max = document.createElement("span");
|
|
1308
|
+
$max.textContent = " " + maxSize;
|
|
1309
|
+
const $div = document.createElement("div");
|
|
1310
|
+
$div.append($min, $range, $max);
|
|
1311
|
+
const $ps = document.createElement("p");
|
|
1312
|
+
$ps.style.textAlign = "center";
|
|
1313
|
+
$ps.textContent = T.pageSize(psv);
|
|
1314
|
+
$tt.append($div, $ps);
|
|
1315
|
+
},
|
|
1316
|
+
confirm: ($tt) => {
|
|
1317
|
+
const $range = $tt.querySelector("input");
|
|
1318
|
+
this.pageSize = $range.valueAsNumber;
|
|
1319
|
+
const pt = this.pageTotal;
|
|
1320
|
+
const pi = this.pageIndex;
|
|
1321
|
+
this.#goto(pi >= pt ? pt - 1 : pi, pt);
|
|
1322
|
+
return true;
|
|
1323
|
+
}
|
|
1324
|
+
});
|
|
1325
|
+
}
|
|
1326
|
+
#setPage = (pageIndex, dataTotal) => {
|
|
1327
|
+
if (pageIndex < 0 || dataTotal < 0) return;
|
|
1328
|
+
this.pageIndex = pageIndex;
|
|
1329
|
+
this.dataTotal = dataTotal;
|
|
1330
|
+
const pt = this.#showPageInfo();
|
|
1331
|
+
const tt = pt > 1 ? T.multiPages : null;
|
|
1332
|
+
if (!tt) {
|
|
1333
|
+
return;
|
|
1334
|
+
}
|
|
1335
|
+
setTimeout(() => {
|
|
1336
|
+
this.group.$view?.showTooltip({
|
|
1337
|
+
render($tt) {
|
|
1338
|
+
$tt.textContent = tt;
|
|
1339
|
+
}
|
|
1340
|
+
});
|
|
1341
|
+
}, 1e3);
|
|
1342
|
+
};
|
|
1343
|
+
#getPageSize = () => {
|
|
1344
|
+
return this.pageSize;
|
|
1345
|
+
};
|
|
1346
|
+
//#endregion
|
|
1347
|
+
}
|
|
1131
1348
|
export {
|
|
1132
1349
|
BtnBar,
|
|
1133
1350
|
BtnGroup,
|
|
@@ -1144,6 +1361,7 @@ export {
|
|
|
1144
1361
|
tagName$1 as btnGroupTagName,
|
|
1145
1362
|
tagName$7 as checkBtnTagName,
|
|
1146
1363
|
tagName$9 as clickBtnTagName,
|
|
1364
|
+
createPageGroup,
|
|
1147
1365
|
tagName$3 as dateBtnTagName,
|
|
1148
1366
|
tagName$8 as linkBtnTagName,
|
|
1149
1367
|
tagName$2 as menuBtnTagName,
|
package/dist/button.es.js.map
CHANGED
|
@@ -1 +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 }\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) {\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 } 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', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele',\r\n};\r\n\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class ClickButton extends BTN.BtnBase<ClickBtnOptions> {\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', 'badge', 'href', 'target', 'disabled'] as const;\r\nconst copyAttributes = {\r\n href: '$ele',\r\n target: '$ele',\r\n disabled: '$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} 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', 'badge', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele'\r\n};\r\n\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class CheckButton extends BTN.BtnBase<CheckBtnOptions> {\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} 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', 'badge', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele',\r\n};\r\n\r\n/**\r\n * 因为没有使用 shadow,所以需要输出 .gzm-btn 的样式定义。\r\n * 这样就允许网页上的任意一个按钮使用 .gzm-btn 类名,就会获得相同的样式。\r\n */\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class RadioButton extends BTN.BtnBase<RadioBtnOptions> {\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', 'badge', 'disabled', '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 disabled: 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', 'badge', 'disabled', '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 disabled: 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', 'badge', 'disabled', '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 disabled: 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} 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', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele',\r\n};\r\n\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class MenuButton extends BTN.BtnBase<MenuBtnOptions> {\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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"}
|
|
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","../src/010-btn/99-page.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 }\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) {\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 } 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', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele',\r\n};\r\n\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class ClickButton extends BTN.BtnBase<ClickBtnOptions> {\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', 'badge', 'href', 'target', 'disabled'] as const;\r\nconst copyAttributes = {\r\n href: '$ele',\r\n target: '$ele',\r\n disabled: '$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} 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', 'badge', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele'\r\n};\r\n\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class CheckButton extends BTN.BtnBase<CheckBtnOptions> {\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} 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', 'badge', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele',\r\n};\r\n\r\n/**\r\n * 因为没有使用 shadow,所以需要输出 .gzm-btn 的样式定义。\r\n * 这样就允许网页上的任意一个按钮使用 .gzm-btn 类名,就会获得相同的样式。\r\n */\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class RadioButton extends BTN.BtnBase<RadioBtnOptions> {\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', 'badge', 'disabled', '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 disabled: 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', 'badge', 'disabled', '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 disabled: 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', 'badge', 'disabled', '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 disabled: 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} 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', 'disabled'] as const;\r\nconst copyAttributes = {\r\n disabled: '$ele',\r\n};\r\n\r\n@defineElement({tagName, mutableAttributes, copyAttributes})\r\nexport class MenuButton extends BTN.BtnBase<MenuBtnOptions> {\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}","\r\nimport { createText } from '@gzmjs/ui-basic';\r\nimport \"@gzmjs/tooltip\";\r\nimport type { BtnGroupOptions } from './50-btnGroup';\r\nimport type { ClickBtnOptions } from './03-btnClick';\r\n\r\nconst zh = {\r\n player_skip_back: '第一页',\r\n player_trace_prev: '上一页',\r\n player_play: '分页',\r\n player_track_next: '下一页',\r\n player_skip_forward: '最后页',\r\n\r\n firstAlready: '已经是第一页了!',\r\n lastAlready: '已经是最后一页了!',\r\n multiPages: '数据量大,分页显示',\r\n pageSize: '分页尺寸:{0}',\r\n titleTotal: '总数={0},每页={1},共 {2} 页,当前第 {3} 页',\r\n\r\n jumpDlgTitle: '跳转到指定页',\r\n overPageIndex: '页索引超出范围:从 1 到 {0}!',\r\n overPageSize: '页尺寸超出范围:从 1 到 {0}!'\r\n} as const;\r\nconst T = createText({zh});\r\n\r\nconst btnLabels = [T.player_skip_back, T.player_trace_prev, T.player_play, T.player_track_next, T.player_skip_forward];\r\n\r\n/**\r\n * 可以在 iconCache 设置来改变图标,如下:\r\n * iconCache['⏮️'] = '图片或者svg';\r\n */\r\nconst btnIcons = ['⏮️', '⏪', '▶️', '⏩', '⏭️'];\r\n\r\ninterface PageOptions {\r\n label?: string;\r\n pageIndex?: number;\r\n pageSize?: number;\r\n\r\n /**\r\n * 总的数据量,除以 pageSize,得到页数\r\n */\r\n dataTotal?: number;\r\n \r\n /**\r\n * true-简化的,不要显示第一页、最后页的按钮\r\n */\r\n simplified?: boolean;\r\n\r\n gotoPage(this: PageOptions, pageIndex: number, pageSize: number): void;\r\n};\r\n\r\nexport interface PageGroupOptions extends BtnGroupOptions {\r\n /**\r\n * \r\n * @param pageIndex - 从 0 开始\r\n * @param dataTotal - 总的数量\r\n * @returns \r\n */\r\n setPage: (pageIndex: number, dataTotal: number) => void;\r\n getPageSize(): number;\r\n};\r\n\r\nexport function createPageGroup(options: PageOptions): PageGroupOptions {\r\n const pg = new PageGroup(options);\r\n return pg.group;\r\n}\r\n\r\nclass PageGroup {\r\n //#region 生成按钮\r\n constructor(options: PageOptions) {\r\n this.pageIndex = options.pageIndex ?? -1;\r\n this.pageSize = options.pageSize ?? 50;\r\n this.dataTotal = options.dataTotal ?? 0;\r\n this.options = options;\r\n\r\n this.group = {\r\n slot: 'right',\r\n label: options.label,\r\n modelList: [],\r\n setPage: this.#setPage,\r\n getPageSize: this.#getPageSize,\r\n }\r\n this.#createBtns();\r\n this.#showPageInfo();\r\n }\r\n readonly options: PageOptions;\r\n readonly group: PageGroupOptions;\r\n\r\n pageIndex: number;\r\n pageSize: number;\r\n dataTotal: number;\r\n\r\n #firstClick: ClickBtnOptions['onclick'] = (ev: MouseEvent) => {\r\n const $btn = ev.target as HTMLElement;\r\n if (this.pageIndex <= 0) {\r\n $btn.showTooltip({\r\n render($tt) {\r\n $tt.textContent = T.firstAlready;\r\n }\r\n });\r\n return;\r\n }\r\n this.#goto(0);\r\n };\r\n #prevClick: ClickBtnOptions['onclick'] = (ev: MouseEvent) => { \r\n const $btn = ev.target as HTMLElement;\r\n const pi = this.pageIndex;\r\n if (pi <= 0) {\r\n $btn.showTooltip({\r\n render($tt) {\r\n $tt.textContent = T.firstAlready;\r\n }\r\n });\r\n return;\r\n }\r\n this.#goto(pi - 1);\r\n };\r\n #pageClick: ClickBtnOptions['onclick'] = (ev: MouseEvent) => { \r\n const $btn = ev.target as HTMLElement;\r\n this.#showPageSize($btn);\r\n };\r\n #nextClick: ClickBtnOptions['onclick'] = (ev: MouseEvent) => { \r\n const $btn = ev.target as HTMLElement;\r\n const pi = this.pageIndex;\r\n if (pi >= this.pageTotal - 1) {\r\n $btn.showTooltip({\r\n render($tt) {\r\n $tt.textContent = T.lastAlready;\r\n }\r\n });\r\n return;\r\n }\r\n this.#goto(pi + 1);\r\n }\r\n #lastClick: ClickBtnOptions['onclick'] = (ev: MouseEvent) => { \r\n const $btn = ev.target as HTMLElement;\r\n const pt = this.pageTotal - 1;\r\n if (this.pageIndex >= pt) {\r\n $btn.showTooltip({\r\n render($tt) {\r\n $tt.textContent = T.lastAlready;\r\n }\r\n });\r\n return;\r\n }\r\n this.#goto(pt);\r\n }\r\n #clicks = [this.#firstClick, this.#prevClick, this.#pageClick, this.#nextClick, this.#lastClick];\r\n #createBtns() {\r\n const btns = this.group.modelList; \r\n for (let i = 0; i < this.#clicks.length; i++) {\r\n btns.push({\r\n tag: 'click',\r\n icon: btnIcons[i],\r\n label: btnLabels[i],\r\n iconOnly: true,\r\n onclick: this.#clicks[i]\r\n });\r\n }\r\n if (this.options.simplified) {\r\n btns[0].hidden = true;\r\n btns[btns.length - 1].hidden = true;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region 运行\r\n get pageTotal() {\r\n const dt = this.dataTotal;\r\n const ps = this.pageSize;\r\n return Math.ceil(dt/ps);\r\n }\r\n #showPageInfo() {\r\n const i = 2;\r\n const btn = this.group.modelList[i];\r\n\r\n /**\r\n * 注意:$view 可能还未生成,则设置 vm,生成 $view 时一样起作用。\r\n * 当 $view 已经生成,因为无法确定是否响应式,所以直接使用 $view。\r\n */\r\n const $btn = btn.$view ?? btn;\r\n\r\n /* 无法判断是否使用了响应式\r\n if (btn.$view) {\r\n btn = btn.$view.model!; //切换到响应式\r\n }*/\r\n\r\n const dt = this.dataTotal;\r\n const pt = this.pageTotal;\r\n\r\n if (dt <= 0) {\r\n $btn.icon = btnIcons[i];\r\n $btn.iconOnly = true;\r\n $btn.title = T.player_play;\r\n }\r\n else {\r\n const pi = this.pageIndex + 1;\r\n $btn.label = `[${dt}] ${pi}/${pt}`;\r\n $btn.iconOnly = false;\r\n $btn.icon = ''; //不要显示播放按钮了\r\n $btn.title = T.titleTotal(dt, this.pageSize, pt, pi);\r\n }\r\n return pt;\r\n }\r\n\r\n #goto(pi: number, pt = this.pageTotal) {\r\n if (pi < 0 || pi >= pt) {\r\n const $g = this.group.$view;\r\n if ($g) {\r\n $g.showTooltip({\r\n render($tt) {\r\n $tt.textContent = T.overPageIndex(pt);\r\n }\r\n });\r\n }\r\n return;\r\n }\r\n this.pageIndex = pi;\r\n this.#showPageInfo();\r\n this.options.gotoPage(pi, this.pageSize);\r\n }\r\n\r\n #showPageSize($btn: HTMLElement) { \r\n const minSize = 50;\r\n const maxSize = 200;\r\n\r\n let psv = this.pageSize;\r\n psv = Math.max(minSize, psv);\r\n psv = Math.min(maxSize, psv);\r\n\r\n $btn.showTooltip({\r\n render($tt) {\r\n //#region 最小,滑动,最大\r\n const $min = document.createElement('span');\r\n $min.textContent = minSize + ' '; //空格是故意的\r\n\r\n const $range = document.createElement('input');\r\n $range.type = 'range';\r\n $range.min = minSize.toString();\r\n $range.max = maxSize.toString();\r\n $range.step = '50';\r\n $range.value = psv.toString();\r\n $range.oninput = () => $ps.textContent = T.pageSize($range.value);\r\n\r\n const $max = document.createElement('span');\r\n $max.textContent = ' ' + maxSize; //空格是故意的\r\n\r\n const $div = document.createElement('div');\r\n $div.append($min, $range, $max);\r\n //#endregion\r\n\r\n const $ps = document.createElement('p');\r\n $ps.style.textAlign = 'center';\r\n $ps.textContent = T.pageSize(psv);\r\n\r\n $tt.append($div, $ps);\r\n },\r\n confirm: ($tt) => {\r\n const $range = $tt.querySelector('input') as HTMLInputElement;\r\n this.pageSize = $range.valueAsNumber;\r\n const pt = this.pageTotal;\r\n const pi = this.pageIndex;\r\n this.#goto(pi >= pt ? pt - 1 : pi, pt);\r\n return true;\r\n },\r\n });\r\n }\r\n\r\n #setPage: PageGroupOptions['setPage'] = (pageIndex, dataTotal) => {\r\n //用 pageIndex 作为开关,来控制是否要显示信息。\r\n if (pageIndex < 0 || dataTotal < 0) return;\r\n this.pageIndex = pageIndex;\r\n this.dataTotal = dataTotal;\r\n\r\n const pt = this.#showPageInfo();\r\n const tt = pt > 1 ? T.multiPages : null;\r\n if (!tt) {\r\n return;\r\n }\r\n \r\n /**\r\n * 延迟一秒,防止 UI 元素还未移动到正确位置,如 dockRight 对话框有动画效果。\r\n * 尝试了 requestIdleCallback(),但是不行。\r\n */\r\n setTimeout(() => {\r\n this.group.$view?.showTooltip({ \r\n render($tt) {\r\n $tt.textContent = tt;\r\n },\r\n });\r\n }, 1000);\r\n }\r\n #getPageSize: PageGroupOptions['getPageSize'] = () => {\r\n return this.pageSize;\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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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,3 +8,4 @@ export { tagName as dateBtnTagName, type DateBtnOptions, DateButton } from './01
|
|
|
8
8
|
export { tagName as menuBtnTagName, type MenuBtnOptions, MenuButton } from './010-btn/29-btnMenu';
|
|
9
9
|
export { type AllBtnOptions, btnBarAlign, tagName as btnGroupTagName, type BtnGroupOptions, BtnGroup } from './010-btn/50-btnGroup';
|
|
10
10
|
export { tagName as btnBarTagName, type BtnBarOptions, BtnBar } from './010-btn/53-btnBar';
|
|
11
|
+
export { createPageGroup, type PageGroupOptions } from './010-btn/99-page';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gzmjs/button",
|
|
3
3
|
"description": "GZMJS UI Button Component",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"module": "dist/button.es.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
@@ -24,8 +24,9 @@
|
|
|
24
24
|
"vite-plugin-dts": "^4.5.4"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@gzmjs/menu": "^0.
|
|
28
|
-
"@gzmjs/mvvm": "^0.1.
|
|
29
|
-
"@gzmjs/
|
|
27
|
+
"@gzmjs/menu": "^0.3.1",
|
|
28
|
+
"@gzmjs/mvvm": "^0.1.5",
|
|
29
|
+
"@gzmjs/tooltip": "^0.2.2",
|
|
30
|
+
"@gzmjs/ui-basic": "^0.3.14"
|
|
30
31
|
}
|
|
31
32
|
}
|