@baishuyun/ai-design 2.0.38 → 2.1.0-alpha.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/.storybook/main.ts +31 -31
- package/.storybook/preview.ts +16 -16
- package/CHANGELOG.md +512 -501
- package/components.json +22 -22
- package/package.json +9 -6
- package/scripts/strip-layers.cjs +41 -41
- package/src/components/abs-fullscreen-gradient-bg.tsx +35 -35
- package/src/components/agent-helper/agent-category-select-menu/index.tsx +57 -57
- package/src/components/agent-helper/agent-entry-card/index.tsx +94 -94
- package/src/components/agent-helper/agent-helper-card/index.tsx +179 -179
- package/src/components/agent-helper/agent-helper-card-list/index.tsx +59 -59
- package/src/components/agent-helper/agent-helper-main-layout/index.tsx +60 -60
- package/src/components/agent-helper/agent-sort-select/index.tsx +89 -89
- package/src/components/agent-helper/agent-tag/index.tsx +29 -29
- package/src/components/agent-helper/app-select/index.tsx +559 -559
- package/src/components/agent-helper/condition-group/index.tsx +75 -75
- package/src/components/agent-helper/condition-input/index.tsx +233 -233
- package/src/components/agent-helper/condition-item/index.tsx +237 -237
- package/src/components/agent-helper/condition-quantifier-select/index.tsx +142 -142
- package/src/components/agent-helper/condition-trigger-description/index.tsx +49 -49
- package/src/components/agent-helper/date-picker/calendar-panel.tsx +164 -164
- package/src/components/agent-helper/date-picker/date-input.tsx +91 -91
- package/src/components/agent-helper/date-picker/date-picker.tsx +327 -327
- package/src/components/agent-helper/date-picker/footer-panel.tsx +44 -44
- package/src/components/agent-helper/date-picker/index.ts +3 -3
- package/src/components/agent-helper/date-picker/month-panel.tsx +82 -82
- package/src/components/agent-helper/date-picker/time-panel.tsx +146 -146
- package/src/components/agent-helper/date-picker/types.ts +37 -37
- package/src/components/agent-helper/date-picker/utils.ts +121 -121
- package/src/components/agent-helper/date-picker/year-panel.tsx +86 -86
- package/src/components/agent-helper/exec-log-filter/index.tsx +232 -232
- package/src/components/agent-helper/field-edit-preference-select/index.tsx +291 -291
- package/src/components/agent-helper/field-select/index.tsx +466 -466
- package/src/components/agent-helper/field-value-input/china-address-data.ts +4117 -4117
- package/src/components/agent-helper/field-value-input/display.tsx +71 -71
- package/src/components/agent-helper/field-value-input/icons.tsx +38 -38
- package/src/components/agent-helper/field-value-input/index.tsx +144 -144
- package/src/components/agent-helper/field-value-input/inputs.tsx +247 -247
- package/src/components/agent-helper/field-value-input/picker-inputs.tsx +1141 -1141
- package/src/components/agent-helper/flow-node-action-trigger-select/index.tsx +57 -57
- package/src/components/agent-helper/form-action-trigger-select/index.tsx +60 -60
- package/src/components/agent-helper/form-divider/index.tsx +44 -44
- package/src/components/agent-helper/form-select/index.tsx +732 -732
- package/src/components/agent-helper/monthdays-select/index.tsx +378 -378
- package/src/components/agent-helper/offset-preference-select/index.tsx +268 -268
- package/src/components/agent-helper/offset-type-select/index.tsx +66 -66
- package/src/components/agent-helper/offset-unit-select/index.tsx +54 -54
- package/src/components/agent-helper/placeholder-card/index.tsx +75 -75
- package/src/components/agent-helper/prompt-input/index.tsx +646 -646
- package/src/components/agent-helper/relational-operator-select/index.tsx +179 -179
- package/src/components/agent-helper/repeat-by-type-select/index.tsx +53 -53
- package/src/components/agent-helper/repeat-preference-select/index.tsx +162 -162
- package/src/components/agent-helper/repeat-preference-type-select/index.tsx +58 -58
- package/src/components/agent-helper/search-input/index.tsx +35 -35
- package/src/components/agent-helper/table/index.tsx +114 -114
- package/src/components/agent-helper/trigger-select/index.tsx +121 -121
- package/src/components/agent-helper/trigger-time-preference-select/index.tsx +189 -189
- package/src/components/agent-helper/trigger-time-source-type-select/index.tsx +53 -53
- package/src/components/agent-helper/weekdays-select/index.tsx +230 -230
- package/src/components/agent-scroll-selector.tsx +193 -193
- package/src/components/agent-select.tsx +154 -154
- package/src/components/attachment-part-group.tsx +35 -35
- package/src/components/attachment-part.tsx +296 -296
- package/src/components/attachments-previewer.tsx +272 -272
- package/src/components/base-button.tsx +49 -49
- package/src/components/border-animation.tsx +107 -107
- package/src/components/border-color-animation.tsx +66 -66
- package/src/components/bot-avatar-name.tsx +36 -36
- package/src/components/bot-icon.tsx +23 -23
- package/src/components/bs-entry-select/app-group-folder.tsx +61 -61
- package/src/components/bs-entry-select/bs-entry-select.tsx +296 -296
- package/src/components/bs-entry-select/build-tree.ts +265 -265
- package/src/components/bs-entry-select/entry-item.tsx +45 -45
- package/src/components/bs-entry-select/entry-popover.tsx +99 -99
- package/src/components/bs-entry-select/index.ts +7 -7
- package/src/components/bs-entry-select/other-app-section.tsx +96 -96
- package/src/components/bs-entry-select/scroll-slider.tsx +872 -872
- package/src/components/bs-entry-select/search-input.tsx +4 -4
- package/src/components/bs-entry-select/tree-item-node.tsx +84 -84
- package/src/components/bs-entry-select/types.ts +46 -46
- package/src/components/bs-icons.tsx +1362 -1362
- package/src/components/card-field.tsx +23 -23
- package/src/components/card.tsx +36 -36
- package/src/components/chat-area-header.tsx +65 -65
- package/src/components/check-card.tsx +77 -77
- package/src/components/circle-checker.tsx +66 -66
- package/src/components/collapsible-txt-msg.tsx +75 -75
- package/src/components/collapsible.tsx +9 -9
- package/src/components/confirm-dialog.tsx +139 -139
- package/src/components/date-range-picker.tsx +91 -91
- package/src/components/fake-bot-msg.tsx +51 -51
- package/src/components/field-checker-list-msg.tsx +146 -146
- package/src/components/field-checker.tsx +185 -185
- package/src/components/field-icon.tsx +13 -13
- package/src/components/field-value-checker.tsx +116 -116
- package/src/components/fields-design-info-table.tsx +160 -160
- package/src/components/fields-generating-indicator.tsx +95 -95
- package/src/components/fields-portal.tsx +18 -18
- package/src/components/fields-previewer.tsx +216 -216
- package/src/components/font-icon.tsx +65 -65
- package/src/components/form-info-editor.tsx +263 -263
- package/src/components/formula-tag.tsx +32 -32
- package/src/components/generate-animation.tsx +56 -56
- package/src/components/icon-btn.tsx +43 -43
- package/src/components/icon-card.tsx +67 -67
- package/src/components/icons/calendar-icon.tsx +5 -5
- package/src/components/icons/clear-all-icon.tsx +5 -5
- package/src/components/icons/empty-agent-icon.tsx +93 -93
- package/src/components/icons/empty-table-icon.tsx +104 -104
- package/src/components/icons/grids-icon.tsx +5 -5
- package/src/components/img-part.tsx +27 -27
- package/src/components/legacy-slot.tsx +110 -110
- package/src/components/line-checker.tsx +168 -168
- package/src/components/linear-gradient-border-btn.tsx +48 -48
- package/src/components/linear-gradient-color-bg-animation.tsx +103 -103
- package/src/components/memoized-markdown.tsx +32 -32
- package/src/components/message-content.tsx +21 -21
- package/src/components/number-part.tsx +46 -46
- package/src/components/office-container.tsx +289 -289
- package/src/components/option-item.tsx +27 -27
- package/src/components/output-config-editor.tsx +478 -478
- package/src/components/previewer-header.tsx +270 -270
- package/src/components/primary-confirm-btn.tsx +58 -58
- package/src/components/primary-entry-btn.tsx +48 -48
- package/src/components/radio-card.tsx +63 -63
- package/src/components/scroll-to-bottom-btn.tsx +28 -28
- package/src/components/split-line.tsx +9 -9
- package/src/components/square-checker.tsx +87 -87
- package/src/components/subform-fields-value-checker.tsx +184 -184
- package/src/components/tab-radio-group.tsx +83 -83
- package/src/components/tooltip.tsx +53 -53
- package/src/components/ui/button.tsx +51 -51
- package/src/components/ui/calendar.tsx +57 -57
- package/src/components/ui/dialog.tsx +104 -104
- package/src/components/ui/drawer.tsx +279 -279
- package/src/components/ui/form.tsx +202 -202
- package/src/components/ui/icons.tsx +1267 -1267
- package/src/components/ui/input.tsx +28 -28
- package/src/components/ui/label.tsx +30 -30
- package/src/components/ui/popover.tsx +85 -85
- package/src/components/ui/select.tsx +236 -236
- package/src/components/ui/spinner.tsx +17 -17
- package/src/components/ui/switch.tsx +33 -33
- package/src/components/ui/tabs.tsx +62 -62
- package/src/components/ui/textarea.tsx +28 -28
- package/src/components/ui/tooltip.tsx +53 -53
- package/src/components/user-txt-msg-bubble.tsx +47 -47
- package/src/components/warning-msg.tsx +27 -27
- package/src/const/ui.ts +119 -119
- package/src/css.d.ts +4 -4
- package/src/hooks/use-column-appear.ts +78 -78
- package/src/hooks/use-portal-container.ts +27 -27
- package/src/hooks/use-resizable-width.ts +129 -129
- package/src/hooks/use-select-popover-position.ts +74 -74
- package/src/hooks/use-shadow.ts +127 -127
- package/src/index.ts +226 -226
- package/src/lib/utils.ts +138 -138
- package/src/stories/AbsFullscreenGradientBg.stories.tsx +36 -36
- package/src/stories/AgentCategorySelectMenu.stories.tsx +33 -33
- package/src/stories/AgentEntryCard.stories.tsx +90 -90
- package/src/stories/AgentHelperCard.stories.tsx +105 -105
- package/src/stories/AgentHelperCardList.stories.tsx +120 -120
- package/src/stories/AgentHelperMainLayout.stories.tsx +71 -71
- package/src/stories/AgentScrollSelector.stories.tsx +95 -95
- package/src/stories/AgentSelect.stories.tsx +134 -134
- package/src/stories/AgentTag.stories.tsx +44 -44
- package/src/stories/AppSelect.stories.tsx +250 -250
- package/src/stories/AttachmentPart.stories.tsx +122 -122
- package/src/stories/AttachmentPartGroup.stories.tsx +152 -152
- package/src/stories/AttachmentsPreviewer.stories.tsx +306 -306
- package/src/stories/BaseButton.stories.tsx +33 -33
- package/src/stories/BorderAnimation.stories.tsx +116 -116
- package/src/stories/BorderColorAnimation.stories.tsx +63 -63
- package/src/stories/BotAvatarAndName.stories.ts +24 -24
- package/src/stories/BotIcon.stories.ts +22 -22
- package/src/stories/BsConditionInput.stories.tsx +460 -460
- package/src/stories/BsEntrySelect.stories.tsx +343 -343
- package/src/stories/BsTooltip.stories.tsx +32 -32
- package/src/stories/Card.stories.tsx +28 -28
- package/src/stories/CardField.stories.tsx +87 -87
- package/src/stories/ChatAreaHeader.stories.ts +26 -26
- package/src/stories/CheckCard.stories.tsx +114 -114
- package/src/stories/CircleChecker.stories.tsx +89 -89
- package/src/stories/CollapsibleTextMsg.stories.ts +44 -44
- package/src/stories/ConditionGroup.stories.tsx +216 -216
- package/src/stories/ConditionInput.stories.tsx +502 -502
- package/src/stories/ConditionItem.stories.tsx +163 -163
- package/src/stories/ConditonQuantifierSelect.stories.tsx +54 -54
- package/src/stories/ConditonTriggerDescription.stories.tsx +61 -61
- package/src/stories/ConfirmDialog.stories.tsx +123 -123
- package/src/stories/DataTable.stories.tsx +191 -191
- package/src/stories/DatePicker.stories.tsx +174 -174
- package/src/stories/ExecLogFilter.stories.tsx +145 -145
- package/src/stories/FakeBotMsg.stories.tsx +36 -36
- package/src/stories/FieldEditPreferenceSelect.stories.tsx +161 -161
- package/src/stories/FieldSelect.stories.tsx +228 -228
- package/src/stories/FieldValueInput.stories.tsx +442 -442
- package/src/stories/FlowNodeActionTriggerSelect.stories.tsx +80 -80
- package/src/stories/Form.stories.tsx +302 -302
- package/src/stories/FormActionTriggerSelect.stories.tsx +80 -80
- package/src/stories/FormDivider.stories.tsx +31 -31
- package/src/stories/FormInfoEditor.stories.tsx +173 -173
- package/src/stories/FormSelect.stories.tsx +222 -222
- package/src/stories/FormulaTag.stories.tsx +68 -68
- package/src/stories/GenerateAnimation.stories.ts +20 -20
- package/src/stories/IconBtn.stories.tsx +32 -32
- package/src/stories/IconCard.stories.tsx +35 -35
- package/src/stories/IconLib.tsx +45 -45
- package/src/stories/Icons.stories.ts +22 -22
- package/src/stories/ImgMsgPart.stories.tsx +42 -42
- package/src/stories/Input.stories.tsx +102 -102
- package/src/stories/Label.stories.tsx +66 -66
- package/src/stories/LegacySlot.stories.tsx +56 -56
- package/src/stories/LineChecker.stories.tsx +133 -133
- package/src/stories/LinearGradientBorderBtn.stories.tsx +86 -86
- package/src/stories/LinearGradientColorBgAnimation.stories.tsx +60 -60
- package/src/stories/MemoizedMarkdown.stories.tsx +102 -102
- package/src/stories/MessageContent.stories.tsx +36 -36
- package/src/stories/MonthdaysSelect.stories.tsx +78 -78
- package/src/stories/NumbersMsgPart.stories.tsx +42 -42
- package/src/stories/OfficeContainer.stories.tsx +287 -287
- package/src/stories/OffsetPreferenceSelect.stories.tsx +118 -118
- package/src/stories/OffsetTypeSelect.stories.tsx +75 -75
- package/src/stories/OffsetUnitSelect.stories.tsx +61 -61
- package/src/stories/OptionItem.stories.tsx +77 -77
- package/src/stories/OutputConfigEditor.stories.tsx +96 -96
- package/src/stories/PlaceholderCard.stories.tsx +35 -35
- package/src/stories/PreviewerHeader.stories.tsx +91 -91
- package/src/stories/PrimaryConfirmBtn.stories.tsx +60 -60
- package/src/stories/PrimaryEntryBtn.stories.tsx +74 -74
- package/src/stories/PromptInput.stories.tsx +228 -228
- package/src/stories/RadioCard.stories.tsx +103 -103
- package/src/stories/RelationalOperatorSelect.stories.tsx +61 -61
- package/src/stories/RepeatByTypeSelect.stories.tsx +58 -58
- package/src/stories/RepeatPreferenceSelect.stories.tsx +107 -107
- package/src/stories/RepeatPreferenceTypeSelect.stories.tsx +58 -58
- package/src/stories/ScrollToBottom.stories.tsx +24 -24
- package/src/stories/SearchInput.stories.tsx +50 -50
- package/src/stories/Select.stories.tsx +128 -128
- package/src/stories/SplitLine.stories.tsx +40 -40
- package/src/stories/SquareChecker.stories.tsx +96 -96
- package/src/stories/TabRadioGroup.stories.tsx +84 -84
- package/src/stories/Textarea.stories.tsx +67 -67
- package/src/stories/TriggerSelect.stories.tsx +48 -48
- package/src/stories/TriggerTimePreferenceSelect.stories.tsx +106 -106
- package/src/stories/TriggerTimeSourceTypeSelect.stories.tsx +68 -68
- package/src/stories/UserTextMsgBubble.stories.ts +24 -24
- package/src/stories/WarningMessage.stories.tsx +23 -23
- package/src/stories/WeekdaysSelect.stories.tsx +66 -66
- package/src/stories/assets/demo.css +539 -539
- package/src/stories/assets/demo_index.html +7988 -7988
- package/src/stories/assets/iconfont.css +1377 -1377
- package/src/stories/assets/iconfont.json +2382 -2382
- package/src/stories/assets/iconfont.svg +697 -697
- package/src/stories/collapsible.stories.tsx +47 -47
- package/src/stories/drawer.stories.tsx +196 -196
- package/src/stories/field-checker-list-msg.stories.tsx +95 -95
- package/src/stories/field-checker.stories.tsx +117 -117
- package/src/stories/field-icon.stories.tsx +70 -70
- package/src/stories/field-value-checker.stories.tsx +113 -113
- package/src/stories/fields-design-info-table.stories.tsx +203 -203
- package/src/stories/fields-generating.stories.tsx +41 -41
- package/src/stories/fields-previewer.stories.tsx +77 -77
- package/src/stories/subform-fields-value-checker.stories.tsx +98 -98
- package/src/style.css +226 -226
- package/src/types.ts +8 -8
- package/style.css +3652 -3652
- package/tsconfig.json +13 -13
- package/vite.config.ts +44 -44
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
import { DatePicker } from '../components/agent-helper/date-picker/date-picker';
|
|
4
|
-
import { DateInput } from '../components/agent-helper/date-picker/date-input';
|
|
5
|
-
import type { DateFormat } from '../components/agent-helper/date-picker/types';
|
|
6
|
-
|
|
7
|
-
// ── DatePicker Stories ──────────────────────────────────────────────────
|
|
8
|
-
|
|
9
|
-
const meta: Meta<typeof DatePicker> = {
|
|
10
|
-
title: 'Agent Helper/DatePicker',
|
|
11
|
-
component: DatePicker,
|
|
12
|
-
tags: ['autodocs'],
|
|
13
|
-
parameters: { layout: 'centered' },
|
|
14
|
-
decorators: [
|
|
15
|
-
(Story) => (
|
|
16
|
-
<div style={{ padding: 40 }}>
|
|
17
|
-
<Story />
|
|
18
|
-
</div>
|
|
19
|
-
),
|
|
20
|
-
],
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export default meta;
|
|
24
|
-
type Story = StoryObj<typeof meta>;
|
|
25
|
-
|
|
26
|
-
export const Default: Story = {
|
|
27
|
-
args: { format: 'yyyy-MM-dd' },
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
export const WithInitialValue: Story = {
|
|
31
|
-
args: { value: new Date(2026, 4, 15), format: 'yyyy-MM-dd' },
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const DateTimeWithSeconds: Story = {
|
|
35
|
-
args: { value: new Date(2026, 4, 15, 14, 30, 45), format: 'yyyy-MM-dd HH:mm:ss' },
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const DateTimeWithMinutes: Story = {
|
|
39
|
-
args: { value: new Date(2026, 4, 15, 14, 30), format: 'yyyy-MM-dd HH:mm' },
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export const TimeOnlyWithSeconds: Story = {
|
|
43
|
-
args: { value: new Date(2026, 0, 1, 14, 30, 45), format: 'HH:mm:ss' },
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export const HourMinuteOnly: Story = {
|
|
47
|
-
args: { value: new Date(2026, 0, 1, 14, 30), format: 'HH:mm' },
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
export const MonthOnly: Story = {
|
|
51
|
-
args: { value: new Date(2026, 4, 1), format: 'yyyy-MM' },
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export const YearOnly: Story = {
|
|
55
|
-
args: { value: new Date(2026, 0, 1), format: 'yyyy' },
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export const WithDateRange: Story = {
|
|
59
|
-
args: { format: 'yyyy-MM-dd', minDate: new Date(2026, 0, 1), maxDate: new Date(2026, 11, 31) },
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export const WithDateTimeRange: Story = {
|
|
63
|
-
args: {
|
|
64
|
-
value: new Date(2026, 4, 15, 12, 0, 0),
|
|
65
|
-
format: 'yyyy-MM-dd HH:mm:ss',
|
|
66
|
-
minDate: new Date(2026, 4, 1, 8, 0, 0),
|
|
67
|
-
maxDate: new Date(2026, 4, 31, 18, 0, 0),
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export const DisabledToday: Story = {
|
|
72
|
-
args: { format: 'yyyy-MM-dd', maxDate: new Date(2020, 0, 1) },
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export const Interactive: Story = {
|
|
76
|
-
render: (args) => {
|
|
77
|
-
const [val, setVal] = useState<Date | undefined>(
|
|
78
|
-
args.value ? new Date(args.value as Date) : undefined
|
|
79
|
-
);
|
|
80
|
-
return (
|
|
81
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
82
|
-
<DatePicker
|
|
83
|
-
{...(args as any)}
|
|
84
|
-
value={val}
|
|
85
|
-
onChange={(date) => setVal(date ?? undefined)}
|
|
86
|
-
/>
|
|
87
|
-
<div style={{ padding: 12, background: '#F5F7FA', borderRadius: 8, fontSize: 14 }}>
|
|
88
|
-
<strong>当前值: </strong>
|
|
89
|
-
<span>{val ? val.toLocaleString() : '(未选择)'}</span>
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
);
|
|
93
|
-
},
|
|
94
|
-
args: { format: 'yyyy-MM-dd' as DateFormat },
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
// ── DateInput Stories ───────────────────────────────────────────────────
|
|
98
|
-
|
|
99
|
-
export const DateInputDefault: StoryObj<typeof DateInput> = {
|
|
100
|
-
render: () => <DateInput />,
|
|
101
|
-
name: 'DateInput / Default',
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
export const DateInputWithValue: StoryObj<typeof DateInput> = {
|
|
105
|
-
render: () => <DateInput value={new Date(2026, 4, 15)} format="yyyy-MM-dd" />,
|
|
106
|
-
name: 'DateInput / With Value',
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
export const DateInputDateTime: StoryObj<typeof DateInput> = {
|
|
110
|
-
render: () => (
|
|
111
|
-
<DateInput
|
|
112
|
-
value={new Date(2026, 4, 15, 14, 30, 45)}
|
|
113
|
-
format="yyyy-MM-dd HH:mm:ss"
|
|
114
|
-
/>
|
|
115
|
-
),
|
|
116
|
-
name: 'DateInput / DateTime',
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export const DateInputTimeOnly: StoryObj<typeof DateInput> = {
|
|
120
|
-
render: () => (
|
|
121
|
-
<DateInput value={new Date(2026, 0, 1, 14, 30, 0)} format="HH:mm" />
|
|
122
|
-
),
|
|
123
|
-
name: 'DateInput / Time Only',
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
export const DateInputMonthOnly: StoryObj<typeof DateInput> = {
|
|
127
|
-
render: () => (
|
|
128
|
-
<DateInput value={new Date(2026, 4, 1)} format="yyyy-MM" />
|
|
129
|
-
),
|
|
130
|
-
name: 'DateInput / Month Only',
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
export const DateInputYearOnly: StoryObj<typeof DateInput> = {
|
|
134
|
-
render: () => (
|
|
135
|
-
<DateInput value={new Date(2026, 0, 1)} format="yyyy" />
|
|
136
|
-
),
|
|
137
|
-
name: 'DateInput / Year Only',
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
export const DateInputWithRange: StoryObj<typeof DateInput> = {
|
|
141
|
-
render: () => (
|
|
142
|
-
<DateInput
|
|
143
|
-
format="yyyy-MM-dd"
|
|
144
|
-
minDate={new Date(2026, 4, 1)}
|
|
145
|
-
maxDate={new Date(2026, 4, 31)}
|
|
146
|
-
/>
|
|
147
|
-
),
|
|
148
|
-
name: 'DateInput / With Range',
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
export const DateInputDisabled: StoryObj<typeof DateInput> = {
|
|
152
|
-
render: () => <DateInput value={new Date(2026, 4, 15)} disabled />,
|
|
153
|
-
name: 'DateInput / Disabled',
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
export const DateInputInteractive: StoryObj<typeof DateInput> = {
|
|
157
|
-
render: () => {
|
|
158
|
-
const [val, setVal] = useState<Date | undefined>();
|
|
159
|
-
return (
|
|
160
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
161
|
-
<DateInput
|
|
162
|
-
value={val}
|
|
163
|
-
onChange={(date) => setVal(date ?? undefined)}
|
|
164
|
-
format="yyyy-MM-dd HH:mm:ss"
|
|
165
|
-
/>
|
|
166
|
-
<div style={{ padding: 12, background: '#F5F7FA', borderRadius: 8, fontSize: 14 }}>
|
|
167
|
-
<strong>当前值: </strong>
|
|
168
|
-
<span>{val ? val.toLocaleString() : '(未选择)'}</span>
|
|
169
|
-
</div>
|
|
170
|
-
</div>
|
|
171
|
-
);
|
|
172
|
-
},
|
|
173
|
-
name: 'DateInput / Interactive',
|
|
174
|
-
};
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
+
import { DatePicker } from '../components/agent-helper/date-picker/date-picker';
|
|
4
|
+
import { DateInput } from '../components/agent-helper/date-picker/date-input';
|
|
5
|
+
import type { DateFormat } from '../components/agent-helper/date-picker/types';
|
|
6
|
+
|
|
7
|
+
// ── DatePicker Stories ──────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
const meta: Meta<typeof DatePicker> = {
|
|
10
|
+
title: 'Agent Helper/DatePicker',
|
|
11
|
+
component: DatePicker,
|
|
12
|
+
tags: ['autodocs'],
|
|
13
|
+
parameters: { layout: 'centered' },
|
|
14
|
+
decorators: [
|
|
15
|
+
(Story) => (
|
|
16
|
+
<div style={{ padding: 40 }}>
|
|
17
|
+
<Story />
|
|
18
|
+
</div>
|
|
19
|
+
),
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export default meta;
|
|
24
|
+
type Story = StoryObj<typeof meta>;
|
|
25
|
+
|
|
26
|
+
export const Default: Story = {
|
|
27
|
+
args: { format: 'yyyy-MM-dd' },
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const WithInitialValue: Story = {
|
|
31
|
+
args: { value: new Date(2026, 4, 15), format: 'yyyy-MM-dd' },
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const DateTimeWithSeconds: Story = {
|
|
35
|
+
args: { value: new Date(2026, 4, 15, 14, 30, 45), format: 'yyyy-MM-dd HH:mm:ss' },
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const DateTimeWithMinutes: Story = {
|
|
39
|
+
args: { value: new Date(2026, 4, 15, 14, 30), format: 'yyyy-MM-dd HH:mm' },
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export const TimeOnlyWithSeconds: Story = {
|
|
43
|
+
args: { value: new Date(2026, 0, 1, 14, 30, 45), format: 'HH:mm:ss' },
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const HourMinuteOnly: Story = {
|
|
47
|
+
args: { value: new Date(2026, 0, 1, 14, 30), format: 'HH:mm' },
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const MonthOnly: Story = {
|
|
51
|
+
args: { value: new Date(2026, 4, 1), format: 'yyyy-MM' },
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const YearOnly: Story = {
|
|
55
|
+
args: { value: new Date(2026, 0, 1), format: 'yyyy' },
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const WithDateRange: Story = {
|
|
59
|
+
args: { format: 'yyyy-MM-dd', minDate: new Date(2026, 0, 1), maxDate: new Date(2026, 11, 31) },
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const WithDateTimeRange: Story = {
|
|
63
|
+
args: {
|
|
64
|
+
value: new Date(2026, 4, 15, 12, 0, 0),
|
|
65
|
+
format: 'yyyy-MM-dd HH:mm:ss',
|
|
66
|
+
minDate: new Date(2026, 4, 1, 8, 0, 0),
|
|
67
|
+
maxDate: new Date(2026, 4, 31, 18, 0, 0),
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const DisabledToday: Story = {
|
|
72
|
+
args: { format: 'yyyy-MM-dd', maxDate: new Date(2020, 0, 1) },
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const Interactive: Story = {
|
|
76
|
+
render: (args) => {
|
|
77
|
+
const [val, setVal] = useState<Date | undefined>(
|
|
78
|
+
args.value ? new Date(args.value as Date) : undefined
|
|
79
|
+
);
|
|
80
|
+
return (
|
|
81
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
82
|
+
<DatePicker
|
|
83
|
+
{...(args as any)}
|
|
84
|
+
value={val}
|
|
85
|
+
onChange={(date) => setVal(date ?? undefined)}
|
|
86
|
+
/>
|
|
87
|
+
<div style={{ padding: 12, background: '#F5F7FA', borderRadius: 8, fontSize: 14 }}>
|
|
88
|
+
<strong>当前值: </strong>
|
|
89
|
+
<span>{val ? val.toLocaleString() : '(未选择)'}</span>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
);
|
|
93
|
+
},
|
|
94
|
+
args: { format: 'yyyy-MM-dd' as DateFormat },
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// ── DateInput Stories ───────────────────────────────────────────────────
|
|
98
|
+
|
|
99
|
+
export const DateInputDefault: StoryObj<typeof DateInput> = {
|
|
100
|
+
render: () => <DateInput />,
|
|
101
|
+
name: 'DateInput / Default',
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export const DateInputWithValue: StoryObj<typeof DateInput> = {
|
|
105
|
+
render: () => <DateInput value={new Date(2026, 4, 15)} format="yyyy-MM-dd" />,
|
|
106
|
+
name: 'DateInput / With Value',
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export const DateInputDateTime: StoryObj<typeof DateInput> = {
|
|
110
|
+
render: () => (
|
|
111
|
+
<DateInput
|
|
112
|
+
value={new Date(2026, 4, 15, 14, 30, 45)}
|
|
113
|
+
format="yyyy-MM-dd HH:mm:ss"
|
|
114
|
+
/>
|
|
115
|
+
),
|
|
116
|
+
name: 'DateInput / DateTime',
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export const DateInputTimeOnly: StoryObj<typeof DateInput> = {
|
|
120
|
+
render: () => (
|
|
121
|
+
<DateInput value={new Date(2026, 0, 1, 14, 30, 0)} format="HH:mm" />
|
|
122
|
+
),
|
|
123
|
+
name: 'DateInput / Time Only',
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const DateInputMonthOnly: StoryObj<typeof DateInput> = {
|
|
127
|
+
render: () => (
|
|
128
|
+
<DateInput value={new Date(2026, 4, 1)} format="yyyy-MM" />
|
|
129
|
+
),
|
|
130
|
+
name: 'DateInput / Month Only',
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export const DateInputYearOnly: StoryObj<typeof DateInput> = {
|
|
134
|
+
render: () => (
|
|
135
|
+
<DateInput value={new Date(2026, 0, 1)} format="yyyy" />
|
|
136
|
+
),
|
|
137
|
+
name: 'DateInput / Year Only',
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export const DateInputWithRange: StoryObj<typeof DateInput> = {
|
|
141
|
+
render: () => (
|
|
142
|
+
<DateInput
|
|
143
|
+
format="yyyy-MM-dd"
|
|
144
|
+
minDate={new Date(2026, 4, 1)}
|
|
145
|
+
maxDate={new Date(2026, 4, 31)}
|
|
146
|
+
/>
|
|
147
|
+
),
|
|
148
|
+
name: 'DateInput / With Range',
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
export const DateInputDisabled: StoryObj<typeof DateInput> = {
|
|
152
|
+
render: () => <DateInput value={new Date(2026, 4, 15)} disabled />,
|
|
153
|
+
name: 'DateInput / Disabled',
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export const DateInputInteractive: StoryObj<typeof DateInput> = {
|
|
157
|
+
render: () => {
|
|
158
|
+
const [val, setVal] = useState<Date | undefined>();
|
|
159
|
+
return (
|
|
160
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
161
|
+
<DateInput
|
|
162
|
+
value={val}
|
|
163
|
+
onChange={(date) => setVal(date ?? undefined)}
|
|
164
|
+
format="yyyy-MM-dd HH:mm:ss"
|
|
165
|
+
/>
|
|
166
|
+
<div style={{ padding: 12, background: '#F5F7FA', borderRadius: 8, fontSize: 14 }}>
|
|
167
|
+
<strong>当前值: </strong>
|
|
168
|
+
<span>{val ? val.toLocaleString() : '(未选择)'}</span>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
);
|
|
172
|
+
},
|
|
173
|
+
name: 'DateInput / Interactive',
|
|
174
|
+
};
|
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
import { ExecLogFilter } from '../components/agent-helper/exec-log-filter';
|
|
4
|
-
import type { ExecLogFilterValue } from '../components/agent-helper/exec-log-filter';
|
|
5
|
-
import { subDays } from 'date-fns';
|
|
6
|
-
|
|
7
|
-
const mockExecUserOptions = [
|
|
8
|
-
{ value: 'user1', label: '张三' },
|
|
9
|
-
{ value: 'user2', label: '李四' },
|
|
10
|
-
{ value: 'user3', label: '王五' },
|
|
11
|
-
{ value: 'user4', label: '赵六' },
|
|
12
|
-
];
|
|
13
|
-
|
|
14
|
-
const mockExecResultOptions = [
|
|
15
|
-
{ value: 'success', label: '执行成功' },
|
|
16
|
-
{ value: 'failure', label: '执行失败' },
|
|
17
|
-
{ value: 'timeout', label: '执行超时' },
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const meta: Meta<typeof ExecLogFilter> = {
|
|
21
|
-
title: 'Agent Helper/ExecLogFilter',
|
|
22
|
-
component: ExecLogFilter,
|
|
23
|
-
tags: ['autodocs'],
|
|
24
|
-
parameters: { layout: 'padded' },
|
|
25
|
-
args: {
|
|
26
|
-
execUserOptions: mockExecUserOptions,
|
|
27
|
-
execResultOptions: mockExecResultOptions,
|
|
28
|
-
},
|
|
29
|
-
decorators: [
|
|
30
|
-
(Story) => (
|
|
31
|
-
<div style={{ padding: 20, minWidth: 1200 }}>
|
|
32
|
-
<Story />
|
|
33
|
-
</div>
|
|
34
|
-
),
|
|
35
|
-
],
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export default meta;
|
|
39
|
-
type Story = StoryObj<typeof meta>;
|
|
40
|
-
|
|
41
|
-
export const Default: Story = {};
|
|
42
|
-
|
|
43
|
-
export const WithInitialValue: Story = {
|
|
44
|
-
args: {
|
|
45
|
-
value: {
|
|
46
|
-
startDate: subDays(new Date(), 7),
|
|
47
|
-
endDate: new Date(),
|
|
48
|
-
triggerType: 'scheduler',
|
|
49
|
-
execResult: 'success',
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export const AllOptionsProvided: Story = {
|
|
55
|
-
args: {
|
|
56
|
-
execUserOptions: [
|
|
57
|
-
{ value: 'user1', label: '张三(管理员)' },
|
|
58
|
-
{ value: 'user2', label: '李四(编辑者)' },
|
|
59
|
-
{ value: 'user3', label: '王五(查看者)' },
|
|
60
|
-
{ value: 'user4', label: '赵六(开发者)' },
|
|
61
|
-
{ value: 'user5', label: '孙七(测试员)' },
|
|
62
|
-
{ value: 'user6', label: '周八(运维)' },
|
|
63
|
-
],
|
|
64
|
-
execResultOptions: [
|
|
65
|
-
{ value: 'success', label: '执行成功' },
|
|
66
|
-
{ value: 'failure', label: '执行失败' },
|
|
67
|
-
{ value: 'timeout', label: '执行超时' },
|
|
68
|
-
{ value: 'cancelled', label: '已取消' },
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export const EmptyOptions: Story = {
|
|
74
|
-
args: {
|
|
75
|
-
execUserOptions: [],
|
|
76
|
-
execResultOptions: [],
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export const Interactive: Story = {
|
|
81
|
-
render: (args) => {
|
|
82
|
-
const [filterValue, setFilterValue] = useState<ExecLogFilterValue>({});
|
|
83
|
-
|
|
84
|
-
return (
|
|
85
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
86
|
-
<ExecLogFilter
|
|
87
|
-
{...args}
|
|
88
|
-
value={filterValue}
|
|
89
|
-
onChange={setFilterValue}
|
|
90
|
-
/>
|
|
91
|
-
<div style={{ padding: 12, background: '#F5F7FA', borderRadius: 8, fontSize: 14 }}>
|
|
92
|
-
<strong>当前筛选值:</strong>
|
|
93
|
-
<pre style={{ marginTop: 8, fontSize: 12 }}>
|
|
94
|
-
{JSON.stringify(filterValue, (_key, val) =>
|
|
95
|
-
val instanceof Date ? val.toISOString() : val, 2
|
|
96
|
-
)}
|
|
97
|
-
</pre>
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
);
|
|
101
|
-
},
|
|
102
|
-
args: {
|
|
103
|
-
execUserOptions: mockExecUserOptions,
|
|
104
|
-
execResultOptions: mockExecResultOptions,
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
export const WithFilterCallback: Story = {
|
|
109
|
-
render: (args) => {
|
|
110
|
-
const [lastFiltered, setLastFiltered] = useState<ExecLogFilterValue | null>(null);
|
|
111
|
-
|
|
112
|
-
return (
|
|
113
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
114
|
-
<ExecLogFilter
|
|
115
|
-
{...args}
|
|
116
|
-
onFilter={(v) => setLastFiltered(v)}
|
|
117
|
-
/>
|
|
118
|
-
{lastFiltered && (
|
|
119
|
-
<div style={{ padding: 12, background: '#F0F6FF', borderRadius: 8, fontSize: 14 }}>
|
|
120
|
-
<strong>筛选已触发:</strong>
|
|
121
|
-
<pre style={{ marginTop: 8, fontSize: 12 }}>
|
|
122
|
-
{JSON.stringify(lastFiltered, (_key, val) =>
|
|
123
|
-
val instanceof Date ? val.toISOString() : val, 2
|
|
124
|
-
)}
|
|
125
|
-
</pre>
|
|
126
|
-
</div>
|
|
127
|
-
)}
|
|
128
|
-
</div>
|
|
129
|
-
);
|
|
130
|
-
},
|
|
131
|
-
args: {
|
|
132
|
-
execUserOptions: mockExecUserOptions,
|
|
133
|
-
execResultOptions: mockExecResultOptions,
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
export const NarrowContainer: Story = {
|
|
138
|
-
decorators: [
|
|
139
|
-
(Story) => (
|
|
140
|
-
<div style={{ padding: 20, width: 900 }}>
|
|
141
|
-
<Story />
|
|
142
|
-
</div>
|
|
143
|
-
),
|
|
144
|
-
],
|
|
145
|
-
};
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
+
import { ExecLogFilter } from '../components/agent-helper/exec-log-filter';
|
|
4
|
+
import type { ExecLogFilterValue } from '../components/agent-helper/exec-log-filter';
|
|
5
|
+
import { subDays } from 'date-fns';
|
|
6
|
+
|
|
7
|
+
const mockExecUserOptions = [
|
|
8
|
+
{ value: 'user1', label: '张三' },
|
|
9
|
+
{ value: 'user2', label: '李四' },
|
|
10
|
+
{ value: 'user3', label: '王五' },
|
|
11
|
+
{ value: 'user4', label: '赵六' },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const mockExecResultOptions = [
|
|
15
|
+
{ value: 'success', label: '执行成功' },
|
|
16
|
+
{ value: 'failure', label: '执行失败' },
|
|
17
|
+
{ value: 'timeout', label: '执行超时' },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const meta: Meta<typeof ExecLogFilter> = {
|
|
21
|
+
title: 'Agent Helper/ExecLogFilter',
|
|
22
|
+
component: ExecLogFilter,
|
|
23
|
+
tags: ['autodocs'],
|
|
24
|
+
parameters: { layout: 'padded' },
|
|
25
|
+
args: {
|
|
26
|
+
execUserOptions: mockExecUserOptions,
|
|
27
|
+
execResultOptions: mockExecResultOptions,
|
|
28
|
+
},
|
|
29
|
+
decorators: [
|
|
30
|
+
(Story) => (
|
|
31
|
+
<div style={{ padding: 20, minWidth: 1200 }}>
|
|
32
|
+
<Story />
|
|
33
|
+
</div>
|
|
34
|
+
),
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export default meta;
|
|
39
|
+
type Story = StoryObj<typeof meta>;
|
|
40
|
+
|
|
41
|
+
export const Default: Story = {};
|
|
42
|
+
|
|
43
|
+
export const WithInitialValue: Story = {
|
|
44
|
+
args: {
|
|
45
|
+
value: {
|
|
46
|
+
startDate: subDays(new Date(), 7),
|
|
47
|
+
endDate: new Date(),
|
|
48
|
+
triggerType: 'scheduler',
|
|
49
|
+
execResult: 'success',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const AllOptionsProvided: Story = {
|
|
55
|
+
args: {
|
|
56
|
+
execUserOptions: [
|
|
57
|
+
{ value: 'user1', label: '张三(管理员)' },
|
|
58
|
+
{ value: 'user2', label: '李四(编辑者)' },
|
|
59
|
+
{ value: 'user3', label: '王五(查看者)' },
|
|
60
|
+
{ value: 'user4', label: '赵六(开发者)' },
|
|
61
|
+
{ value: 'user5', label: '孙七(测试员)' },
|
|
62
|
+
{ value: 'user6', label: '周八(运维)' },
|
|
63
|
+
],
|
|
64
|
+
execResultOptions: [
|
|
65
|
+
{ value: 'success', label: '执行成功' },
|
|
66
|
+
{ value: 'failure', label: '执行失败' },
|
|
67
|
+
{ value: 'timeout', label: '执行超时' },
|
|
68
|
+
{ value: 'cancelled', label: '已取消' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const EmptyOptions: Story = {
|
|
74
|
+
args: {
|
|
75
|
+
execUserOptions: [],
|
|
76
|
+
execResultOptions: [],
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export const Interactive: Story = {
|
|
81
|
+
render: (args) => {
|
|
82
|
+
const [filterValue, setFilterValue] = useState<ExecLogFilterValue>({});
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
86
|
+
<ExecLogFilter
|
|
87
|
+
{...args}
|
|
88
|
+
value={filterValue}
|
|
89
|
+
onChange={setFilterValue}
|
|
90
|
+
/>
|
|
91
|
+
<div style={{ padding: 12, background: '#F5F7FA', borderRadius: 8, fontSize: 14 }}>
|
|
92
|
+
<strong>当前筛选值:</strong>
|
|
93
|
+
<pre style={{ marginTop: 8, fontSize: 12 }}>
|
|
94
|
+
{JSON.stringify(filterValue, (_key, val) =>
|
|
95
|
+
val instanceof Date ? val.toISOString() : val, 2
|
|
96
|
+
)}
|
|
97
|
+
</pre>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
);
|
|
101
|
+
},
|
|
102
|
+
args: {
|
|
103
|
+
execUserOptions: mockExecUserOptions,
|
|
104
|
+
execResultOptions: mockExecResultOptions,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export const WithFilterCallback: Story = {
|
|
109
|
+
render: (args) => {
|
|
110
|
+
const [lastFiltered, setLastFiltered] = useState<ExecLogFilterValue | null>(null);
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
|
114
|
+
<ExecLogFilter
|
|
115
|
+
{...args}
|
|
116
|
+
onFilter={(v) => setLastFiltered(v)}
|
|
117
|
+
/>
|
|
118
|
+
{lastFiltered && (
|
|
119
|
+
<div style={{ padding: 12, background: '#F0F6FF', borderRadius: 8, fontSize: 14 }}>
|
|
120
|
+
<strong>筛选已触发:</strong>
|
|
121
|
+
<pre style={{ marginTop: 8, fontSize: 12 }}>
|
|
122
|
+
{JSON.stringify(lastFiltered, (_key, val) =>
|
|
123
|
+
val instanceof Date ? val.toISOString() : val, 2
|
|
124
|
+
)}
|
|
125
|
+
</pre>
|
|
126
|
+
</div>
|
|
127
|
+
)}
|
|
128
|
+
</div>
|
|
129
|
+
);
|
|
130
|
+
},
|
|
131
|
+
args: {
|
|
132
|
+
execUserOptions: mockExecUserOptions,
|
|
133
|
+
execResultOptions: mockExecResultOptions,
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const NarrowContainer: Story = {
|
|
138
|
+
decorators: [
|
|
139
|
+
(Story) => (
|
|
140
|
+
<div style={{ padding: 20, width: 900 }}>
|
|
141
|
+
<Story />
|
|
142
|
+
</div>
|
|
143
|
+
),
|
|
144
|
+
],
|
|
145
|
+
};
|