@ticatec/uniface-element 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accordion/README.md +169 -0
- package/dist/accordion/README_CN.md +176 -0
- package/dist/action-bar/README.md +275 -0
- package/dist/action-bar/README_CN.md +285 -0
- package/dist/app-layout/README.md +374 -0
- package/dist/app-layout/README_CN.md +381 -0
- package/dist/app-top-bar/README.md +357 -0
- package/dist/app-top-bar/README_CN.md +365 -0
- package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
- package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
- package/dist/base-calendar/CalendarBase.svelte +0 -3
- package/dist/box/README.md +385 -0
- package/dist/box/README_CN.md +393 -0
- package/dist/breadcrumbs/README.md +442 -0
- package/dist/breadcrumbs/README_CN.md +442 -0
- package/dist/button/Button.svelte +27 -7
- package/dist/button/Button.svelte.d.ts +3 -1
- package/dist/button/IconButton.svelte +26 -6
- package/dist/button/IconButton.svelte.d.ts +3 -1
- package/dist/button/IconButton_README.md +513 -0
- package/dist/button/IconButton_README_CN.md +513 -0
- package/dist/button/README.md +428 -0
- package/dist/button/README_CN.md +428 -0
- package/dist/button/TextButton.svelte +26 -6
- package/dist/button/TextButton.svelte.d.ts +3 -1
- package/dist/button/TextButton_README.md +571 -0
- package/dist/button/TextButton_README_CN.md +571 -0
- package/dist/card/README.md +666 -0
- package/dist/card/README_CN.md +666 -0
- package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
- package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
- package/dist/cascade-options-select/README.md +663 -2
- package/dist/cascade-options-select/README_CN.md +664 -0
- package/dist/checkbox/CheckBox.svelte +20 -6
- package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
- package/dist/checkbox/README.md +562 -0
- package/dist/checkbox/README_CN.md +727 -0
- package/dist/common-editor/NumberInput.svelte +39 -26
- package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
- package/dist/concise-data-table/ConciseListTable.svelte +133 -36
- package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
- package/dist/concise-data-table/DataCell.svelte +5 -6
- package/dist/concise-data-table/DataRow.svelte +22 -2
- package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
- package/dist/concise-data-table/README.md +606 -0
- package/dist/concise-data-table/README_CN.md +611 -0
- package/dist/context-menu/ContextMenu.svelte +138 -21
- package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
- package/dist/context-menu/ContextMenuItem.d.ts +20 -4
- package/dist/context-menu/README.md +551 -0
- package/dist/context-menu/README_CN.md +551 -0
- package/dist/criteria-field/CriteriaField.svelte +3 -5
- package/dist/criteria-field/README.md +532 -0
- package/dist/criteria-field/README_CN.md +532 -0
- package/dist/data-table/README.md +712 -0
- package/dist/data-table/README_CN.md +712 -0
- package/dist/date-picker/DatePicker.svelte +44 -7
- package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
- package/dist/date-picker/DateTimePicker.svelte +32 -8
- package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
- package/dist/date-picker/README.md +326 -0
- package/dist/date-picker/README_CN.md +316 -0
- package/dist/date-picker/ScrollBar.svelte +18 -8
- package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
- package/dist/date-picker/TimePanel.svelte +5 -5
- package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
- package/dist/date-range/README.md +374 -0
- package/dist/date-range/README_CN.md +374 -0
- package/dist/dialog/DialogBoard.svelte +1 -1
- package/dist/dialog/README.md +596 -0
- package/dist/dialog/README_CN.md +596 -0
- package/dist/drawer/README.md +679 -1
- package/dist/drawer/README_CN.md +679 -0
- package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
- package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
- package/dist/group-box/group-check-box/README.md +749 -0
- package/dist/group-box/group-check-box/README_CN.md +750 -0
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
- package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
- package/dist/group-box/group-radio-box/README.md +920 -0
- package/dist/group-box/group-radio-box/README_CN.md +920 -0
- package/dist/image-files/README.md +1346 -0
- package/dist/image-files/README_CN.md +1346 -0
- package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
- package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
- package/dist/lib/forwardAllEvents.d.ts +3 -0
- package/dist/lib/forwardAllEvents.js +24 -0
- package/dist/list-box/README.md +579 -0
- package/dist/list-box/README_CN.md +682 -0
- package/dist/lookup-editor/LookupEditor.svelte +15 -3
- package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
- package/dist/lookup-editor/README.md +684 -0
- package/dist/lookup-editor/README_CN.md +684 -0
- package/dist/memo-editor/MemoEditor.svelte +77 -27
- package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
- package/dist/memo-editor/README.md +819 -0
- package/dist/memo-editor/README_CN.md +819 -0
- package/dist/message-box/README.md +398 -0
- package/dist/message-box/README_CN.md +398 -0
- package/dist/number-editor/NumberEditor.svelte +2 -2
- package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
- package/dist/number-editor/README.md +353 -22
- package/dist/number-editor/README_CN.md +357 -0
- package/dist/number-range/README.md +443 -0
- package/dist/number-range/README_CN.md +443 -0
- package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
- package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
- package/dist/options-multi-select/README.md +480 -0
- package/dist/options-multi-select/README_CN.md +480 -0
- package/dist/options-select/OptionsSelect.svelte +36 -5
- package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
- package/dist/options-select/README.md +632 -0
- package/dist/options-select/README_CN.md +632 -0
- package/dist/page/README.md +605 -0
- package/dist/page/README_CN.md +605 -0
- package/dist/pagination/README.md +946 -0
- package/dist/pagination/README_CN.md +946 -0
- package/dist/pagination-panel/README.md +1075 -0
- package/dist/pagination-panel/README_CN.md +1075 -0
- package/dist/popup-hint/README.md +841 -0
- package/dist/popup-hint/README_CN.md +840 -0
- package/dist/progress-bar/README.md +242 -0
- package/dist/progress-bar/README_CN.md +242 -0
- package/dist/progress-step-bar/README.md +316 -0
- package/dist/progress-step-bar/README_CN.md +316 -0
- package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
- package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
- package/dist/prompts-text-editor/README.md +329 -0
- package/dist/prompts-text-editor/README_CN.md +329 -0
- package/dist/property-editor/README.md +969 -0
- package/dist/property-editor/README_CN.md +969 -0
- package/dist/radio-button/README.md +372 -0
- package/dist/radio-button/README_CN.md +372 -0
- package/dist/radio-button/RadioButton.svelte +32 -3
- package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
- package/dist/search-box/README.md +425 -0
- package/dist/search-box/README_CN.md +424 -0
- package/dist/search-box/SearchBox.svelte +22 -6
- package/dist/search-box/SearchBox.svelte.d.ts +4 -1
- package/dist/tabs/README.md +919 -0
- package/dist/tabs/README_CN.md +920 -0
- package/dist/tag/README.md +922 -0
- package/dist/tag/README_CN.md +922 -0
- package/dist/text-editor/PasswordEditor.svelte +17 -2
- package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
- package/dist/text-editor/PasswordEditor_README.md +551 -0
- package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
- package/dist/text-editor/README.md +466 -0
- package/dist/text-editor/README_CN.md +466 -0
- package/dist/text-editor/TextEditor.svelte +51 -19
- package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
- package/dist/ticatec-uniface-web.css +1 -0
- package/dist/time-editor/README.md +498 -24
- package/dist/time-editor/README_CN.md +498 -0
- package/dist/time-editor/TimeEditor.svelte +7 -3
- package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
- package/dist/toast/README.md +667 -0
- package/dist/toast/README_CN.md +667 -0
- package/dist/transfer/README.md +795 -0
- package/dist/transfer/Transfer.svelte +6 -4
- package/dist/transfer/Transfer.svelte.d.ts +3 -1
- package/dist/tree-view/README.md +761 -0
- package/dist/tree-view/README_CN.md +761 -0
- package/dist/tree-view/TreeView.svelte +5 -3
- package/dist/tree-view/TreeView.svelte.d.ts +3 -1
- package/dist/unit-number-editor/README.md +546 -20
- package/dist/unit-number-editor/README_CN.md +525 -0
- package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
- package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
- package/docs/form-field/cn/README_CN.md +364 -0
- package/docs/form-field/en/README.md +364 -0
- package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
- package/docs/form-panel/flex-form/en/README.md +586 -0
- package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
- package/docs/form-panel/flex-row-form/en/README.md +787 -0
- package/docs/form-panel/grid-form/en/README.md +744 -0
- package/package.json +1 -1
- package/dist/drawer/README-CN.md +0 -1
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
# Page
|
|
2
|
+
|
|
3
|
+
A comprehensive page container component that provides standardized page layout with header, content area, and navigation actions.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Standardized Layout**: Consistent page structure across applications
|
|
8
|
+
- **Header Component**: Built-in page header with title and description
|
|
9
|
+
- **Navigation Actions**: Support for back and reload functionality
|
|
10
|
+
- **Flexible Styling**: Customizable appearance with shadow and rounded corners
|
|
11
|
+
- **Slot System**: Extensible header and content areas
|
|
12
|
+
- **Responsive Design**: Adapts to different screen sizes
|
|
13
|
+
- **Action Integration**: Easy integration with navigation and refresh actions
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @ticatec/uniface-element
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Basic Usage
|
|
22
|
+
|
|
23
|
+
```svelte
|
|
24
|
+
<script>
|
|
25
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Page title="My Page" comment="This is a sample page">
|
|
29
|
+
<div>Page content goes here</div>
|
|
30
|
+
</Page>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## API Reference
|
|
34
|
+
|
|
35
|
+
### Page Props
|
|
36
|
+
|
|
37
|
+
| Prop | Type | Default | Description |
|
|
38
|
+
|------|------|---------|-------------|
|
|
39
|
+
| `title` | `string` | `''` | Page title displayed in header |
|
|
40
|
+
| `comment` | `string` | `null` | Subtitle or description text |
|
|
41
|
+
| `header$style` | `string` | `''` | Custom CSS styles for header area |
|
|
42
|
+
| `content$style` | `string` | `''` | Custom CSS styles for content area |
|
|
43
|
+
| `round` | `boolean` | `false` | Apply rounded corners to page container |
|
|
44
|
+
| `shadow` | `boolean` | `true` | Apply shadow effect to page container |
|
|
45
|
+
| `goBack` | `PageAction \| null` | `null` | Back button action handler |
|
|
46
|
+
| `reload` | `PageAction \| null` | `null` | Reload button action handler |
|
|
47
|
+
| `style` | `string` | `''` | Custom CSS styles for page wrapper |
|
|
48
|
+
|
|
49
|
+
### Page Slots
|
|
50
|
+
|
|
51
|
+
| Slot | Description |
|
|
52
|
+
|------|-------------|
|
|
53
|
+
| `default` | Main content area of the page |
|
|
54
|
+
| `page-header` | Replace entire header component |
|
|
55
|
+
| `header-ext` | Additional content in header (buttons, etc.) |
|
|
56
|
+
|
|
57
|
+
### PageHeader Props
|
|
58
|
+
|
|
59
|
+
| Prop | Type | Default | Description |
|
|
60
|
+
|------|------|---------|-------------|
|
|
61
|
+
| `title` | `string` | `''` | Header title text |
|
|
62
|
+
| `comment` | `string` | `''` | Header subtitle/description |
|
|
63
|
+
| `goBack` | `PageAction \| null` | `null` | Back navigation action |
|
|
64
|
+
| `reload` | `PageAction \| null` | `null` | Reload action |
|
|
65
|
+
|
|
66
|
+
### Types
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
export type PageAction = () => any;
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Examples
|
|
73
|
+
|
|
74
|
+
### Basic Page Layout
|
|
75
|
+
|
|
76
|
+
```svelte
|
|
77
|
+
<script>
|
|
78
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<Page
|
|
82
|
+
title="Dashboard"
|
|
83
|
+
comment="Overview of your application metrics"
|
|
84
|
+
>
|
|
85
|
+
<div style="padding: 20px;">
|
|
86
|
+
<h2>Welcome to your dashboard</h2>
|
|
87
|
+
<p>Here you can view all your important metrics and data.</p>
|
|
88
|
+
</div>
|
|
89
|
+
</Page>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Page with Navigation
|
|
93
|
+
|
|
94
|
+
```svelte
|
|
95
|
+
<script>
|
|
96
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
97
|
+
import { goto } from '$app/navigation';
|
|
98
|
+
|
|
99
|
+
function handleGoBack() {
|
|
100
|
+
goto('/dashboard');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function handleReload() {
|
|
104
|
+
window.location.reload();
|
|
105
|
+
}
|
|
106
|
+
</script>
|
|
107
|
+
|
|
108
|
+
<Page
|
|
109
|
+
title="User Profile"
|
|
110
|
+
comment="Manage your account settings"
|
|
111
|
+
goBack={handleGoBack}
|
|
112
|
+
reload={handleReload}
|
|
113
|
+
>
|
|
114
|
+
<div style="padding: 20px;">
|
|
115
|
+
<form>
|
|
116
|
+
<!-- Profile form content -->
|
|
117
|
+
</form>
|
|
118
|
+
</div>
|
|
119
|
+
</Page>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Styled Page with Rounded Corners
|
|
123
|
+
|
|
124
|
+
```svelte
|
|
125
|
+
<script>
|
|
126
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
127
|
+
</script>
|
|
128
|
+
|
|
129
|
+
<Page
|
|
130
|
+
title="Settings"
|
|
131
|
+
comment="Configure your preferences"
|
|
132
|
+
round
|
|
133
|
+
shadow
|
|
134
|
+
style="max-width: 800px; margin: 0 auto;"
|
|
135
|
+
>
|
|
136
|
+
<div style="padding: 24px;">
|
|
137
|
+
<div class="settings-section">
|
|
138
|
+
<h3>General Settings</h3>
|
|
139
|
+
<!-- Settings content -->
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
</Page>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Page with Header Extensions
|
|
146
|
+
|
|
147
|
+
```svelte
|
|
148
|
+
<script>
|
|
149
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
150
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
151
|
+
|
|
152
|
+
function handleSave() {
|
|
153
|
+
console.log('Saving data...');
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function handleCancel() {
|
|
157
|
+
console.log('Cancelling...');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function handleExport() {
|
|
161
|
+
console.log('Exporting data...');
|
|
162
|
+
}
|
|
163
|
+
</script>
|
|
164
|
+
|
|
165
|
+
<Page
|
|
166
|
+
title="Document Editor"
|
|
167
|
+
comment="Edit your document content"
|
|
168
|
+
round
|
|
169
|
+
>
|
|
170
|
+
<div slot="header-ext" style="display: flex; gap: 8px;">
|
|
171
|
+
<Button type="primary" label="Save" onClick={handleSave} />
|
|
172
|
+
<Button type="secondary" label="Cancel" onClick={handleCancel} />
|
|
173
|
+
<Button type="third" label="Export" onClick={handleExport} />
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<div style="padding: 20px;">
|
|
177
|
+
<textarea
|
|
178
|
+
style="width: 100%; height: 400px; border: 1px solid #ccc; padding: 12px;"
|
|
179
|
+
placeholder="Start typing your document..."
|
|
180
|
+
></textarea>
|
|
181
|
+
</div>
|
|
182
|
+
</Page>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Data Table Page
|
|
186
|
+
|
|
187
|
+
```svelte
|
|
188
|
+
<script>
|
|
189
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
190
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
191
|
+
import DataTable from '@ticatec/uniface-element/DataTable';
|
|
192
|
+
|
|
193
|
+
let users = [
|
|
194
|
+
{ id: 1, name: 'John Doe', email: 'john@example.com', role: 'Admin' },
|
|
195
|
+
{ id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'User' },
|
|
196
|
+
{ id: 3, name: 'Bob Wilson', email: 'bob@example.com', role: 'User' }
|
|
197
|
+
];
|
|
198
|
+
|
|
199
|
+
function handleAddUser() {
|
|
200
|
+
console.log('Adding new user...');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function handleRefresh() {
|
|
204
|
+
console.log('Refreshing user list...');
|
|
205
|
+
}
|
|
206
|
+
</script>
|
|
207
|
+
|
|
208
|
+
<Page
|
|
209
|
+
title="User Management"
|
|
210
|
+
comment="Manage system users and permissions"
|
|
211
|
+
reload={handleRefresh}
|
|
212
|
+
shadow
|
|
213
|
+
>
|
|
214
|
+
<div slot="header-ext">
|
|
215
|
+
<Button type="primary" label="Add User" onClick={handleAddUser} />
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div style="padding: 20px;">
|
|
219
|
+
<DataTable
|
|
220
|
+
data={users}
|
|
221
|
+
columns={[
|
|
222
|
+
{ field: 'name', title: 'Name' },
|
|
223
|
+
{ field: 'email', title: 'Email' },
|
|
224
|
+
{ field: 'role', title: 'Role' }
|
|
225
|
+
]}
|
|
226
|
+
/>
|
|
227
|
+
</div>
|
|
228
|
+
</Page>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Form Page with Validation
|
|
232
|
+
|
|
233
|
+
```svelte
|
|
234
|
+
<script>
|
|
235
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
236
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
237
|
+
import FormField from '@ticatec/uniface-element/FormField';
|
|
238
|
+
import TextEditor from '@ticatec/uniface-element/TextEditor';
|
|
239
|
+
|
|
240
|
+
let formData = {
|
|
241
|
+
title: '',
|
|
242
|
+
description: '',
|
|
243
|
+
category: ''
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
let isValid = false;
|
|
247
|
+
|
|
248
|
+
$: isValid = formData.title && formData.description;
|
|
249
|
+
|
|
250
|
+
function handleGoBack() {
|
|
251
|
+
if (hasUnsavedChanges()) {
|
|
252
|
+
if (confirm('You have unsaved changes. Are you sure you want to leave?')) {
|
|
253
|
+
history.back();
|
|
254
|
+
}
|
|
255
|
+
} else {
|
|
256
|
+
history.back();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function hasUnsavedChanges() {
|
|
261
|
+
return formData.title || formData.description || formData.category;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function handleSubmit() {
|
|
265
|
+
if (isValid) {
|
|
266
|
+
console.log('Submitting form:', formData);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function handleReset() {
|
|
271
|
+
formData = { title: '', description: '', category: '' };
|
|
272
|
+
}
|
|
273
|
+
</script>
|
|
274
|
+
|
|
275
|
+
<Page
|
|
276
|
+
title="Create New Item"
|
|
277
|
+
comment="Fill out the form to create a new item"
|
|
278
|
+
goBack={handleGoBack}
|
|
279
|
+
round
|
|
280
|
+
>
|
|
281
|
+
<div slot="header-ext" style="display: flex; gap: 8px;">
|
|
282
|
+
<Button
|
|
283
|
+
type="primary"
|
|
284
|
+
label="Submit"
|
|
285
|
+
disabled={!isValid}
|
|
286
|
+
onClick={handleSubmit}
|
|
287
|
+
/>
|
|
288
|
+
<Button type="secondary" label="Reset" onClick={handleReset} />
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<div style="padding: 24px;">
|
|
292
|
+
<div style="max-width: 600px;">
|
|
293
|
+
<FormField label="Title" required>
|
|
294
|
+
<TextEditor
|
|
295
|
+
variant="outlined"
|
|
296
|
+
bind:value={formData.title}
|
|
297
|
+
placeholder="Enter item title"
|
|
298
|
+
/>
|
|
299
|
+
</FormField>
|
|
300
|
+
|
|
301
|
+
<FormField label="Description" required>
|
|
302
|
+
<TextEditor
|
|
303
|
+
variant="outlined"
|
|
304
|
+
bind:value={formData.description}
|
|
305
|
+
placeholder="Enter description"
|
|
306
|
+
/>
|
|
307
|
+
</FormField>
|
|
308
|
+
|
|
309
|
+
<FormField label="Category">
|
|
310
|
+
<TextEditor
|
|
311
|
+
variant="outlined"
|
|
312
|
+
bind:value={formData.category}
|
|
313
|
+
placeholder="Enter category"
|
|
314
|
+
/>
|
|
315
|
+
</FormField>
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
</Page>
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Custom Header Page
|
|
322
|
+
|
|
323
|
+
```svelte
|
|
324
|
+
<script>
|
|
325
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
326
|
+
import Icon from '@ticatec/uniface-element/Icon';
|
|
327
|
+
|
|
328
|
+
function handleSearch() {
|
|
329
|
+
console.log('Searching...');
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
function handleFilter() {
|
|
333
|
+
console.log('Filtering...');
|
|
334
|
+
}
|
|
335
|
+
</script>
|
|
336
|
+
|
|
337
|
+
<Page style="height: 100vh;">
|
|
338
|
+
<div slot="page-header" class="custom-header">
|
|
339
|
+
<div class="header-left">
|
|
340
|
+
<Icon name="icon_google_apps" />
|
|
341
|
+
<h1>Custom Dashboard</h1>
|
|
342
|
+
</div>
|
|
343
|
+
<div class="header-center">
|
|
344
|
+
<input
|
|
345
|
+
type="search"
|
|
346
|
+
placeholder="Search..."
|
|
347
|
+
class="search-input"
|
|
348
|
+
/>
|
|
349
|
+
</div>
|
|
350
|
+
<div class="header-right">
|
|
351
|
+
<Icon name="icon_google_search" onClick={handleSearch} />
|
|
352
|
+
<Icon name="icon_google_filter_list" onClick={handleFilter} />
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
<div style="padding: 20px; height: 100%; overflow-y: auto;">
|
|
357
|
+
<!-- Page content -->
|
|
358
|
+
</div>
|
|
359
|
+
</Page>
|
|
360
|
+
|
|
361
|
+
<style>
|
|
362
|
+
.custom-header {
|
|
363
|
+
display: flex;
|
|
364
|
+
align-items: center;
|
|
365
|
+
justify-content: space-between;
|
|
366
|
+
padding: 16px 24px;
|
|
367
|
+
background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
|
|
368
|
+
color: white;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.header-left {
|
|
372
|
+
display: flex;
|
|
373
|
+
align-items: center;
|
|
374
|
+
gap: 12px;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
.header-left h1 {
|
|
378
|
+
margin: 0;
|
|
379
|
+
font-size: 24px;
|
|
380
|
+
font-weight: 600;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.search-input {
|
|
384
|
+
padding: 8px 16px;
|
|
385
|
+
border: none;
|
|
386
|
+
border-radius: 20px;
|
|
387
|
+
width: 300px;
|
|
388
|
+
outline: none;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.header-right {
|
|
392
|
+
display: flex;
|
|
393
|
+
gap: 16px;
|
|
394
|
+
}
|
|
395
|
+
</style>
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Dashboard Overview Page
|
|
399
|
+
|
|
400
|
+
```svelte
|
|
401
|
+
<script>
|
|
402
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
403
|
+
import Card from '@ticatec/uniface-element/Card';
|
|
404
|
+
|
|
405
|
+
let stats = [
|
|
406
|
+
{ title: 'Total Users', value: '1,234', change: '+12%' },
|
|
407
|
+
{ title: 'Revenue', value: '$45,678', change: '+5.2%' },
|
|
408
|
+
{ title: 'Orders', value: '890', change: '-2.1%' },
|
|
409
|
+
{ title: 'Conversion', value: '3.2%', change: '+0.8%' }
|
|
410
|
+
];
|
|
411
|
+
|
|
412
|
+
function handleRefresh() {
|
|
413
|
+
console.log('Refreshing dashboard data...');
|
|
414
|
+
// Refresh logic here
|
|
415
|
+
}
|
|
416
|
+
</script>
|
|
417
|
+
|
|
418
|
+
<Page
|
|
419
|
+
title="Analytics Dashboard"
|
|
420
|
+
comment="Real-time business metrics and insights"
|
|
421
|
+
reload={handleRefresh}
|
|
422
|
+
shadow={false}
|
|
423
|
+
content$style="background-color: #f5f5f5;"
|
|
424
|
+
>
|
|
425
|
+
<div style="padding: 24px;">
|
|
426
|
+
<div class="stats-grid">
|
|
427
|
+
{#each stats as stat}
|
|
428
|
+
<Card style="padding: 20px; text-align: center;">
|
|
429
|
+
<h3 style="margin: 0 0 8px 0; color: #666;">{stat.title}</h3>
|
|
430
|
+
<div style="font-size: 32px; font-weight: bold; margin: 8px 0;">
|
|
431
|
+
{stat.value}
|
|
432
|
+
</div>
|
|
433
|
+
<div style="color: {stat.change.startsWith('+') ? '#4caf50' : '#f44336'};">
|
|
434
|
+
{stat.change}
|
|
435
|
+
</div>
|
|
436
|
+
</Card>
|
|
437
|
+
{/each}
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<div style="margin-top: 24px;">
|
|
441
|
+
<Card style="padding: 24px;">
|
|
442
|
+
<h3>Recent Activity</h3>
|
|
443
|
+
<!-- Activity content -->
|
|
444
|
+
</Card>
|
|
445
|
+
</div>
|
|
446
|
+
</div>
|
|
447
|
+
</Page>
|
|
448
|
+
|
|
449
|
+
<style>
|
|
450
|
+
.stats-grid {
|
|
451
|
+
display: grid;
|
|
452
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
453
|
+
gap: 20px;
|
|
454
|
+
}
|
|
455
|
+
</style>
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### Mobile-Responsive Page
|
|
459
|
+
|
|
460
|
+
```svelte
|
|
461
|
+
<script>
|
|
462
|
+
import Page from '@ticatec/uniface-element/Page';
|
|
463
|
+
import Button from '@ticatec/uniface-element/Button';
|
|
464
|
+
|
|
465
|
+
let isMobile = false;
|
|
466
|
+
|
|
467
|
+
// Check if mobile on mount
|
|
468
|
+
import { onMount } from 'svelte';
|
|
469
|
+
onMount(() => {
|
|
470
|
+
isMobile = window.innerWidth < 768;
|
|
471
|
+
|
|
472
|
+
const handleResize = () => {
|
|
473
|
+
isMobile = window.innerWidth < 768;
|
|
474
|
+
};
|
|
475
|
+
|
|
476
|
+
window.addEventListener('resize', handleResize);
|
|
477
|
+
return () => window.removeEventListener('resize', handleResize);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
function handleGoBack() {
|
|
481
|
+
history.back();
|
|
482
|
+
}
|
|
483
|
+
</script>
|
|
484
|
+
|
|
485
|
+
<Page
|
|
486
|
+
title="Mobile Example"
|
|
487
|
+
comment="Responsive page design"
|
|
488
|
+
goBack={handleGoBack}
|
|
489
|
+
round={!isMobile}
|
|
490
|
+
shadow={!isMobile}
|
|
491
|
+
style={isMobile ? 'height: 100vh; margin: 0;' : 'max-width: 800px; margin: 20px auto;'}
|
|
492
|
+
>
|
|
493
|
+
<div style="padding: {isMobile ? '16px' : '24px'};">
|
|
494
|
+
<div class="responsive-content">
|
|
495
|
+
<h2>Responsive Content</h2>
|
|
496
|
+
<p>This page adapts to mobile and desktop screens.</p>
|
|
497
|
+
|
|
498
|
+
<div class="button-group">
|
|
499
|
+
<Button type="primary" label="Action 1" />
|
|
500
|
+
<Button type="secondary" label="Action 2" />
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
</div>
|
|
504
|
+
</Page>
|
|
505
|
+
|
|
506
|
+
<style>
|
|
507
|
+
.responsive-content {
|
|
508
|
+
max-width: 100%;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.button-group {
|
|
512
|
+
display: flex;
|
|
513
|
+
gap: 12px;
|
|
514
|
+
margin-top: 20px;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
@media (max-width: 767px) {
|
|
518
|
+
.button-group {
|
|
519
|
+
flex-direction: column;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
</style>
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
## Best Practices
|
|
526
|
+
|
|
527
|
+
1. **Consistent Layout**: Use Page component for all main application screens
|
|
528
|
+
2. **Navigation**: Always provide appropriate back/reload actions when needed
|
|
529
|
+
3. **Content Organization**: Use proper spacing and organize content logically
|
|
530
|
+
4. **Mobile Responsiveness**: Consider mobile layouts and touch interactions
|
|
531
|
+
5. **Header Extensions**: Use header slot for page-specific actions
|
|
532
|
+
6. **Loading States**: Show loading indicators during data fetching
|
|
533
|
+
7. **Error Handling**: Provide proper error states and recovery options
|
|
534
|
+
|
|
535
|
+
## Styling
|
|
536
|
+
|
|
537
|
+
The Page component provides several CSS classes for styling:
|
|
538
|
+
|
|
539
|
+
```css
|
|
540
|
+
.uniface-page-wrapper {
|
|
541
|
+
/* Page wrapper container */
|
|
542
|
+
width: 100%;
|
|
543
|
+
height: 100%;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
.uniface-page {
|
|
547
|
+
/* Main page container */
|
|
548
|
+
display: flex;
|
|
549
|
+
flex-direction: column;
|
|
550
|
+
height: 100%;
|
|
551
|
+
background: white;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.uniface-page.shadow {
|
|
555
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
.uniface-page.round {
|
|
559
|
+
border-radius: 8px;
|
|
560
|
+
overflow: hidden;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.uniface-page-header {
|
|
564
|
+
/* Header area */
|
|
565
|
+
flex: 0 0 auto;
|
|
566
|
+
padding: 16px 24px;
|
|
567
|
+
border-bottom: 1px solid #e0e0e0;
|
|
568
|
+
background: #fafafa;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
.page-container {
|
|
572
|
+
/* Content area */
|
|
573
|
+
flex: 1 1 auto;
|
|
574
|
+
overflow: hidden;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
.page-topic {
|
|
578
|
+
/* Page title */
|
|
579
|
+
font-size: 24px;
|
|
580
|
+
font-weight: 600;
|
|
581
|
+
margin-bottom: 4px;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
.page-comment {
|
|
585
|
+
/* Page subtitle */
|
|
586
|
+
font-size: 14px;
|
|
587
|
+
color: #666;
|
|
588
|
+
}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
## Accessibility
|
|
592
|
+
|
|
593
|
+
- Proper heading hierarchy with semantic HTML
|
|
594
|
+
- Keyboard navigation support for all interactive elements
|
|
595
|
+
- ARIA labels for navigation actions
|
|
596
|
+
- Focus management for modal-like usage
|
|
597
|
+
- Screen reader compatibility
|
|
598
|
+
- High contrast mode support
|
|
599
|
+
|
|
600
|
+
## Related Components
|
|
601
|
+
|
|
602
|
+
- [PageHeader](./PageHeader.md) - Standalone header component
|
|
603
|
+
- [Card](../card/README.md) - For content sections within pages
|
|
604
|
+
- [Button](../button/README.md) - For page actions
|
|
605
|
+
- [ActionBar](../action-bar/README.md) - For multiple page actions
|