@zerodep-dev/vue-tsx-pro-mobile 0.0.0-stage → 0.4.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/LICENSE +21 -0
- package/README.md +29 -2
- package/dist/area/data.d.ts +10 -0
- package/dist/area/data.js +3899 -0
- package/dist/area/data.js.map +1 -0
- package/dist/area/index.d.ts +22 -0
- package/dist/area/index.js +41 -0
- package/dist/area/index.js.map +1 -0
- package/dist/base/Button.d.ts +170 -0
- package/dist/base/Button.js +537 -0
- package/dist/base/Button.js.map +1 -0
- package/dist/base/Icon.d.ts +38 -0
- package/dist/base/Icon.js +65 -0
- package/dist/base/Icon.js.map +1 -0
- package/dist/capability/PrivacyPrompt.d.ts +1 -0
- package/dist/capability/PrivacyPrompt.js +73 -0
- package/dist/capability/PrivacyPrompt.js.map +1 -0
- package/dist/capability/types.d.ts +92 -0
- package/dist/capability/usePermission.d.ts +23 -0
- package/dist/capability/usePermission.js +52 -0
- package/dist/capability/usePermission.js.map +1 -0
- package/dist/capability/useStorage.d.ts +8 -0
- package/dist/capability/useStorage.js +19 -0
- package/dist/capability/useStorage.js.map +1 -0
- package/dist/capability/web.d.ts +18 -0
- package/dist/capability/web.js +109 -0
- package/dist/capability/web.js.map +1 -0
- package/dist/capacitor/index.d.ts +9 -0
- package/dist/capacitor/index.js +143 -0
- package/dist/capacitor/index.js.map +1 -0
- package/dist/config/ConfigProvider.d.ts +37 -0
- package/dist/config/ConfigProvider.js +64 -0
- package/dist/config/ConfigProvider.js.map +1 -0
- package/dist/config/context.d.ts +16 -0
- package/dist/config/context.js +20 -0
- package/dist/config/context.js.map +1 -0
- package/dist/config/lang.d.ts +85 -0
- package/dist/config/lang.js +138 -0
- package/dist/config/lang.js.map +1 -0
- package/dist/display/Badge.d.ts +39 -0
- package/dist/display/Badge.js +108 -0
- package/dist/display/Badge.js.map +1 -0
- package/dist/display/Cell.d.ts +92 -0
- package/dist/display/Cell.js +204 -0
- package/dist/display/Cell.js.map +1 -0
- package/dist/display/Collapse.d.ts +47 -0
- package/dist/display/Collapse.js +173 -0
- package/dist/display/Collapse.js.map +1 -0
- package/dist/display/Empty.d.ts +42 -0
- package/dist/display/Empty.js +79 -0
- package/dist/display/Empty.js.map +1 -0
- package/dist/display/Grid.d.ts +49 -0
- package/dist/display/Grid.js +136 -0
- package/dist/display/Grid.js.map +1 -0
- package/dist/display/Image.d.ts +70 -0
- package/dist/display/Image.js +138 -0
- package/dist/display/Image.js.map +1 -0
- package/dist/display/IndexBar.d.ts +34 -0
- package/dist/display/IndexBar.js +158 -0
- package/dist/display/IndexBar.js.map +1 -0
- package/dist/display/List.d.ts +34 -0
- package/dist/display/List.js +105 -0
- package/dist/display/List.js.map +1 -0
- package/dist/display/NoticeBar.d.ts +57 -0
- package/dist/display/NoticeBar.js +172 -0
- package/dist/display/NoticeBar.js.map +1 -0
- package/dist/display/Steps.d.ts +59 -0
- package/dist/display/Steps.js +158 -0
- package/dist/display/Steps.js.map +1 -0
- package/dist/display/SwipeCell.d.ts +37 -0
- package/dist/display/SwipeCell.js +147 -0
- package/dist/display/SwipeCell.js.map +1 -0
- package/dist/display/Swiper.d.ts +47 -0
- package/dist/display/Swiper.js +173 -0
- package/dist/display/Swiper.js.map +1 -0
- package/dist/display/Tag.d.ts +99 -0
- package/dist/display/Tag.js +320 -0
- package/dist/display/Tag.js.map +1 -0
- package/dist/feedback/Dialog.d.ts +79 -0
- package/dist/feedback/Dialog.js +186 -0
- package/dist/feedback/Dialog.js.map +1 -0
- package/dist/feedback/FeedbackOutlet.d.ts +2 -0
- package/dist/feedback/FeedbackOutlet.js +31 -0
- package/dist/feedback/FeedbackOutlet.js.map +1 -0
- package/dist/feedback/Loading.d.ts +26 -0
- package/dist/feedback/Loading.js +68 -0
- package/dist/feedback/Loading.js.map +1 -0
- package/dist/feedback/Notify.d.ts +48 -0
- package/dist/feedback/Notify.js +116 -0
- package/dist/feedback/Notify.js.map +1 -0
- package/dist/feedback/PullRefresh.d.ts +58 -0
- package/dist/feedback/PullRefresh.js +178 -0
- package/dist/feedback/PullRefresh.js.map +1 -0
- package/dist/feedback/Skeleton.d.ts +56 -0
- package/dist/feedback/Skeleton.js +99 -0
- package/dist/feedback/Skeleton.js.map +1 -0
- package/dist/feedback/Toast.d.ts +89 -0
- package/dist/feedback/Toast.js +186 -0
- package/dist/feedback/Toast.js.map +1 -0
- package/dist/form/Checkbox.d.ts +52 -0
- package/dist/form/Checkbox.js +107 -0
- package/dist/form/Checkbox.js.map +1 -0
- package/dist/form/Field.d.ts +91 -0
- package/dist/form/Field.js +296 -0
- package/dist/form/Field.js.map +1 -0
- package/dist/form/Form.d.ts +50 -0
- package/dist/form/Form.js +96 -0
- package/dist/form/Form.js.map +1 -0
- package/dist/form/FormItem.d.ts +57 -0
- package/dist/form/FormItem.js +142 -0
- package/dist/form/FormItem.js.map +1 -0
- package/dist/form/Radio.d.ts +41 -0
- package/dist/form/Radio.js +85 -0
- package/dist/form/Radio.js.map +1 -0
- package/dist/form/Rate.d.ts +45 -0
- package/dist/form/Rate.js +162 -0
- package/dist/form/Rate.js.map +1 -0
- package/dist/form/Search.d.ts +50 -0
- package/dist/form/Search.js +152 -0
- package/dist/form/Search.js.map +1 -0
- package/dist/form/Slider.d.ts +43 -0
- package/dist/form/Slider.js +213 -0
- package/dist/form/Slider.js.map +1 -0
- package/dist/form/Stepper.d.ts +61 -0
- package/dist/form/Stepper.js +222 -0
- package/dist/form/Stepper.js.map +1 -0
- package/dist/form/Switch.d.ts +33 -0
- package/dist/form/Switch.js +116 -0
- package/dist/form/Switch.js.map +1 -0
- package/dist/form/Uploader.d.ts +67 -0
- package/dist/form/Uploader.js +207 -0
- package/dist/form/Uploader.js.map +1 -0
- package/dist/form/choice.d.ts +42 -0
- package/dist/form/choice.js +109 -0
- package/dist/form/choice.js.map +1 -0
- package/dist/form/context.d.ts +83 -0
- package/dist/form/context.js +89 -0
- package/dist/form/context.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +59 -0
- package/dist/layout/Divider.d.ts +34 -0
- package/dist/layout/Divider.js +55 -0
- package/dist/layout/Divider.js.map +1 -0
- package/dist/layout/Space.d.ts +66 -0
- package/dist/layout/Space.js +65 -0
- package/dist/layout/Space.js.map +1 -0
- package/dist/navigation/BackTop.d.ts +29 -0
- package/dist/navigation/BackTop.js +89 -0
- package/dist/navigation/BackTop.js.map +1 -0
- package/dist/navigation/NavBar.d.ts +46 -0
- package/dist/navigation/NavBar.js +141 -0
- package/dist/navigation/NavBar.js.map +1 -0
- package/dist/navigation/Sticky.d.ts +19 -0
- package/dist/navigation/Sticky.js +28 -0
- package/dist/navigation/Sticky.js.map +1 -0
- package/dist/navigation/TabBar.d.ts +54 -0
- package/dist/navigation/TabBar.js +138 -0
- package/dist/navigation/TabBar.js.map +1 -0
- package/dist/navigation/Tabs.d.ts +45 -0
- package/dist/navigation/Tabs.js +206 -0
- package/dist/navigation/Tabs.js.map +1 -0
- package/dist/overlay/ActionSheet.d.ts +80 -0
- package/dist/overlay/ActionSheet.js +164 -0
- package/dist/overlay/ActionSheet.js.map +1 -0
- package/dist/overlay/Overlay.d.ts +35 -0
- package/dist/overlay/Overlay.js +85 -0
- package/dist/overlay/Overlay.js.map +1 -0
- package/dist/overlay/Popup.d.ts +76 -0
- package/dist/overlay/Popup.js +191 -0
- package/dist/overlay/Popup.js.map +1 -0
- package/dist/picker/Calendar.d.ts +69 -0
- package/dist/picker/Calendar.js +213 -0
- package/dist/picker/Calendar.js.map +1 -0
- package/dist/picker/Cascader.d.ts +50 -0
- package/dist/picker/Cascader.js +199 -0
- package/dist/picker/Cascader.js.map +1 -0
- package/dist/picker/DatePicker.d.ts +52 -0
- package/dist/picker/DatePicker.js +135 -0
- package/dist/picker/DatePicker.js.map +1 -0
- package/dist/picker/DropdownMenu.d.ts +39 -0
- package/dist/picker/DropdownMenu.js +242 -0
- package/dist/picker/DropdownMenu.js.map +1 -0
- package/dist/picker/Picker.d.ts +67 -0
- package/dist/picker/Picker.js +185 -0
- package/dist/picker/Picker.js.map +1 -0
- package/dist/picker/PickerColumn.d.ts +36 -0
- package/dist/picker/PickerColumn.js +175 -0
- package/dist/picker/PickerColumn.js.map +1 -0
- package/dist/theme/dark.d.ts +121 -0
- package/dist/theme/dark.js +77 -0
- package/dist/theme/dark.js.map +1 -0
- package/dist/theme/divider.d.ts +6 -0
- package/dist/theme/divider.js +18 -0
- package/dist/theme/divider.js.map +1 -0
- package/dist/theme/token-names.d.ts +1389 -0
- package/dist/theme/tokens.d.ts +549 -0
- package/dist/theme/tokens.js +312 -0
- package/dist/theme/tokens.js.map +1 -0
- package/dist/utils/host.d.ts +97 -0
- package/dist/utils/host.js +98 -0
- package/dist/utils/host.js.map +1 -0
- package/dist/utils/presence.d.ts +11 -0
- package/dist/utils/presence.js +34 -0
- package/dist/utils/presence.js.map +1 -0
- package/dist/utils/props.d.ts +38 -0
- package/dist/utils/props.js +115 -0
- package/dist/utils/props.js.map +1 -0
- package/dist/utils/scales.d.ts +48 -0
- package/package.json +106 -3
package/dist/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { borderWidths, colors, durations, easings, fontSizes, fontWeights, fonts, letterSpacings, lineHeights, opacities, radii, shadows, sizes, space, strokeWidths, t } from "./theme/tokens.js";
|
|
2
|
+
import { darkTheme, systemTheme } from "./theme/dark.js";
|
|
3
|
+
import { enUS, zhCN } from "./config/lang.js";
|
|
4
|
+
import { ConfigContext, useConfig } from "./config/context.js";
|
|
5
|
+
import { dataAttrs, elementProps, hasContent, mergeAttrs, mergePartProps, mergeProps } from "./utils/props.js";
|
|
6
|
+
import { Icon, iconMarkup, iconStyles } from "./base/Icon.js";
|
|
7
|
+
import { Loading, loadingStyles } from "./feedback/Loading.js";
|
|
8
|
+
import { HOST_KEY, isMiniProgram, useHost, webHost } from "./utils/host.js";
|
|
9
|
+
import { Button, buttonRecipe } from "./base/Button.js";
|
|
10
|
+
import { Overlay, overlayStyles, useLockScroll } from "./overlay/Overlay.js";
|
|
11
|
+
import { Popup, popupStyles } from "./overlay/Popup.js";
|
|
12
|
+
import { PrivacyPrompt } from "./capability/PrivacyPrompt.js";
|
|
13
|
+
import { Dialog, dialogState, dialogStyles, settleDialog, showConfirmDialog, showDialog } from "./feedback/Dialog.js";
|
|
14
|
+
import { Notify, closeNotify, notifyState, notifyStyles, showNotify } from "./feedback/Notify.js";
|
|
15
|
+
import { Toast, closeToast, showFailToast, showLoadingToast, showSuccessToast, showToast, toastState, toastStyles } from "./feedback/Toast.js";
|
|
16
|
+
import { ConfigProvider, configProviderStyles } from "./config/ConfigProvider.js";
|
|
17
|
+
import { usePermission } from "./capability/usePermission.js";
|
|
18
|
+
import { useStorage } from "./capability/useStorage.js";
|
|
19
|
+
import { Divider, dividerStyles } from "./layout/Divider.js";
|
|
20
|
+
import { Space, spaceStyles } from "./layout/Space.js";
|
|
21
|
+
import { Cell, CellGroup, cellGroupStyles, cellStyles } from "./display/Cell.js";
|
|
22
|
+
import { Tag, tagRecipe } from "./display/Tag.js";
|
|
23
|
+
import { Badge, badgeStyles } from "./display/Badge.js";
|
|
24
|
+
import { Image, imageStyles } from "./display/Image.js";
|
|
25
|
+
import { SwipeCell, swipeCellStyles } from "./display/SwipeCell.js";
|
|
26
|
+
import { Empty, emptyStyles } from "./display/Empty.js";
|
|
27
|
+
import { NoticeBar, noticeBarStyles } from "./display/NoticeBar.js";
|
|
28
|
+
import { Grid, GridItem, gridStyles } from "./display/Grid.js";
|
|
29
|
+
import { Collapse, CollapseItem, collapseStyles } from "./display/Collapse.js";
|
|
30
|
+
import { Steps, stepsStyles } from "./display/Steps.js";
|
|
31
|
+
import { List, listStyles } from "./display/List.js";
|
|
32
|
+
import { Swiper, SwiperItem, swiperStyles } from "./display/Swiper.js";
|
|
33
|
+
import { IndexAnchor, IndexBar, indexBarStyles } from "./display/IndexBar.js";
|
|
34
|
+
import { NavBar, navBarStyles } from "./navigation/NavBar.js";
|
|
35
|
+
import { TabBar, TabBarItem, tabBarStyles } from "./navigation/TabBar.js";
|
|
36
|
+
import { Sticky, stickyStyles } from "./navigation/Sticky.js";
|
|
37
|
+
import { Tab, Tabs, tabsStyles } from "./navigation/Tabs.js";
|
|
38
|
+
import { BackTop, backTopStyles } from "./navigation/BackTop.js";
|
|
39
|
+
import { Picker, pickerStyles, resolveColumns } from "./picker/Picker.js";
|
|
40
|
+
import { DatePicker, TimePicker } from "./picker/DatePicker.js";
|
|
41
|
+
import { Cascader, cascaderStyles, findPath } from "./picker/Cascader.js";
|
|
42
|
+
import { Calendar, calendarStyles } from "./picker/Calendar.js";
|
|
43
|
+
import { DropdownItem, DropdownMenu, dropdownStyles } from "./picker/DropdownMenu.js";
|
|
44
|
+
import { ActionSheet, actionSheetStyles } from "./overlay/ActionSheet.js";
|
|
45
|
+
import { FormContext, isEmptyValue, useForm, useFormItem } from "./form/context.js";
|
|
46
|
+
import { Form } from "./form/Form.js";
|
|
47
|
+
import { FormItem, formItemStyles, renderFormItem } from "./form/FormItem.js";
|
|
48
|
+
import { Field, fieldStyles } from "./form/Field.js";
|
|
49
|
+
import { Search, searchStyles } from "./form/Search.js";
|
|
50
|
+
import { Switch, switchStyles } from "./form/Switch.js";
|
|
51
|
+
import { Checkbox, CheckboxGroup } from "./form/Checkbox.js";
|
|
52
|
+
import { Radio, RadioGroup } from "./form/Radio.js";
|
|
53
|
+
import { Stepper, stepperStyles } from "./form/Stepper.js";
|
|
54
|
+
import { Rate, rateStyles } from "./form/Rate.js";
|
|
55
|
+
import { Slider, sliderStyles } from "./form/Slider.js";
|
|
56
|
+
import { Uploader, uploaderStyles } from "./form/Uploader.js";
|
|
57
|
+
import { Skeleton, skeletonStyles } from "./feedback/Skeleton.js";
|
|
58
|
+
import { PullRefresh, pullRefreshStyles } from "./feedback/PullRefresh.js";
|
|
59
|
+
export { ActionSheet, BackTop, Badge, Button, Calendar, Cascader, Cell, CellGroup, Checkbox, CheckboxGroup, Collapse, CollapseItem, ConfigContext, ConfigProvider, DatePicker, Dialog, Divider, DropdownItem, DropdownMenu, Empty, Field, Form, FormContext, FormItem, Grid, GridItem, HOST_KEY, Icon, Image, IndexAnchor, IndexBar, List, Loading, NavBar, NoticeBar, Notify, Overlay, Picker, Popup, PrivacyPrompt, PullRefresh, Radio, RadioGroup, Rate, Search, Skeleton, Slider, Space, Stepper, Steps, Sticky, SwipeCell, Swiper, SwiperItem, Switch, Tab, TabBar, TabBarItem, Tabs, Tag, TimePicker, Toast, Uploader, actionSheetStyles, backTopStyles, badgeStyles, borderWidths, buttonRecipe, calendarStyles, cascaderStyles, cellGroupStyles, cellStyles, closeNotify, closeToast, collapseStyles, colors, configProviderStyles, darkTheme, dataAttrs, dialogState, dialogStyles, dividerStyles, dropdownStyles, durations, easings, elementProps, emptyStyles, enUS, fieldStyles, findPath, fontSizes, fontWeights, fonts, formItemStyles, gridStyles, hasContent, iconMarkup, iconStyles, imageStyles, indexBarStyles, isEmptyValue, isMiniProgram, letterSpacings, lineHeights, listStyles, loadingStyles, mergeAttrs, mergePartProps, mergeProps, navBarStyles, noticeBarStyles, notifyState, notifyStyles, opacities, overlayStyles, pickerStyles, popupStyles, pullRefreshStyles, radii, rateStyles, renderFormItem, resolveColumns, searchStyles, settleDialog, shadows, showConfirmDialog, showDialog, showFailToast, showLoadingToast, showNotify, showSuccessToast, showToast, sizes, skeletonStyles, sliderStyles, space, spaceStyles, stepperStyles, stepsStyles, stickyStyles, strokeWidths, swipeCellStyles, swiperStyles, switchStyles, systemTheme, t, tabBarStyles, tabsStyles, tagRecipe, toastState, toastStyles, uploaderStyles, useConfig, useForm, useFormItem, useHost, useLockScroll, usePermission, useStorage, webHost, zhCN };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
|
|
2
|
+
import type { VNodeChild } from 'vue';
|
|
3
|
+
import { type PartProps } from '../utils/props';
|
|
4
|
+
/** 文字的位置 */
|
|
5
|
+
export interface DividerAligns {
|
|
6
|
+
/** 靠起始边 */
|
|
7
|
+
start: unknown;
|
|
8
|
+
/** 居中 */
|
|
9
|
+
center: unknown;
|
|
10
|
+
/** 靠结束边 */
|
|
11
|
+
end: unknown;
|
|
12
|
+
}
|
|
13
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
14
|
+
export interface DividerProps extends PartProps<'div', 'role'> {
|
|
15
|
+
/** 线上的文字 */
|
|
16
|
+
children?: VNodeChild;
|
|
17
|
+
/**
|
|
18
|
+
* 文字的位置
|
|
19
|
+
* @default 'center'
|
|
20
|
+
*/
|
|
21
|
+
align?: keyof DividerAligns;
|
|
22
|
+
/** 虚线 */
|
|
23
|
+
dashed?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Divider 的样式:root、line、shortLine、dashed、text */
|
|
26
|
+
export declare const dividerStyles: Readonly<{
|
|
27
|
+
dashed: css.CompiledStyles;
|
|
28
|
+
line: css.CompiledStyles;
|
|
29
|
+
root: css.CompiledStyles;
|
|
30
|
+
shortLine: css.CompiledStyles;
|
|
31
|
+
text: css.CompiledStyles;
|
|
32
|
+
}>;
|
|
33
|
+
/** 分隔线(div[role=separator] > 线 + 文字 + 线) */
|
|
34
|
+
export declare const Divider: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<DividerProps>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { hasContent, mergeAttrs } from "../utils/props.js";
|
|
2
|
+
import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
3
|
+
import { _component, childrenProp, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
4
|
+
import { createVNode } from "vue";
|
|
5
|
+
//#region src/layout/Divider.tsx
|
|
6
|
+
/** 文字的位置 */
|
|
7
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
8
|
+
/** Divider 的样式:root、line、shortLine、dashed、text */
|
|
9
|
+
var dividerStyles = css.create({
|
|
10
|
+
root: {
|
|
11
|
+
display: "flex",
|
|
12
|
+
alignItems: "center",
|
|
13
|
+
gap: "_lg",
|
|
14
|
+
marginBlock: "_lg",
|
|
15
|
+
paddingInline: "_lg",
|
|
16
|
+
fontSize: "_sm",
|
|
17
|
+
color: "_textMuted"
|
|
18
|
+
},
|
|
19
|
+
line: {
|
|
20
|
+
flex: "1 1 0",
|
|
21
|
+
borderBlockStartWidth: "_hairline",
|
|
22
|
+
borderBlockStartStyle: "solid",
|
|
23
|
+
borderBlockStartColor: "_border"
|
|
24
|
+
},
|
|
25
|
+
shortLine: { flex: "0 0 10%" },
|
|
26
|
+
dashed: { borderBlockStartStyle: "dashed" },
|
|
27
|
+
text: { flex: "0 0 auto" }
|
|
28
|
+
});
|
|
29
|
+
/** 分隔线(div[role=separator] > 线 + 文字 + 线) */
|
|
30
|
+
var Divider = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
31
|
+
const children = childrenProp(_props);
|
|
32
|
+
const align = readonlyProp(_props, "align", "center");
|
|
33
|
+
const dashed = readonlyProp(_props, "dashed", false);
|
|
34
|
+
const rest = restProps(_props, _ctx, false);
|
|
35
|
+
return () => {
|
|
36
|
+
const line = (short) => createVNode("div", mergeAttrs({ sx: [
|
|
37
|
+
dividerStyles.line,
|
|
38
|
+
short && dividerStyles.shortLine,
|
|
39
|
+
dashed.value && dividerStyles.dashed
|
|
40
|
+
] }), null);
|
|
41
|
+
const labelled = hasContent(children.value);
|
|
42
|
+
return createVNode("div", mergeAttrs({ sx: dividerStyles.root }, rest, { role: "separator" }), [
|
|
43
|
+
line(labelled && align.value === "start"),
|
|
44
|
+
labelled && createVNode("span", mergeAttrs({ sx: dividerStyles.text }), [children.value]),
|
|
45
|
+
labelled && line(align.value === "end")
|
|
46
|
+
]);
|
|
47
|
+
};
|
|
48
|
+
}, {
|
|
49
|
+
name: "Divider",
|
|
50
|
+
props: ["align", "dashed"]
|
|
51
|
+
});
|
|
52
|
+
//#endregion
|
|
53
|
+
export { Divider, dividerStyles };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=Divider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.js","names":["_vtp_childrenProp","_vtp_readonlyProp","_vtp_restProps","_createVNode"],"sources":["../../src/layout/Divider.tsx"],"sourcesContent":["/**\n * 分隔线:把内容分成几段;可在线上放文字(居中或靠一边)。\n *\n * <Divider />\n * <Divider>以下为历史订单</Divider>\n * <Divider align=\"start\" dashed>备注</Divider>\n */\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { VNodeChild } from 'vue';\nimport { hasContent, mergeAttrs, type PartProps } from '../utils/props';\n\n/** 文字的位置 */\nexport interface DividerAligns {\n /** 靠起始边 */\n start: unknown;\n /** 居中 */\n center: unknown;\n /** 靠结束边 */\n end: unknown;\n}\n\n/** 未声明的属性落到根元素(div)上 */\nexport interface DividerProps extends PartProps<'div', 'role'> {\n /** 线上的文字 */\n children?: VNodeChild;\n /**\n * 文字的位置\n * @default 'center'\n */\n align?: keyof DividerAligns;\n /** 虚线 */\n dashed?: boolean;\n}\n\n/** Divider 的样式:root、line、shortLine、dashed、text */\nexport const dividerStyles = css.create({\n root: {\n display: 'flex',\n alignItems: 'center',\n gap: '_lg',\n marginBlock: '_lg',\n // 与单元格、分组标题的左右留白对齐\n paddingInline: '_lg',\n fontSize: '_sm',\n color: '_textMuted',\n },\n line: {\n flex: '1 1 0',\n borderBlockStartWidth: '_hairline',\n borderBlockStartStyle: 'solid',\n borderBlockStartColor: '_border',\n },\n // 文字靠边时那一侧的线短一截\n shortLine: { flex: '0 0 10%' },\n dashed: { borderBlockStartStyle: 'dashed' },\n text: { flex: '0 0 auto' },\n});\n\n/** 分隔线(div[role=separator] > 线 + 文字 + 线) */\nexport const Divider = _component(\n ({ children, align = 'center', dashed = false, ...rest }: DividerProps) =>\n () => {\n const line = (short: boolean) => (\n <div\n {...mergeAttrs<'div'>({\n sx: [\n dividerStyles.line,\n short && dividerStyles.shortLine,\n dashed && dividerStyles.dashed,\n ],\n })}\n />\n );\n const labelled = hasContent(children);\n return (\n <div {...mergeAttrs<'div'>({ sx: dividerStyles.root }, rest, { role: 'separator' })}>\n {line(labelled && align === 'start')}\n {labelled && <span {...mergeAttrs<'span'>({ sx: dividerStyles.text })}>{children}</span>}\n {labelled && line(align === 'end')}\n </div>\n );\n },\n);\n"],"mappings":";;;;;;;;AAoCA,IAAa,gBAAgB,IAAI,OAAO;CACtC,MAAM;EACJ,SAAS;EACT,YAAY;EACZ,KAAK;EACL,aAAa;EAEb,eAAe;EACf,UAAU;EACV,OAAO;CACT;CACA,MAAM;EACJ,MAAM;EACN,uBAAuB;EACvB,uBAAuB;EACvB,uBAAuB;CACzB;CAEA,WAAW,EAAE,MAAM,UAAU;CAC7B,QAAQ,EAAE,uBAAuB,SAAS;CAC1C,MAAM,EAAE,MAAM,WAAW;AAC3B,CAAC;;AAGD,IAAa,UAAU,0BACrB,QAAA,SAAA;CAAA,MAAA,WAAAA,aAAA,MAAA;CAAA,MAAA,QAAAC,aAAA,QAAA,SAAqB,QAAQ;CAAA,MAAA,SAAAA,aAAA,QAAA,UAAW,KAAK;CAAA,MAAK,OAAIC,UAAA,QAAA,MAAA,KAAA;CAAA,aAC9C;EACJ,MAAM,QAAQ,UAAcC,YAAA,OAEpB,WAAkB,EACpB,IAAI;GACF,cAAc;GACd,SAAS,cAAc;GACvB,OAAA,SAAU,cAAc;EAAM,EAElC,CAAC,GAAC,IAAA;EAGN,MAAM,WAAW,WAAU,SAAA,KAAS;EACpC,OAAAA,YAAA,OACW,WAAkB,EAAE,IAAI,cAAc,KAAK,GAAG,MAAM,EAAE,MAAM,YAAY,CAAC,GAAC;GAChF,KAAK,YAAY,MAAA,UAAU,OAAO;GAClC,YAAQA,YAAA,QAAc,WAAmB,EAAE,IAAI,cAAc,KAAK,CAAC,GAAC,CAAA,SAAA,KAAA,CAAA;GACpE,YAAY,KAAK,MAAA,UAAU,KAAK;EAAC,CAAA;CAGxC;AAAC,GAAA;CAAA,MAAA;CAAA,OAAA,CAAA,SAAA,QAAA;AAAA,CACL"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
|
|
2
|
+
import type { VNodeChild } from 'vue';
|
|
3
|
+
import { type PartProps } from '../utils/props';
|
|
4
|
+
/** 排列方向 */
|
|
5
|
+
export interface SpaceDirections {
|
|
6
|
+
/** 横排(默认换行) */
|
|
7
|
+
horizontal: unknown;
|
|
8
|
+
/** 竖排 */
|
|
9
|
+
vertical: unknown;
|
|
10
|
+
}
|
|
11
|
+
/** 交叉轴上的对齐 */
|
|
12
|
+
export interface SpaceAligns {
|
|
13
|
+
/** 起始边 */
|
|
14
|
+
start: unknown;
|
|
15
|
+
/** 居中 */
|
|
16
|
+
center: unknown;
|
|
17
|
+
/** 结束边 */
|
|
18
|
+
end: unknown;
|
|
19
|
+
/** 文字基线 */
|
|
20
|
+
baseline: unknown;
|
|
21
|
+
/** 拉伸 */
|
|
22
|
+
stretch: unknown;
|
|
23
|
+
}
|
|
24
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
25
|
+
export interface SpaceProps extends PartProps<'div'> {
|
|
26
|
+
/**
|
|
27
|
+
* 方向
|
|
28
|
+
* @default 'horizontal'
|
|
29
|
+
*/
|
|
30
|
+
direction?: keyof SpaceDirections;
|
|
31
|
+
/**
|
|
32
|
+
* 间距档位(随字号缩放)
|
|
33
|
+
* @default 'sm'
|
|
34
|
+
*/
|
|
35
|
+
gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
36
|
+
/** 交叉轴上的对齐;横排默认居中 */
|
|
37
|
+
align?: keyof SpaceAligns;
|
|
38
|
+
/**
|
|
39
|
+
* 横排时放不下就换行
|
|
40
|
+
* @default true
|
|
41
|
+
*/
|
|
42
|
+
wrap?: boolean;
|
|
43
|
+
/** 占满容器宽度(竖排时子元素也撑满) */
|
|
44
|
+
fill?: boolean;
|
|
45
|
+
/** 内容 */
|
|
46
|
+
children?: VNodeChild;
|
|
47
|
+
}
|
|
48
|
+
/** Space 的样式:root、vertical、wrap、fill、各间距与对齐 */
|
|
49
|
+
export declare const spaceStyles: Readonly<{
|
|
50
|
+
baseline: css.CompiledStyles;
|
|
51
|
+
center: css.CompiledStyles;
|
|
52
|
+
end: css.CompiledStyles;
|
|
53
|
+
fill: css.CompiledStyles;
|
|
54
|
+
lg: css.CompiledStyles;
|
|
55
|
+
md: css.CompiledStyles;
|
|
56
|
+
root: css.CompiledStyles;
|
|
57
|
+
sm: css.CompiledStyles;
|
|
58
|
+
start: css.CompiledStyles;
|
|
59
|
+
stretch: css.CompiledStyles;
|
|
60
|
+
vertical: css.CompiledStyles;
|
|
61
|
+
wrap: css.CompiledStyles;
|
|
62
|
+
xl: css.CompiledStyles;
|
|
63
|
+
xs: css.CompiledStyles;
|
|
64
|
+
}>;
|
|
65
|
+
/** 间距(div,弹性布局) */
|
|
66
|
+
export declare const Space: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<SpaceProps>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { mergeAttrs } from "../utils/props.js";
|
|
2
|
+
import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
3
|
+
import { _component, childrenProp, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
4
|
+
import { createVNode } from "vue";
|
|
5
|
+
//#region src/layout/Space.tsx
|
|
6
|
+
/** 排列方向 */
|
|
7
|
+
/** 交叉轴上的对齐 */
|
|
8
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
9
|
+
/** Space 的样式:root、vertical、wrap、fill、各间距与对齐 */
|
|
10
|
+
var spaceStyles = css.create({
|
|
11
|
+
root: {
|
|
12
|
+
display: "inline-flex",
|
|
13
|
+
alignItems: "center"
|
|
14
|
+
},
|
|
15
|
+
vertical: {
|
|
16
|
+
flexDirection: "column",
|
|
17
|
+
alignItems: "stretch"
|
|
18
|
+
},
|
|
19
|
+
wrap: { flexWrap: "wrap" },
|
|
20
|
+
fill: {
|
|
21
|
+
display: "flex",
|
|
22
|
+
width: "100%"
|
|
23
|
+
},
|
|
24
|
+
xs: { gap: "_xs" },
|
|
25
|
+
sm: { gap: "_sm" },
|
|
26
|
+
md: { gap: "_md" },
|
|
27
|
+
lg: { gap: "_lg" },
|
|
28
|
+
xl: { gap: "_xl" },
|
|
29
|
+
start: { alignItems: "flex-start" },
|
|
30
|
+
center: { alignItems: "center" },
|
|
31
|
+
end: { alignItems: "flex-end" },
|
|
32
|
+
baseline: { alignItems: "baseline" },
|
|
33
|
+
stretch: { alignItems: "stretch" }
|
|
34
|
+
});
|
|
35
|
+
/** 间距(div,弹性布局) */
|
|
36
|
+
var Space = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
37
|
+
const direction = readonlyProp(_props, "direction", "horizontal");
|
|
38
|
+
const gap = readonlyProp(_props, "gap", "sm");
|
|
39
|
+
const align = readonlyProp(_props, "align");
|
|
40
|
+
const wrap = readonlyProp(_props, "wrap", true);
|
|
41
|
+
const fill = readonlyProp(_props, "fill", false);
|
|
42
|
+
const children = childrenProp(_props);
|
|
43
|
+
const rest = restProps(_props, _ctx, false);
|
|
44
|
+
return () => createVNode("div", mergeAttrs({ sx: [
|
|
45
|
+
spaceStyles.root,
|
|
46
|
+
spaceStyles[gap.value],
|
|
47
|
+
direction.value === "vertical" && spaceStyles.vertical,
|
|
48
|
+
direction.value === "horizontal" && wrap.value && spaceStyles.wrap,
|
|
49
|
+
fill.value && spaceStyles.fill,
|
|
50
|
+
align.value && spaceStyles[align.value]
|
|
51
|
+
] }, rest), [children.value]);
|
|
52
|
+
}, {
|
|
53
|
+
name: "Space",
|
|
54
|
+
props: [
|
|
55
|
+
"direction",
|
|
56
|
+
"gap",
|
|
57
|
+
"align",
|
|
58
|
+
"wrap",
|
|
59
|
+
"fill"
|
|
60
|
+
]
|
|
61
|
+
});
|
|
62
|
+
//#endregion
|
|
63
|
+
export { Space, spaceStyles };
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=Space.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Space.js","names":["_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_createVNode"],"sources":["../../src/layout/Space.tsx"],"sourcesContent":["/**\n * 间距:一组元素横排或竖排,之间留同样的空;横排时可换行。\n *\n * <Space><Button>甲</Button><Button>乙</Button></Space>\n * <Space direction=\"vertical\" gap=\"lg\" fill>…</Space>\n */\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { VNodeChild } from 'vue';\nimport { mergeAttrs, type PartProps } from '../utils/props';\n\n/** 排列方向 */\nexport interface SpaceDirections {\n /** 横排(默认换行) */\n horizontal: unknown;\n /** 竖排 */\n vertical: unknown;\n}\n\n/** 交叉轴上的对齐 */\nexport interface SpaceAligns {\n /** 起始边 */\n start: unknown;\n /** 居中 */\n center: unknown;\n /** 结束边 */\n end: unknown;\n /** 文字基线 */\n baseline: unknown;\n /** 拉伸 */\n stretch: unknown;\n}\n\n/** 未声明的属性落到根元素(div)上 */\nexport interface SpaceProps extends PartProps<'div'> {\n /**\n * 方向\n * @default 'horizontal'\n */\n direction?: keyof SpaceDirections;\n /**\n * 间距档位(随字号缩放)\n * @default 'sm'\n */\n gap?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /** 交叉轴上的对齐;横排默认居中 */\n align?: keyof SpaceAligns;\n /**\n * 横排时放不下就换行\n * @default true\n */\n wrap?: boolean;\n /** 占满容器宽度(竖排时子元素也撑满) */\n fill?: boolean;\n /** 内容 */\n children?: VNodeChild;\n}\n\n/** Space 的样式:root、vertical、wrap、fill、各间距与对齐 */\nexport const spaceStyles = css.create({\n root: { display: 'inline-flex', alignItems: 'center' },\n vertical: { flexDirection: 'column', alignItems: 'stretch' },\n wrap: { flexWrap: 'wrap' },\n fill: { display: 'flex', width: '100%' },\n xs: { gap: '_xs' },\n sm: { gap: '_sm' },\n md: { gap: '_md' },\n lg: { gap: '_lg' },\n xl: { gap: '_xl' },\n start: { alignItems: 'flex-start' },\n center: { alignItems: 'center' },\n end: { alignItems: 'flex-end' },\n baseline: { alignItems: 'baseline' },\n stretch: { alignItems: 'stretch' },\n});\n\n/** 间距(div,弹性布局) */\nexport const Space = _component(\n ({\n direction = 'horizontal',\n gap = 'sm',\n align,\n wrap = true,\n fill = false,\n children,\n ...rest\n }: SpaceProps) =>\n () => (\n <div\n {...mergeAttrs<'div'>(\n {\n sx: [\n spaceStyles.root,\n spaceStyles[gap],\n direction === 'vertical' && spaceStyles.vertical,\n direction === 'horizontal' && wrap && spaceStyles.wrap,\n fill && spaceStyles.fill,\n align && spaceStyles[align],\n ],\n },\n rest,\n )}\n >\n {children}\n </div>\n ),\n);\n"],"mappings":";;;;;;;;;AA2DA,IAAa,cAAc,IAAI,OAAO;CACpC,MAAM;EAAE,SAAS;EAAe,YAAY;CAAS;CACrD,UAAU;EAAE,eAAe;EAAU,YAAY;CAAU;CAC3D,MAAM,EAAE,UAAU,OAAO;CACzB,MAAM;EAAE,SAAS;EAAQ,OAAO;CAAO;CACvC,IAAI,EAAE,KAAK,MAAM;CACjB,IAAI,EAAE,KAAK,MAAM;CACjB,IAAI,EAAE,KAAK,MAAM;CACjB,IAAI,EAAE,KAAK,MAAM;CACjB,IAAI,EAAE,KAAK,MAAM;CACjB,OAAO,EAAE,YAAY,aAAa;CAClC,QAAQ,EAAE,YAAY,SAAS;CAC/B,KAAK,EAAE,YAAY,WAAW;CAC9B,UAAU,EAAE,YAAY,WAAW;CACnC,SAAS,EAAE,YAAY,UAAU;AACnC,CAAC;;AAGD,IAAa,QAAQ,0BACnB,QAAA,SAAA;CAAA,MAAA,YAAAA,aAAA,QAAA,aACc,YAAY;CAAA,MAAA,MAAAA,aAAA,QAAA,OAClB,IAAI;CAAA,MAAA,QAAAA,aAAA,QAAA,OAAA;CAAA,MAAA,OAAAA,aAAA,QAAA,QAEH,IAAI;CAAA,MAAA,OAAAA,aAAA,QAAA,QACJ,KAAK;CAAA,MAAA,WAAAC,aAAA,MAAA;CAAA,MAET,OAAIC,UAAA,QAAA,MAAA,KAAA;CAAA,aAEPC,YAAA,OAEQ,WACF,EACE,IAAI;EACF,YAAY;EACZ,YAAW,IAAA;EACX,UAAA,UAAc,cAAc,YAAY;EACxC,UAAA,UAAc,gBAAY,KAAA,SAAY,YAAY;EAClD,KAAA,SAAQ,YAAY;EACpB,MAAA,SAAS,YAAW,MAAA;CAAO,EAE/B,GACA,IACF,GAAC,CAAA,SAAA,KAAA,CAAA;AAIJ,GAAA;CAAA,MAAA;CAAA,OAAA;EAAA;EAAA;EAAA;EAAA;EAAA;CAAA;AAAA,CACL"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
|
|
2
|
+
import { type VNodeChild } from 'vue';
|
|
3
|
+
import { type PartProps } from '../utils/props';
|
|
4
|
+
/** 未声明的属性落到按钮上 */
|
|
5
|
+
export interface BackTopProps extends PartProps<'button', 'type'> {
|
|
6
|
+
/**
|
|
7
|
+
* 滚过多少(px)才出现
|
|
8
|
+
* @default 200
|
|
9
|
+
*/
|
|
10
|
+
offset?: number;
|
|
11
|
+
/**
|
|
12
|
+
* 离底部多远(CSS 长度,另加安全区)
|
|
13
|
+
* @default '6em'
|
|
14
|
+
*/
|
|
15
|
+
bottom?: string;
|
|
16
|
+
/**
|
|
17
|
+
* 离右边多远(CSS 长度)
|
|
18
|
+
* @default '1.25em'
|
|
19
|
+
*/
|
|
20
|
+
right?: string;
|
|
21
|
+
/** 按钮里的内容(代替向上的箭头) */
|
|
22
|
+
children?: VNodeChild;
|
|
23
|
+
}
|
|
24
|
+
/** BackTop 的样式:root */
|
|
25
|
+
export declare const backTopStyles: Readonly<{
|
|
26
|
+
root: css.CompiledStyles;
|
|
27
|
+
}>;
|
|
28
|
+
/** 回到顶部(button,渲染到浮层根) */
|
|
29
|
+
export declare const BackTop: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<BackTopProps>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { useConfig } from "../config/context.js";
|
|
2
|
+
import { dataAttrs, mergeAttrs } from "../utils/props.js";
|
|
3
|
+
import { Icon } from "../base/Icon.js";
|
|
4
|
+
import { useHost } from "../utils/host.js";
|
|
5
|
+
import { usePresence } from "../utils/presence.js";
|
|
6
|
+
import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
7
|
+
import { _component, childrenProp, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
8
|
+
import { Teleport, createVNode, onBeforeUnmount, onMounted, ref } from "vue";
|
|
9
|
+
import { ArrowUp } from "@lucide/icons";
|
|
10
|
+
//#region src/navigation/BackTop.tsx
|
|
11
|
+
/**
|
|
12
|
+
* 回到顶部:页面往下滚过一段之后,右下角出现一个圆按钮,点了平滑滚回顶部。
|
|
13
|
+
*
|
|
14
|
+
* <BackTop />
|
|
15
|
+
* <BackTop offset={800} bottom="5em" />
|
|
16
|
+
*
|
|
17
|
+
* 滚动位置经宿主约定取(H5 是窗口,小程序是页面的 onPageScroll),浮在浮层根里。
|
|
18
|
+
*/
|
|
19
|
+
/** 未声明的属性落到按钮上 */
|
|
20
|
+
/** BackTop 的样式:root */
|
|
21
|
+
var backTopStyles = css.create({ root: {
|
|
22
|
+
position: "fixed",
|
|
23
|
+
zIndex: 1500,
|
|
24
|
+
display: "inline-flex",
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
justifyContent: "center",
|
|
27
|
+
width: "2.85em",
|
|
28
|
+
height: "2.85em",
|
|
29
|
+
margin: 0,
|
|
30
|
+
padding: 0,
|
|
31
|
+
borderWidth: 0,
|
|
32
|
+
borderRadius: "_full",
|
|
33
|
+
backgroundColor: {
|
|
34
|
+
default: "_surface",
|
|
35
|
+
":active": "_fillActive"
|
|
36
|
+
},
|
|
37
|
+
boxShadow: "_md",
|
|
38
|
+
color: "_text",
|
|
39
|
+
fontSize: "_md",
|
|
40
|
+
cursor: "pointer",
|
|
41
|
+
opacity: {
|
|
42
|
+
default: 0,
|
|
43
|
+
"[data-state=\"open\"]": 1
|
|
44
|
+
},
|
|
45
|
+
transform: {
|
|
46
|
+
default: "scale(0.8)",
|
|
47
|
+
"[data-state=\"open\"]": "none"
|
|
48
|
+
},
|
|
49
|
+
transitionProperty: "opacity, transform",
|
|
50
|
+
transitionDuration: "_md"
|
|
51
|
+
} });
|
|
52
|
+
/** 回到顶部(button,渲染到浮层根) */
|
|
53
|
+
var BackTop = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
54
|
+
const offset = readonlyProp(_props, "offset", 200);
|
|
55
|
+
const bottom = readonlyProp(_props, "bottom", "6em");
|
|
56
|
+
const right = readonlyProp(_props, "right", "1.25em");
|
|
57
|
+
const children = childrenProp(_props);
|
|
58
|
+
const rest = restProps(_props, _ctx, false);
|
|
59
|
+
const host = useHost();
|
|
60
|
+
const config = useConfig();
|
|
61
|
+
let shown = ref(false);
|
|
62
|
+
onMounted(() => shown.value = host.scrollTop() > offset.value);
|
|
63
|
+
const stop = host.onScroll((top) => shown.value = top > offset.value);
|
|
64
|
+
onBeforeUnmount(stop);
|
|
65
|
+
const presence = usePresence(() => shown.value, 240);
|
|
66
|
+
return () => presence.mounted && createVNode(Teleport, { "to": host.overlayRoot() }, { default: () => [createVNode("button", mergeAttrs({
|
|
67
|
+
sx: [config.rootSx, backTopStyles.root],
|
|
68
|
+
style: {
|
|
69
|
+
insetBlockEnd: `calc(${bottom.value} + env(safe-area-inset-bottom))`,
|
|
70
|
+
insetInlineEnd: right.value
|
|
71
|
+
}
|
|
72
|
+
}, rest, {
|
|
73
|
+
type: "button",
|
|
74
|
+
"aria-label": config.lang.backTop,
|
|
75
|
+
onClick: () => host.scrollTo(0, { smooth: true }),
|
|
76
|
+
...dataAttrs({ "data-state": presence.visible ? "open" : "closed" })
|
|
77
|
+
}), [children.value ?? createVNode(Icon, { "icon": ArrowUp }, null)])] });
|
|
78
|
+
}, {
|
|
79
|
+
name: "BackTop",
|
|
80
|
+
props: [
|
|
81
|
+
"offset",
|
|
82
|
+
"bottom",
|
|
83
|
+
"right"
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
//#endregion
|
|
87
|
+
export { BackTop, backTopStyles };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=BackTop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackTop.js","names":["_vtp_readonlyProp","_vtp_childrenProp","_vtp_restProps","_vue_ref","_createVNode"],"sources":["../../src/navigation/BackTop.tsx"],"sourcesContent":["/**\n * 回到顶部:页面往下滚过一段之后,右下角出现一个圆按钮,点了平滑滚回顶部。\n *\n * <BackTop />\n * <BackTop offset={800} bottom=\"5em\" />\n *\n * 滚动位置经宿主约定取(H5 是窗口,小程序是页面的 onPageScroll),浮在浮层根里。\n */\nimport { ArrowUp } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { Teleport, onBeforeUnmount, onMounted, type VNodeChild } from 'vue';\nimport { Icon } from '../base/Icon';\nimport { useConfig } from '../config/context';\nimport { useHost } from '../utils/host';\nimport { usePresence } from '../utils/presence';\nimport { dataAttrs, mergeAttrs, type PartProps } from '../utils/props';\n\n/** 未声明的属性落到按钮上 */\nexport interface BackTopProps extends PartProps<'button', 'type'> {\n /**\n * 滚过多少(px)才出现\n * @default 200\n */\n offset?: number;\n /**\n * 离底部多远(CSS 长度,另加安全区)\n * @default '6em'\n */\n bottom?: string;\n /**\n * 离右边多远(CSS 长度)\n * @default '1.25em'\n */\n right?: string;\n /** 按钮里的内容(代替向上的箭头) */\n children?: VNodeChild;\n}\n\n/** BackTop 的样式:root */\nexport const backTopStyles = css.create({\n root: {\n position: 'fixed',\n zIndex: 1500,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '2.85em',\n height: '2.85em',\n margin: 0,\n padding: 0,\n borderWidth: 0,\n borderRadius: '_full',\n backgroundColor: { default: '_surface', ':active': '_fillActive' },\n boxShadow: '_md',\n color: '_text',\n fontSize: '_md',\n cursor: 'pointer',\n opacity: { default: 0, '[data-state=\"open\"]': 1 },\n transform: { default: 'scale(0.8)', '[data-state=\"open\"]': 'none' },\n transitionProperty: 'opacity, transform',\n transitionDuration: '_md',\n },\n});\n\n/** 回到顶部(button,渲染到浮层根) */\nexport const BackTop = _component(\n ({ offset = 200, bottom = '6em', right = '1.25em', children, ...rest }: BackTopProps) => {\n const host = useHost();\n const config = useConfig();\n let shown = _state(false);\n // 挂上时按当前的位置判断一次(从别的页面返回时页面可能已经滚下去了)\n onMounted(() => (shown = host.scrollTop() > offset));\n const stop = host.onScroll((top) => (shown = top > offset));\n onBeforeUnmount(stop);\n const presence = usePresence(() => shown, 240);\n return () =>\n presence.mounted && (\n <Teleport to={host.overlayRoot() as never}>\n <button\n {...mergeAttrs<'button'>(\n {\n sx: [config.rootSx, backTopStyles.root],\n style: {\n insetBlockEnd: `calc(${bottom} + env(safe-area-inset-bottom))`,\n insetInlineEnd: right,\n },\n },\n rest,\n {\n type: 'button',\n 'aria-label': config.lang.backTop,\n onClick: () => host.scrollTo(0, { smooth: true }),\n ...dataAttrs({ 'data-state': presence.visible ? 'open' : 'closed' }),\n },\n )}\n >\n {children ?? <Icon icon={ArrowUp} />}\n </button>\n </Teleport>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwCA,IAAa,gBAAgB,IAAI,OAAO,EACtC,MAAM;CACJ,UAAU;CACV,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,aAAa;CACb,cAAc;CACd,iBAAiB;EAAE,SAAS;EAAY,WAAW;CAAc;CACjE,WAAW;CACX,OAAO;CACP,UAAU;CACV,QAAQ;CACR,SAAS;EAAE,SAAS;EAAG,yBAAuB;CAAE;CAChD,WAAW;EAAE,SAAS;EAAc,yBAAuB;CAAO;CAClE,oBAAoB;CACpB,oBAAoB;AACtB,EACF,CAAC;;AAGD,IAAa,UAAU,0BACrB,QAAA,SAAyF;CAAA,MAAA,SAAAA,aAAA,QAAA,UAA7E,GAAG;CAAA,MAAA,SAAAA,aAAA,QAAA,UAAW,KAAK;CAAA,MAAA,QAAAA,aAAA,QAAA,SAAU,QAAQ;CAAA,MAAA,WAAAC,aAAA,MAAA;CAAA,MAAe,OAAIC,UAAA,QAAA,MAAA,KAAA;CAClE,MAAM,OAAO,QAAQ;CACrB,MAAM,SAAS,UAAU;CACzB,IAAI,QAAKC,IAAU,KAAK;CAExB,gBAAiB,MAAA,QAAQ,KAAK,UAAU,IAAC,OAAA,KAAU;CACnD,MAAM,OAAO,KAAK,UAAU,QAAS,MAAA,QAAQ,MAAG,OAAA,KAAU;CAC1D,gBAAgB,IAAI;CACpB,MAAM,WAAW,kBAAY,MAAA,OAAa,GAAG;CAC7C,aACE,SAAS,WAAOC,YAAA,UAAA,EAAA,MACA,KAAK,YAAY,EAAC,GAAA,EAAA,eAAA,CAAAA,YAAA,UAExB,WACF;EACE,IAAI,CAAC,OAAO,QAAQ,cAAc,IAAI;EACtC,OAAO;GACL,eAAe,QAAA,OAAA,MAAA;GACf,gBAAc,MAAA;EAChB;CACF,GACA,MACA;EACE,MAAM;EACN,cAAc,OAAO,KAAK;EAC1B,eAAe,KAAK,SAAS,GAAG,EAAE,QAAQ,KAAK,CAAC;EAChD,GAAG,UAAU,EAAE,cAAc,SAAS,UAAU,SAAS,SAAS,CAAC;CACrE,CACF,GAAC,CAEA,SAAA,SAAAA,YAAA,MAAA,EAAA,QAAwB,QAAO,GAAA,IAAA,CAAI,CAAA,CAAA,EAAA,CAAA;AAI9C,GAAC;CAAA,MAAA;CAAA,OAAA;EAAA;EAAA;EAAA;CAAA;AAAA,CACH"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';
|
|
2
|
+
import type { VNodeChild } from 'vue';
|
|
3
|
+
import { type PartProps } from '../utils/props';
|
|
4
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
5
|
+
export interface NavBarProps extends PartProps<'div', 'title' | 'placeholder'> {
|
|
6
|
+
/** 标题 */
|
|
7
|
+
title?: VNodeChild;
|
|
8
|
+
/** 左边显示返回箭头 */
|
|
9
|
+
leftArrow?: boolean;
|
|
10
|
+
/** 左边的文字(箭头后面) */
|
|
11
|
+
left?: VNodeChild;
|
|
12
|
+
/** 右边的内容(文字、图标按钮) */
|
|
13
|
+
right?: VNodeChild;
|
|
14
|
+
/** 固定在页面顶部 */
|
|
15
|
+
fixed?: boolean;
|
|
16
|
+
/** 固定时在原位置留出同样高的空 */
|
|
17
|
+
placeholder?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 底部的细线
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
22
|
+
border?: boolean;
|
|
23
|
+
/** 点了左边 */
|
|
24
|
+
onClickLeft?: (event: Event) => void;
|
|
25
|
+
/** 点了右边 */
|
|
26
|
+
onClickRight?: (event: Event) => void;
|
|
27
|
+
/** 左边按钮的部件属性 */
|
|
28
|
+
propsLeft?: PartProps<'button'>;
|
|
29
|
+
/** 右边按钮的部件属性 */
|
|
30
|
+
propsRight?: PartProps<'button'>;
|
|
31
|
+
}
|
|
32
|
+
/** NavBar 的样式:root、fixed、border、bar、title、side、left、right、placeholder */
|
|
33
|
+
export declare const navBarStyles: Readonly<{
|
|
34
|
+
arrow: css.CompiledStyles;
|
|
35
|
+
bar: css.CompiledStyles;
|
|
36
|
+
border: css.CompiledStyles;
|
|
37
|
+
fixed: css.CompiledStyles;
|
|
38
|
+
left: css.CompiledStyles;
|
|
39
|
+
placeholder: css.CompiledStyles;
|
|
40
|
+
right: css.CompiledStyles;
|
|
41
|
+
root: css.CompiledStyles;
|
|
42
|
+
side: css.CompiledStyles;
|
|
43
|
+
title: css.CompiledStyles;
|
|
44
|
+
}>;
|
|
45
|
+
/** 导航栏(div > 左 + 标题 + 右) */
|
|
46
|
+
export declare const NavBar: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<NavBarProps>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { useConfig } from "../config/context.js";
|
|
2
|
+
import { hasContent, mergeAttrs } from "../utils/props.js";
|
|
3
|
+
import { Icon } from "../base/Icon.js";
|
|
4
|
+
import { css } from "@zerodep-dev/vue-tsx-pro-tsx/styles";
|
|
5
|
+
import { _component, mergeJsxProps, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
|
|
6
|
+
import { createVNode } from "vue";
|
|
7
|
+
import { ChevronLeft } from "@lucide/icons";
|
|
8
|
+
//#region src/navigation/NavBar.tsx
|
|
9
|
+
/**
|
|
10
|
+
* 导航栏:页面顶部的一条,中间标题,左边返回,右边操作。H5 页面用;小程序有原生的导航栏,自定义导航栏(navigationStyle: custom)时也可以用它。
|
|
11
|
+
*
|
|
12
|
+
* <NavBar title="订单详情" leftArrow onClickLeft={() => history.back()} />
|
|
13
|
+
* <NavBar title="购物车" right="编辑" onClickRight={edit} fixed placeholder />
|
|
14
|
+
*
|
|
15
|
+
* fixed 时固定在顶部并让出刘海屏的安全区;placeholder 在原位置留出同样高的空,下面的内容不被盖住。
|
|
16
|
+
*/
|
|
17
|
+
/** 未声明的属性落到根元素(div)上 */
|
|
18
|
+
/** NavBar 的样式:root、fixed、border、bar、title、side、left、right、placeholder */
|
|
19
|
+
var navBarStyles = css.create({
|
|
20
|
+
root: {
|
|
21
|
+
backgroundColor: "_surface",
|
|
22
|
+
color: "_text"
|
|
23
|
+
},
|
|
24
|
+
fixed: {
|
|
25
|
+
position: "fixed",
|
|
26
|
+
insetBlockStart: 0,
|
|
27
|
+
insetInline: 0,
|
|
28
|
+
zIndex: 1e3,
|
|
29
|
+
paddingBlockStart: "env(safe-area-inset-top)"
|
|
30
|
+
},
|
|
31
|
+
border: {
|
|
32
|
+
borderBlockEndWidth: "_hairline",
|
|
33
|
+
borderBlockEndStyle: "solid",
|
|
34
|
+
borderBlockEndColor: "_border"
|
|
35
|
+
},
|
|
36
|
+
bar: {
|
|
37
|
+
position: "relative",
|
|
38
|
+
display: "flex",
|
|
39
|
+
alignItems: "center",
|
|
40
|
+
justifyContent: "center",
|
|
41
|
+
height: "3.15em",
|
|
42
|
+
fontSize: "_md"
|
|
43
|
+
},
|
|
44
|
+
title: {
|
|
45
|
+
maxWidth: "60%",
|
|
46
|
+
overflow: "hidden",
|
|
47
|
+
whiteSpace: "nowrap",
|
|
48
|
+
textOverflow: "ellipsis",
|
|
49
|
+
fontSize: "_lg",
|
|
50
|
+
fontWeight: "_semibold"
|
|
51
|
+
},
|
|
52
|
+
side: {
|
|
53
|
+
position: "absolute",
|
|
54
|
+
insetBlock: 0,
|
|
55
|
+
display: "inline-flex",
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
gap: "0.15em",
|
|
58
|
+
margin: 0,
|
|
59
|
+
paddingBlock: 0,
|
|
60
|
+
paddingInline: "_lg",
|
|
61
|
+
borderWidth: 0,
|
|
62
|
+
backgroundColor: "transparent",
|
|
63
|
+
color: {
|
|
64
|
+
default: "_accentText",
|
|
65
|
+
":active": "_accentActive"
|
|
66
|
+
},
|
|
67
|
+
fontFamily: "inherit",
|
|
68
|
+
fontSize: "inherit",
|
|
69
|
+
cursor: "pointer"
|
|
70
|
+
},
|
|
71
|
+
left: { insetInlineStart: 0 },
|
|
72
|
+
right: { insetInlineEnd: 0 },
|
|
73
|
+
arrow: {
|
|
74
|
+
fontSize: "1.4em",
|
|
75
|
+
marginInlineStart: "-0.3em"
|
|
76
|
+
},
|
|
77
|
+
placeholder: {
|
|
78
|
+
height: "calc(3.15em + env(safe-area-inset-top))",
|
|
79
|
+
fontSize: "_md"
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
/** 导航栏(div > 左 + 标题 + 右) */
|
|
83
|
+
var NavBar = /*#__PURE__*/ _component((_props, _ctx) => {
|
|
84
|
+
const title = readonlyProp(_props, "title");
|
|
85
|
+
const leftArrow = readonlyProp(_props, "leftArrow", false);
|
|
86
|
+
const left = readonlyProp(_props, "left");
|
|
87
|
+
const right = readonlyProp(_props, "right");
|
|
88
|
+
const fixed = readonlyProp(_props, "fixed", false);
|
|
89
|
+
const placeholder = readonlyProp(_props, "placeholder", false);
|
|
90
|
+
const border = readonlyProp(_props, "border", true);
|
|
91
|
+
const onClickLeft = readonlyProp(_props, "onClickLeft");
|
|
92
|
+
const onClickRight = readonlyProp(_props, "onClickRight");
|
|
93
|
+
const propsLeft = readonlyProp(_props, "propsLeft");
|
|
94
|
+
const propsRight = readonlyProp(_props, "propsRight");
|
|
95
|
+
const rest = restProps(_props, _ctx, true);
|
|
96
|
+
const config = useConfig();
|
|
97
|
+
return () => {
|
|
98
|
+
const bar = createVNode("div", mergeAttrs({ sx: [
|
|
99
|
+
navBarStyles.root,
|
|
100
|
+
fixed.value && navBarStyles.fixed,
|
|
101
|
+
border.value && navBarStyles.border
|
|
102
|
+
] }, rest), [createVNode("div", mergeAttrs({ sx: navBarStyles.bar }), [
|
|
103
|
+
(leftArrow.value || hasContent(left.value)) && createVNode("button", mergeAttrs({ sx: [navBarStyles.side, navBarStyles.left] }, propsLeft.value, {
|
|
104
|
+
type: "button",
|
|
105
|
+
"aria-label": hasContent(left.value) ? void 0 : config.lang.back,
|
|
106
|
+
onClick: (event) => onClickLeft.value?.(event)
|
|
107
|
+
}), [leftArrow.value && createVNode(Icon, {
|
|
108
|
+
"icon": ChevronLeft,
|
|
109
|
+
"sx": navBarStyles.arrow
|
|
110
|
+
}, null), left.value]),
|
|
111
|
+
hasContent(title.value) && createVNode("div", mergeJsxProps(mergeAttrs({ sx: navBarStyles.title }), {
|
|
112
|
+
"role": "heading",
|
|
113
|
+
"aria-level": 1
|
|
114
|
+
}), [title.value]),
|
|
115
|
+
hasContent(right.value) && createVNode("button", mergeAttrs({ sx: [navBarStyles.side, navBarStyles.right] }, propsRight.value, {
|
|
116
|
+
type: "button",
|
|
117
|
+
onClick: (event) => onClickRight.value?.(event)
|
|
118
|
+
}), [right.value])
|
|
119
|
+
])]);
|
|
120
|
+
return fixed.value && placeholder.value ? [createVNode("div", mergeAttrs({ sx: navBarStyles.placeholder }), null), bar] : bar;
|
|
121
|
+
};
|
|
122
|
+
}, {
|
|
123
|
+
name: "NavBar",
|
|
124
|
+
props: [
|
|
125
|
+
"title",
|
|
126
|
+
"leftArrow",
|
|
127
|
+
"left",
|
|
128
|
+
"right",
|
|
129
|
+
"fixed",
|
|
130
|
+
"placeholder",
|
|
131
|
+
"border",
|
|
132
|
+
"onClickLeft",
|
|
133
|
+
"onClickRight",
|
|
134
|
+
"propsLeft",
|
|
135
|
+
"propsRight"
|
|
136
|
+
]
|
|
137
|
+
});
|
|
138
|
+
//#endregion
|
|
139
|
+
export { NavBar, navBarStyles };
|
|
140
|
+
|
|
141
|
+
//# sourceMappingURL=NavBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavBar.js","names":["_vtp_readonlyProp","_vtp_restProps","_createVNode","_mergeProps"],"sources":["../../src/navigation/NavBar.tsx"],"sourcesContent":["/**\n * 导航栏:页面顶部的一条,中间标题,左边返回,右边操作。H5 页面用;小程序有原生的导航栏,自定义导航栏(navigationStyle: custom)时也可以用它。\n *\n * <NavBar title=\"订单详情\" leftArrow onClickLeft={() => history.back()} />\n * <NavBar title=\"购物车\" right=\"编辑\" onClickRight={edit} fixed placeholder />\n *\n * fixed 时固定在顶部并让出刘海屏的安全区;placeholder 在原位置留出同样高的空,下面的内容不被盖住。\n */\nimport { ChevronLeft } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport { css } from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { VNodeChild } from 'vue';\nimport { Icon } from '../base/Icon';\nimport { useConfig } from '../config/context';\nimport { hasContent, mergeAttrs, type PartProps } from '../utils/props';\n\n/** 未声明的属性落到根元素(div)上 */\nexport interface NavBarProps extends PartProps<'div', 'title' | 'placeholder'> {\n /** 标题 */\n title?: VNodeChild;\n /** 左边显示返回箭头 */\n leftArrow?: boolean;\n /** 左边的文字(箭头后面) */\n left?: VNodeChild;\n /** 右边的内容(文字、图标按钮) */\n right?: VNodeChild;\n /** 固定在页面顶部 */\n fixed?: boolean;\n /** 固定时在原位置留出同样高的空 */\n placeholder?: boolean;\n /**\n * 底部的细线\n * @default true\n */\n border?: boolean;\n /** 点了左边 */\n onClickLeft?: (event: Event) => void;\n /** 点了右边 */\n onClickRight?: (event: Event) => void;\n /** 左边按钮的部件属性 */\n propsLeft?: PartProps<'button'>;\n /** 右边按钮的部件属性 */\n propsRight?: PartProps<'button'>;\n}\n\n/** NavBar 的样式:root、fixed、border、bar、title、side、left、right、placeholder */\nexport const navBarStyles = css.create({\n root: { backgroundColor: '_surface', color: '_text' },\n fixed: {\n position: 'fixed',\n insetBlockStart: 0,\n insetInline: 0,\n zIndex: 1000,\n paddingBlockStart: 'env(safe-area-inset-top)',\n },\n border: {\n borderBlockEndWidth: '_hairline',\n borderBlockEndStyle: 'solid',\n borderBlockEndColor: '_border',\n },\n bar: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '3.15em',\n fontSize: '_md',\n },\n title: {\n maxWidth: '60%',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n fontSize: '_lg',\n fontWeight: '_semibold',\n },\n side: {\n position: 'absolute',\n insetBlock: 0,\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.15em',\n margin: 0,\n paddingBlock: 0,\n paddingInline: '_lg',\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: { default: '_accentText', ':active': '_accentActive' },\n fontFamily: 'inherit',\n fontSize: 'inherit',\n cursor: 'pointer',\n },\n left: { insetInlineStart: 0 },\n right: { insetInlineEnd: 0 },\n arrow: { fontSize: '1.4em', marginInlineStart: '-0.3em' },\n placeholder: { height: 'calc(3.15em + env(safe-area-inset-top))', fontSize: '_md' },\n});\n\n/** 导航栏(div > 左 + 标题 + 右) */\nexport const NavBar = _component(\n ({\n title,\n leftArrow = false,\n left,\n right,\n fixed = false,\n placeholder = false,\n border = true,\n onClickLeft,\n onClickRight,\n propsLeft,\n propsRight,\n ...rest\n }: NavBarProps) => {\n const config = useConfig();\n return () => {\n const bar = (\n <div\n {...mergeAttrs<'div'>(\n { sx: [navBarStyles.root, fixed && navBarStyles.fixed, border && navBarStyles.border] },\n rest,\n )}\n >\n <div {...mergeAttrs<'div'>({ sx: navBarStyles.bar })}>\n {(leftArrow || hasContent(left)) && (\n <button\n {...mergeAttrs<'button'>(\n { sx: [navBarStyles.side, navBarStyles.left] },\n propsLeft,\n {\n type: 'button',\n // 只有箭头时按钮没有文字,给读屏一个名称\n 'aria-label': hasContent(left) ? undefined : config.lang.back,\n onClick: (event: Event) => onClickLeft?.(event),\n },\n )}\n >\n {leftArrow && <Icon icon={ChevronLeft} sx={navBarStyles.arrow} />}\n {left}\n </button>\n )}\n {hasContent(title) && (\n <div {...mergeAttrs<'div'>({ sx: navBarStyles.title })} role=\"heading\" aria-level={1}>\n {title}\n </div>\n )}\n {hasContent(right) && (\n <button\n {...mergeAttrs<'button'>(\n { sx: [navBarStyles.side, navBarStyles.right] },\n propsRight,\n {\n type: 'button',\n onClick: (event: Event) => onClickRight?.(event),\n },\n )}\n >\n {right}\n </button>\n )}\n </div>\n </div>\n );\n return fixed && placeholder\n ? [<div {...mergeAttrs<'div'>({ sx: navBarStyles.placeholder })} />, bar]\n : bar;\n };\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;AA8CA,IAAa,eAAe,IAAI,OAAO;CACrC,MAAM;EAAE,iBAAiB;EAAY,OAAO;CAAQ;CACpD,OAAO;EACL,UAAU;EACV,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,mBAAmB;CACrB;CACA,QAAQ;EACN,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;CACvB;CACA,KAAK;EACH,UAAU;EACV,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,QAAQ;EACR,UAAU;CACZ;CACA,OAAO;EACL,UAAU;EACV,UAAU;EACV,YAAY;EACZ,cAAc;EACd,UAAU;EACV,YAAY;CACd;CACA,MAAM;EACJ,UAAU;EACV,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,KAAK;EACL,QAAQ;EACR,cAAc;EACd,eAAe;EACf,aAAa;EACb,iBAAiB;EACjB,OAAO;GAAE,SAAS;GAAe,WAAW;EAAgB;EAC5D,YAAY;EACZ,UAAU;EACV,QAAQ;CACV;CACA,MAAM,EAAE,kBAAkB,EAAE;CAC5B,OAAO,EAAE,gBAAgB,EAAE;CAC3B,OAAO;EAAE,UAAU;EAAS,mBAAmB;CAAS;CACxD,aAAa;EAAE,QAAQ;EAA2C,UAAU;CAAM;AACpF,CAAC;;AAGD,IAAa,SAAS,0BACpB,QAAA,SAamB;CAAA,MAAA,QAAAA,aAAA,QAAA,OAAA;CAAA,MAAA,YAAAA,aAAA,QAAA,aAXL,KAAK;CAAA,MAAA,OAAAA,aAAA,QAAA,MAAA;CAAA,MAAA,QAAAA,aAAA,QAAA,OAAA;CAAA,MAAA,QAAAA,aAAA,QAAA,SAGT,KAAK;CAAA,MAAA,cAAAA,aAAA,QAAA,eACC,KAAK;CAAA,MAAA,SAAAA,aAAA,QAAA,UACV,IAAI;CAAA,MAAA,cAAAA,aAAA,QAAA,aAAA;CAAA,MAAA,eAAAA,aAAA,QAAA,cAAA;CAAA,MAAA,YAAAA,aAAA,QAAA,WAAA;CAAA,MAAA,aAAAA,aAAA,QAAA,YAAA;CAAA,MAKV,OAAIC,UAAA,QAAA,MAAA,IAAA;CAEP,MAAM,SAAS,UAAU;CACzB,aAAa;EACX,MAAM,MAAGC,YAAA,OAED,WACF,EAAE,IAAI;GAAC,aAAa;GAAM,MAAA,SAAS,aAAa;GAAO,OAAA,SAAU,aAAa;EAAM,EAAE,GACtF,IACF,GAAC,CAAAA,YAAA,OAEQ,WAAkB,EAAE,IAAI,aAAa,IAAI,CAAC,GAAC;IAChD,UAAA,SAAa,WAAU,KAAA,KAAK,MAACA,YAAA,UAEvB,WACF,EAAE,IAAI,CAAC,aAAa,MAAM,aAAa,IAAI,EAAE,GAAC,UAAA,OAE9C;IACE,MAAM;IAEN,cAAc,WAAU,KAAA,KAAK,IAAI,KAAA,IAAY,OAAO,KAAK;IACzD,UAAU,UAAiB,YAAA,QAAc,KAAK;GAChD,CACF,GAAC,CAEA,UAAA,SAAAA,YAAA,MAAA;IAAA,QAAyB;IAAW,MAAM,aAAa;GAAK,GAAA,IAAA,GAAI,KAAA,KAAA,CAAA;GAIpE,WAAU,MAAA,KAAM,KAACA,YAAA,OAAAC,cACP,WAAkB,EAAE,IAAI,aAAa,MAAM,CAAC,GAAC;IAAA,QAAA;IAAA,cAA6B;GAAC,CAAA,GAAA,CAAA,MAAA,KAAA,CAAA;GAIrF,WAAU,MAAA,KAAM,KAACD,YAAA,UAEV,WACF,EAAE,IAAI,CAAC,aAAa,MAAM,aAAa,KAAK,EAAE,GAAC,WAAA,OAE/C;IACE,MAAM;IACN,UAAU,UAAiB,aAAA,QAAe,KAAK;GACjD,CACF,GAAC,CAAA,MAAA,KAAA,CAAA;EAIJ,CAAA,CAAA,CAAA;EAIP,OAAO,MAAA,SAAA,YAAA,QACH,CAAAA,YAAA,OAAU,WAAkB,EAAE,IAAI,aAAa,YAAY,CAAC,GAAC,IAAA,GAAM,GAAG,IACtE;CACN;AACF,GAAC;CAAA,MAAA;CAAA,OAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;CAAA;AAAA,CACH"}
|