@ticatec/uniface-element 0.2.4 → 0.3.1

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.
Files changed (177) hide show
  1. package/dist/accordion/README.md +169 -0
  2. package/dist/accordion/README_CN.md +176 -0
  3. package/dist/action-bar/README.md +275 -0
  4. package/dist/action-bar/README_CN.md +285 -0
  5. package/dist/app-layout/README.md +374 -0
  6. package/dist/app-layout/README_CN.md +381 -0
  7. package/dist/app-top-bar/README.md +357 -0
  8. package/dist/app-top-bar/README_CN.md +365 -0
  9. package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
  10. package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
  11. package/dist/base-calendar/CalendarBase.svelte +0 -3
  12. package/dist/box/README.md +385 -0
  13. package/dist/box/README_CN.md +393 -0
  14. package/dist/breadcrumbs/README.md +442 -0
  15. package/dist/breadcrumbs/README_CN.md +442 -0
  16. package/dist/button/Button.svelte +27 -7
  17. package/dist/button/Button.svelte.d.ts +3 -1
  18. package/dist/button/IconButton.svelte +26 -6
  19. package/dist/button/IconButton.svelte.d.ts +3 -1
  20. package/dist/button/IconButton_README.md +513 -0
  21. package/dist/button/IconButton_README_CN.md +513 -0
  22. package/dist/button/README.md +428 -0
  23. package/dist/button/README_CN.md +428 -0
  24. package/dist/button/TextButton.svelte +26 -6
  25. package/dist/button/TextButton.svelte.d.ts +3 -1
  26. package/dist/button/TextButton_README.md +571 -0
  27. package/dist/button/TextButton_README_CN.md +571 -0
  28. package/dist/card/README.md +666 -0
  29. package/dist/card/README_CN.md +666 -0
  30. package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
  31. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
  32. package/dist/cascade-options-select/README.md +663 -2
  33. package/dist/cascade-options-select/README_CN.md +664 -0
  34. package/dist/checkbox/CheckBox.svelte +20 -6
  35. package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
  36. package/dist/checkbox/README.md +562 -0
  37. package/dist/checkbox/README_CN.md +727 -0
  38. package/dist/common-editor/NumberInput.svelte +39 -26
  39. package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
  40. package/dist/concise-data-table/ConciseListTable.svelte +133 -36
  41. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
  42. package/dist/concise-data-table/DataCell.svelte +5 -6
  43. package/dist/concise-data-table/DataRow.svelte +22 -2
  44. package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
  45. package/dist/concise-data-table/README.md +606 -0
  46. package/dist/concise-data-table/README_CN.md +611 -0
  47. package/dist/context-menu/ContextMenu.svelte +138 -21
  48. package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
  49. package/dist/context-menu/ContextMenuItem.d.ts +20 -4
  50. package/dist/context-menu/README.md +551 -0
  51. package/dist/context-menu/README_CN.md +551 -0
  52. package/dist/criteria-field/CriteriaField.svelte +3 -5
  53. package/dist/criteria-field/README.md +532 -0
  54. package/dist/criteria-field/README_CN.md +532 -0
  55. package/dist/data-table/README.md +712 -0
  56. package/dist/data-table/README_CN.md +712 -0
  57. package/dist/date-picker/DatePicker.svelte +44 -7
  58. package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
  59. package/dist/date-picker/DateTimePicker.svelte +32 -8
  60. package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
  61. package/dist/date-picker/README.md +326 -0
  62. package/dist/date-picker/README_CN.md +316 -0
  63. package/dist/date-picker/ScrollBar.svelte +18 -8
  64. package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
  65. package/dist/date-picker/TimePanel.svelte +5 -5
  66. package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
  67. package/dist/date-range/README.md +374 -0
  68. package/dist/date-range/README_CN.md +374 -0
  69. package/dist/dialog/README.md +596 -0
  70. package/dist/dialog/README_CN.md +596 -0
  71. package/dist/drawer/README.md +679 -1
  72. package/dist/drawer/README_CN.md +679 -0
  73. package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
  74. package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
  75. package/dist/group-box/group-check-box/README.md +749 -0
  76. package/dist/group-box/group-check-box/README_CN.md +750 -0
  77. package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
  78. package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
  79. package/dist/group-box/group-radio-box/README.md +920 -0
  80. package/dist/group-box/group-radio-box/README_CN.md +920 -0
  81. package/dist/image-files/README.md +1346 -0
  82. package/dist/image-files/README_CN.md +1346 -0
  83. package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
  84. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
  85. package/dist/lib/forwardAllEvents.d.ts +3 -0
  86. package/dist/lib/forwardAllEvents.js +24 -0
  87. package/dist/list-box/README.md +579 -0
  88. package/dist/list-box/README_CN.md +682 -0
  89. package/dist/lookup-editor/LookupEditor.svelte +15 -3
  90. package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
  91. package/dist/lookup-editor/README.md +684 -0
  92. package/dist/lookup-editor/README_CN.md +684 -0
  93. package/dist/memo-editor/MemoEditor.svelte +77 -27
  94. package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
  95. package/dist/memo-editor/README.md +819 -0
  96. package/dist/memo-editor/README_CN.md +819 -0
  97. package/dist/message-box/README.md +398 -0
  98. package/dist/message-box/README_CN.md +398 -0
  99. package/dist/number-editor/NumberEditor.svelte +2 -2
  100. package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
  101. package/dist/number-editor/README.md +353 -22
  102. package/dist/number-editor/README_CN.md +357 -0
  103. package/dist/number-range/README.md +443 -0
  104. package/dist/number-range/README_CN.md +443 -0
  105. package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
  106. package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
  107. package/dist/options-multi-select/README.md +480 -0
  108. package/dist/options-multi-select/README_CN.md +480 -0
  109. package/dist/options-select/OptionsSelect.svelte +36 -5
  110. package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
  111. package/dist/options-select/README.md +632 -0
  112. package/dist/options-select/README_CN.md +632 -0
  113. package/dist/page/README.md +605 -0
  114. package/dist/page/README_CN.md +605 -0
  115. package/dist/pagination/README.md +946 -0
  116. package/dist/pagination/README_CN.md +946 -0
  117. package/dist/pagination-panel/README.md +1075 -0
  118. package/dist/pagination-panel/README_CN.md +1075 -0
  119. package/dist/popup-hint/README.md +841 -0
  120. package/dist/popup-hint/README_CN.md +840 -0
  121. package/dist/progress-bar/README.md +242 -0
  122. package/dist/progress-bar/README_CN.md +242 -0
  123. package/dist/progress-step-bar/README.md +316 -0
  124. package/dist/progress-step-bar/README_CN.md +316 -0
  125. package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
  126. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
  127. package/dist/prompts-text-editor/README.md +329 -0
  128. package/dist/prompts-text-editor/README_CN.md +329 -0
  129. package/dist/property-editor/README.md +969 -0
  130. package/dist/property-editor/README_CN.md +969 -0
  131. package/dist/radio-button/README.md +372 -0
  132. package/dist/radio-button/README_CN.md +372 -0
  133. package/dist/radio-button/RadioButton.svelte +32 -3
  134. package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
  135. package/dist/search-box/README.md +425 -0
  136. package/dist/search-box/README_CN.md +424 -0
  137. package/dist/search-box/SearchBox.svelte +22 -6
  138. package/dist/search-box/SearchBox.svelte.d.ts +4 -1
  139. package/dist/tabs/README.md +919 -0
  140. package/dist/tabs/README_CN.md +920 -0
  141. package/dist/tag/README.md +922 -0
  142. package/dist/tag/README_CN.md +922 -0
  143. package/dist/text-editor/PasswordEditor.svelte +17 -2
  144. package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
  145. package/dist/text-editor/PasswordEditor_README.md +551 -0
  146. package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
  147. package/dist/text-editor/README.md +466 -0
  148. package/dist/text-editor/README_CN.md +466 -0
  149. package/dist/text-editor/TextEditor.svelte +51 -19
  150. package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
  151. package/dist/ticatec-uniface-web.css +2 -0
  152. package/dist/time-editor/README.md +498 -24
  153. package/dist/time-editor/README_CN.md +498 -0
  154. package/dist/time-editor/TimeEditor.svelte +7 -3
  155. package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
  156. package/dist/toast/README.md +667 -0
  157. package/dist/toast/README_CN.md +667 -0
  158. package/dist/transfer/README.md +795 -0
  159. package/dist/transfer/Transfer.svelte +6 -4
  160. package/dist/transfer/Transfer.svelte.d.ts +3 -1
  161. package/dist/tree-view/README.md +761 -0
  162. package/dist/tree-view/README_CN.md +761 -0
  163. package/dist/tree-view/TreeView.svelte +5 -3
  164. package/dist/tree-view/TreeView.svelte.d.ts +3 -1
  165. package/dist/unit-number-editor/README.md +546 -20
  166. package/dist/unit-number-editor/README_CN.md +525 -0
  167. package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
  168. package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
  169. package/docs/form-field/cn/README_CN.md +364 -0
  170. package/docs/form-field/en/README.md +364 -0
  171. package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
  172. package/docs/form-panel/flex-form/en/README.md +586 -0
  173. package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
  174. package/docs/form-panel/flex-row-form/en/README.md +787 -0
  175. package/docs/form-panel/grid-form/en/README.md +744 -0
  176. package/package.json +1 -1
  177. 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