@design.estate/dees-catalog 1.11.6 → 1.11.7

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/readme.md CHANGED
@@ -1,432 +1,1395 @@
1
- # @design.estate/dees-catalog 🎨
2
- > **A comprehensive web components library built with TypeScript and LitElement**
3
- > 75+ Production-ready UI components for building modern web applications with consistent design and behavior
1
+ # @design.estate/dees-catalog
2
+ A comprehensive web components library built with TypeScript and LitElement, providing 75+ UI components for building modern web applications with consistent design and behavior.
4
3
 
5
- [![npm version](https://img.shields.io/npm/v/@design.estate/dees-catalog.svg)](https://www.npmjs.com/package/@design.estate/dees-catalog)
6
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)
7
- [![Web Components](https://img.shields.io/badge/Web%20Components-Ready-green.svg)](https://www.webcomponents.org/)
8
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
+ ## Development Guide
5
+ For developers working on this library, please refer to the [UI Components Playbook](readme.playbook.md) for comprehensive patterns, best practices, and architectural guidelines.
9
6
 
10
- ## 🚀 Quick Start
7
+ ## Install
8
+ To install the `@design.estate/dees-catalog` library, you can use npm or any other compatible JavaScript package manager:
11
9
 
12
10
  ```bash
13
- # Install with npm
14
11
  npm install @design.estate/dees-catalog
12
+ ```
13
+
14
+ ## Components Overview
15
+
16
+ | Category | Components |
17
+ |----------|------------|
18
+ | Core UI | [`DeesButton`](#deesbutton), [`DeesButtonExit`](#deesbuttonexit), [`DeesButtonGroup`](#deesbuttongroup), [`DeesBadge`](#deesbadge), [`DeesChips`](#deeschips), [`DeesHeading`](#deesheading), [`DeesHint`](#deeshint), [`DeesIcon`](#deesicon), [`DeesLabel`](#deeslabel), [`DeesPanel`](#deespanel), [`DeesSearchbar`](#deessearchbar), [`DeesSpinner`](#deesspinner), [`DeesToast`](#deestoast), [`DeesWindowcontrols`](#deeswindowcontrols) |
19
+ | Forms | [`DeesForm`](#deesform), [`DeesInputText`](#deesinputtext), [`DeesInputCheckbox`](#deesinputcheckbox), [`DeesInputDropdown`](#deesinputdropdown), [`DeesInputRadiogroup`](#deesinputradiogroup), [`DeesInputFileupload`](#deesinputfileupload), [`DeesInputIban`](#deesinputiban), [`DeesInputPhone`](#deesinputphone), [`DeesInputQuantitySelector`](#deesinputquantityselector), [`DeesInputMultitoggle`](#deesinputmultitoggle), [`DeesInputTags`](#deesinputtags), [`DeesInputTypelist`](#deesinputtypelist), [`DeesInputRichtext`](#deesinputrichtext), [`DeesInputWysiwyg`](#deesinputwysiwyg), [`DeesInputDatepicker`](#deesinputdatepicker), [`DeesInputSearchselect`](#deesinputsearchselect), [`DeesFormSubmit`](#deesformsubmit) |
20
+ | Layout | [`DeesAppuiBase`](#deesappuibase), [`DeesAppuiMainmenu`](#deesappuimainmenu), [`DeesAppuiMainselector`](#deesappuimainselector), [`DeesAppuiMaincontent`](#deesappuimaincontent), [`DeesAppuiAppbar`](#deesappuiappbar), [`DeesAppuiActivitylog`](#deesappuiactivitylog), [`DeesAppuiProfiledropdown`](#deesappuiprofiledropdown), [`DeesAppuiTabs`](#deesappuitabs), [`DeesAppuiView`](#deesappuiview), [`DeesMobileNavigation`](#deesmobilenavigation), [`DeesDashboardGrid`](#deesdashboardgrid) |
21
+ | Data Display | [`DeesTable`](#deestable), [`DeesDataviewCodebox`](#deesdataviewcodebox), [`DeesDataviewStatusobject`](#deesdataviewstatusobject), [`DeesPdf`](#deespdf), [`DeesStatsGrid`](#deesstatsgrid), [`DeesPagination`](#deespagination) |
22
+ | Visualization | [`DeesChartArea`](#deeschartarea), [`DeesChartLog`](#deeschartlog) |
23
+ | Dialogs & Overlays | [`DeesModal`](#deesmodal), [`DeesContextmenu`](#deescontextmenu), [`DeesSpeechbubble`](#deesspeechbubble), [`DeesWindowlayer`](#deeswindowlayer) |
24
+ | Navigation | [`DeesStepper`](#deesstepper), [`DeesProgressbar`](#deesprogressbar) |
25
+ | Development | [`DeesEditor`](#deeseditor), [`DeesEditorMarkdown`](#deeseditormarkdown), [`DeesEditorMarkdownoutlet`](#deeseditormarkdownoutlet), [`DeesTerminal`](#deesterminal), [`DeesUpdater`](#deesupdater) |
26
+ | Auth & Utilities | [`DeesSimpleAppdash`](#deessimpleappdash), [`DeesSimpleLogin`](#deessimplelogin) |
27
+ | Shopping | [`DeesShoppingProductcard`](#deesshoppingproductcard) |
28
+
29
+ ## Detailed Component Documentation
30
+
31
+ ### Core UI Components
15
32
 
16
- # Or with pnpm (recommended)
17
- pnpm add @design.estate/dees-catalog
33
+ #### `DeesButton`
34
+ A versatile button component supporting multiple styles and states.
18
35
 
19
- # Or with yarn
20
- yarn add @design.estate/dees-catalog
36
+ ```typescript
37
+ // Basic usage
38
+ const button = document.createElement('dees-button');
39
+ button.text = 'Click me';
40
+
41
+ // With options
42
+ <dees-button
43
+ type="highlighted" // Options: normal, highlighted, discreet
44
+ status="pending" // Options: normal, pending, success, error
45
+ disabled={false} // Optional: disables the button
46
+ @click=${handleClick}
47
+ >Click me</dees-button>
21
48
  ```
22
49
 
23
- ### Basic Usage
50
+ #### `DeesBadge`
51
+ Display status indicators or counts with customizable styles.
24
52
 
25
53
  ```typescript
26
- // Import components you need
27
- import { DeesButton, DeesForm, DeesInputText } from '@design.estate/dees-catalog';
54
+ <dees-badge
55
+ type="success" // Options: default, primary, success, warning, error
56
+ text="New" // Text to display
57
+ rounded // Optional: applies rounded corners
58
+ ></dees-badge>
59
+ ```
28
60
 
29
- // Use in your HTML or framework
30
- <dees-form @formData=${handleSubmit}>
31
- <dees-input-text
32
- label="Your Name"
33
- required
34
- ></dees-input-text>
35
- <dees-button type="highlighted">
36
- Submit
37
- </dees-button>
38
- </dees-form>
61
+ #### `DeesChips`
62
+ Interactive chips/tags with selection capabilities.
63
+
64
+ ```typescript
65
+ <dees-chips
66
+ selectionMode="multiple" // Options: none, single, multiple
67
+ chipsAreRemovable // Optional: allows removing chips
68
+ .selectableChips=${[
69
+ { key: 'tag1', value: 'Important' },
70
+ { key: 'tag2', value: 'Urgent' }
71
+ ]}
72
+ @selection-change=${handleSelection}
73
+ ></dees-chips>
39
74
  ```
40
75
 
41
- ## 📦 What's Inside?
76
+ #### `DeesIcon`
77
+ Display icons from FontAwesome and Lucide icon libraries with library prefixes.
42
78
 
43
- ### Component Categories at a Glance
79
+ ```typescript
80
+ // FontAwesome icons - use 'fa:' prefix
81
+ <dees-icon
82
+ icon="fa:check" // FontAwesome icon with fa: prefix
83
+ iconSize="24" // Size in pixels
84
+ color="#22c55e" // Optional: custom color
85
+ ></dees-icon>
86
+
87
+ // Lucide icons - use 'lucide:' prefix
88
+ <dees-icon
89
+ icon="lucide:menu" // Lucide icon with lucide: prefix
90
+ iconSize="24" // Size in pixels
91
+ color="#007bff" // Optional: custom color
92
+ strokeWidth="2" // Optional: stroke width for Lucide icons
93
+ ></dees-icon>
94
+
95
+ // Legacy API (deprecated but still supported)
96
+ <dees-icon
97
+ iconFA="check" // Without prefix - assumes FontAwesome
98
+ ></dees-icon>
99
+ ```
44
100
 
45
- | 🎯 Category | 📊 Count | 🔥 Popular Components |
46
- |------------|----------|----------------------|
47
- | **Core UI** | 15+ | Buttons, Icons, Badges, Labels, Panels |
48
- | **Forms** | 20+ | Text Input, Dropdown, Date Picker, WYSIWYG Editor |
49
- | **Layout** | 12+ | App Shell, Navigation, Dashboard Grid |
50
- | **Data Display** | 8+ | Tables, Charts, Stats Grid, Pagination |
51
- | **Overlays** | 5+ | Modals, Context Menus, Toasts |
52
- | **Development** | 6+ | Code Editor, Terminal, Markdown Editor |
101
+ #### `DeesLabel`
102
+ Text label component with optional icon and status indicators.
53
103
 
54
- ## 🌟 Key Features
104
+ ```typescript
105
+ <dees-label
106
+ text="Status" // Label text
107
+ icon="info-circle" // Optional: icon name
108
+ type="info" // Options: default, info, success, warning, error
109
+ size="medium" // Options: small, medium, large
110
+ ></dees-label>
111
+ ```
55
112
 
56
- - ✅ **100% TypeScript** - Full type safety and IntelliSense support
57
- - 🎨 **Theme System** - Built-in light/dark theme support
58
- - 📱 **Responsive** - Mobile-first design approach
59
- - ♿ **Accessible** - ARIA compliant with keyboard navigation
60
- - 🚀 **Performance** - Lazy loading and optimized rendering
61
- - 🔧 **Customizable** - CSS variables and property APIs
62
- - 🧩 **Framework Agnostic** - Works with any framework or vanilla JS
63
- - 📖 **Well Documented** - Comprehensive demos and examples
113
+ #### `DeesSpinner`
114
+ Loading indicator with customizable appearance.
64
115
 
65
- ## 💡 Component Highlights
116
+ ```typescript
117
+ <dees-spinner
118
+ size="medium" // Options: small, medium, large
119
+ type="primary" // Options: primary, secondary, light, dark
120
+ overlay // Optional: adds a full-screen overlay
121
+ ></dees-spinner>
122
+ ```
66
123
 
67
- ### 🎯 Core UI Components
124
+ #### `DeesToast`
125
+ Notification toast messages with various styles, positions, and auto-dismiss functionality.
68
126
 
69
- #### Buttons & Actions
70
127
  ```typescript
71
- // Beautiful button with multiple styles
72
- <dees-button
73
- type="highlighted" // normal | highlighted | discreet
74
- status="pending" // normal | pending | success | error
75
- @click=${handleClick}
76
- >
77
- Click Me
78
- </dees-button>
128
+ // Programmatic usage
129
+ DeesToast.show({
130
+ message: 'Operation successful',
131
+ type: 'success', // Options: info, success, warning, error
132
+ duration: 3000, // Time in milliseconds before auto-dismiss
133
+ position: 'top-right' // Options: top-right, top-left, bottom-right, bottom-left, top-center, bottom-center
134
+ });
135
+
136
+ // Convenience methods
137
+ DeesToast.info('Information message');
138
+ DeesToast.success('Success message');
139
+ DeesToast.warning('Warning message');
140
+ DeesToast.error('Error message');
141
+
142
+ // Advanced control
143
+ const toast = await DeesToast.show({
144
+ message: 'Processing...',
145
+ type: 'info',
146
+ duration: 0 // No auto-dismiss
147
+ });
148
+
149
+ // Later dismiss programmatically
150
+ toast.dismiss();
151
+
152
+ // Component usage (not typically used directly)
153
+ <dees-toast
154
+ message="Changes saved"
155
+ type="success"
156
+ duration="3000"
157
+ ></dees-toast>
158
+ ```
159
+
160
+ Key Features:
161
+ - Multiple toast types with distinct icons and colors
162
+ - 6 position options for flexible placement
163
+ - Auto-dismiss with visual progress indicator
164
+ - Manual dismiss by clicking
165
+ - Smooth animations and transitions
166
+ - Automatic stacking of multiple toasts
167
+ - Theme-aware styling
168
+ - Programmatic control
169
+
170
+ #### `DeesButtonExit`
171
+ Exit/close button component with consistent styling.
79
172
 
80
- // Button groups for related actions
173
+ ```typescript
174
+ <dees-button-exit
175
+ @click=${handleClose}
176
+ ></dees-button-exit>
177
+ ```
178
+
179
+ #### `DeesButtonGroup`
180
+ Container for grouping related buttons together.
181
+
182
+ ```typescript
81
183
  <dees-button-group
82
184
  .buttons=${[
83
- { text: 'Save', type: 'highlighted', action: save },
84
- { text: 'Cancel', type: 'normal', action: cancel }
185
+ { text: 'Save', type: 'highlighted', action: handleSave },
186
+ { text: 'Cancel', type: 'normal', action: handleCancel }
85
187
  ]}
188
+ spacing="medium" // Options: small, medium, large
86
189
  ></dees-button-group>
87
190
  ```
88
191
 
89
- #### Icons with Library Prefixes
192
+ #### `DeesHeading`
193
+ Consistent heading component with level and styling options.
194
+
90
195
  ```typescript
91
- // FontAwesome icons
92
- <dees-icon icon="fa:check" iconSize="24"></dees-icon>
196
+ <dees-heading
197
+ level={1} // 1-6 for H1-H6
198
+ text="Page Title"
199
+ .subheading=${'Optional subtitle'}
200
+ centered // Optional: center alignment
201
+ ></dees-heading>
202
+ ```
93
203
 
94
- // Lucide icons
95
- <dees-icon icon="lucide:menu" iconSize="24"></dees-icon>
204
+ #### `DeesHint`
205
+ Hint/tooltip component for providing contextual help.
206
+
207
+ ```typescript
208
+ <dees-hint
209
+ text="This field is required"
210
+ type="info" // Options: info, warning, error, success
211
+ position="top" // Options: top, bottom, left, right
212
+ ></dees-hint>
96
213
  ```
97
214
 
98
- #### Toast Notifications
215
+ #### `DeesPanel`
216
+ Container component for grouping related content with optional title and actions.
217
+
99
218
  ```typescript
100
- // Show toast notifications programmatically
101
- DeesToast.success('Changes saved successfully!');
102
- DeesToast.error('Something went wrong');
103
- DeesToast.info('New update available');
219
+ <dees-panel
220
+ .title=${'Panel Title'}
221
+ .subtitle=${'Optional subtitle'}
222
+ collapsible // Optional: allow collapse/expand
223
+ collapsed={false} // Initial collapsed state
224
+ .actions=${[
225
+ { icon: 'settings', action: handleSettings }
226
+ ]}
227
+ >
228
+ <!-- Panel content -->
229
+ </dees-panel>
230
+ ```
104
231
 
105
- // Advanced control
106
- const toast = await DeesToast.show({
107
- message: 'Processing...',
108
- type: 'info',
109
- duration: 0 // No auto-dismiss
110
- });
111
- // Later...
112
- toast.dismiss();
232
+ #### `DeesSearchbar`
233
+ Search input component with suggestions and search handling.
234
+
235
+ ```typescript
236
+ <dees-searchbar
237
+ placeholder="Search..."
238
+ .suggestions=${['item1', 'item2', 'item3']}
239
+ showClearButton // Show clear button when has value
240
+ @search=${handleSearch}
241
+ @suggestion-select=${handleSuggestionSelect}
242
+ ></dees-searchbar>
113
243
  ```
114
244
 
115
- ### 📝 Form Components
116
-
117
- #### Complete Form System
118
- ```typescript
119
- <dees-form @formData=${(e) => console.log('Form data:', e.detail)}>
120
- <!-- Text input with validation -->
121
- <dees-input-text
122
- key="email"
123
- label="Email"
124
- required
125
- validationRegex="^[^@]+@[^@]+\.[^@]+$"
126
- ></dees-input-text>
127
-
128
- <!-- Date picker with constraints -->
129
- <dees-input-datepicker
130
- key="eventDate"
131
- label="Event Date"
132
- minDate="2025-01-01"
133
- enableTime
134
- ></dees-input-datepicker>
135
-
136
- <!-- List management (NEW!) -->
137
- <dees-input-list
138
- key="features"
139
- label="Product Features"
140
- placeholder="Add feature..."
141
- sortable
142
- minItems={3}
143
- maxItems={10}
144
- ></dees-input-list>
145
-
146
- <!-- Rich text editor -->
147
- <dees-input-wysiwyg
148
- key="description"
149
- label="Description"
150
- ></dees-input-wysiwyg>
245
+ #### `DeesWindowcontrols`
246
+ Window control buttons (minimize, maximize, close) for desktop-like applications.
247
+
248
+ ```typescript
249
+ <dees-windowcontrols
250
+ .controls=${['minimize', 'maximize', 'close']}
251
+ @minimize=${handleMinimize}
252
+ @maximize=${handleMaximize}
253
+ @close=${handleClose}
254
+ ></dees-windowcontrols>
255
+ ```
256
+
257
+ ### Form Components
258
+
259
+ #### `DeesForm`
260
+ Container component for form elements with built-in validation and data handling.
151
261
 
262
+ ```typescript
263
+ <dees-form
264
+ @formData=${(e) => handleFormData(e.detail)} // Emitted when form is submitted
265
+ @formValidation=${(e) => handleValidation(e.detail)} // Emitted during validation
266
+ >
267
+ <dees-input-text required></dees-input-text>
152
268
  <dees-form-submit>Submit</dees-form-submit>
153
269
  </dees-form>
154
270
  ```
155
271
 
156
- ### 🏗️ Layout Components
272
+ #### `DeesInputText`
273
+ Text input field with validation and formatting options.
274
+
275
+ ```typescript
276
+ <dees-input-text
277
+ key="email" // Unique identifier for form data
278
+ label="Email" // Input label
279
+ value="initial@value.com" // Initial value
280
+ required // Makes the field required
281
+ disabled // Disables the input
282
+ placeholder="Enter your email"
283
+ ></dees-input-text>
284
+ ```
285
+
286
+ #### `DeesInputCheckbox`
287
+ Checkbox input component for boolean values.
288
+
289
+ ```typescript
290
+ <dees-input-checkbox
291
+ key="terms"
292
+ label="Accept Terms"
293
+ checked // Initial checked state
294
+ required
295
+ @change=${handleChange}
296
+ ></dees-input-checkbox>
297
+ ```
298
+
299
+ #### `DeesInputDropdown`
300
+ Dropdown selection component with search and filtering capabilities.
301
+
302
+ ```typescript
303
+ <dees-input-dropdown
304
+ key="country"
305
+ label="Select Country"
306
+ .options=${[
307
+ { key: 'us', option: 'United States' },
308
+ { key: 'uk', option: 'United Kingdom' }
309
+ ]}
310
+ searchable // Enables search functionality
311
+ multiple // Allows multiple selections
312
+ ></dees-input-dropdown>
313
+ ```
314
+
315
+ #### `DeesInputFileupload`
316
+ File upload component with drag-and-drop support.
317
+
318
+ ```typescript
319
+ <dees-input-fileupload
320
+ key="documents"
321
+ label="Upload Files"
322
+ multiple // Allow multiple file selection
323
+ accept=".pdf,.doc" // Accepted file types
324
+ maxSize="5MB" // Maximum file size
325
+ @upload=${handleUpload}
326
+ ></dees-input-fileupload>
327
+ ```
328
+
329
+ #### `DeesInputIban`
330
+ Specialized input for IBAN (International Bank Account Number) with validation.
331
+
332
+ ```typescript
333
+ <dees-input-iban
334
+ key="bankAccount"
335
+ label="IBAN"
336
+ country="DE" // Default country format
337
+ required
338
+ @validate=${handleIbanValidation}
339
+ ></dees-input-iban>
340
+ ```
341
+
342
+ #### `DeesInputPhone`
343
+ Phone number input with country code selection and formatting.
344
+
345
+ ```typescript
346
+ <dees-input-phone
347
+ key="phone"
348
+ label="Phone Number"
349
+ defaultCountry="US" // Default country code
350
+ required
351
+ @validate=${handlePhoneValidation}
352
+ ></dees-input-phone>
353
+ ```
354
+
355
+ #### `DeesInputQuantitySelector`
356
+ Numeric input with increment/decrement controls.
357
+
358
+ ```typescript
359
+ <dees-input-quantity-selector
360
+ key="quantity"
361
+ label="Quantity"
362
+ min="0" // Minimum value
363
+ max="100" // Maximum value
364
+ step="1" // Increment/decrement step
365
+ value="1" // Initial value
366
+ ></dees-input-quantity-selector>
367
+ ```
368
+
369
+ #### `DeesInputMultitoggle`
370
+ Multi-state toggle button group.
371
+
372
+ ```typescript
373
+ <dees-input-multitoggle
374
+ key="status"
375
+ label="Status"
376
+ .options=${[
377
+ { key: 'active', label: 'Active' },
378
+ { key: 'pending', label: 'Pending' },
379
+ { key: 'inactive', label: 'Inactive' }
380
+ ]}
381
+ value="active" // Initial selected value
382
+ ></dees-input-multitoggle>
383
+ ```
384
+
385
+ #### `DeesInputRadiogroup`
386
+ Radio button group for single-choice selections with internal state management.
387
+
388
+ ```typescript
389
+ <dees-input-radiogroup
390
+ key="plan"
391
+ label="Select Plan"
392
+ .options=${['Free', 'Pro', 'Enterprise']}
393
+ selectedOption="Pro"
394
+ required
395
+ @change=${handlePlanChange}
396
+ ></dees-input-radiogroup>
397
+
398
+ // With custom option objects
399
+ <dees-input-radiogroup
400
+ key="priority"
401
+ label="Priority Level"
402
+ .options=${[
403
+ { key: 'low', label: 'Low Priority' },
404
+ { key: 'medium', label: 'Medium Priority' },
405
+ { key: 'high', label: 'High Priority' }
406
+ ]}
407
+ selectedOption="medium"
408
+ ></dees-input-radiogroup>
409
+ ```
410
+
411
+ #### `DeesInputTags`
412
+ Tag input component for managing lists of tags with auto-complete and validation.
413
+
414
+ ```typescript
415
+ <dees-input-tags
416
+ key="skills"
417
+ label="Skills"
418
+ .value=${['JavaScript', 'TypeScript', 'CSS']}
419
+ placeholder="Add a skill..."
420
+ .suggestions=${[
421
+ 'JavaScript', 'TypeScript', 'Python', 'Go', 'Rust',
422
+ 'React', 'Vue', 'Angular', 'Node.js', 'Docker'
423
+ ]}
424
+ maxTags={10} // Optional: limit number of tags
425
+ required
426
+ @change=${handleTagsChange}
427
+ ></dees-input-tags>
428
+ ```
429
+
430
+ Key Features:
431
+ - Add tags by pressing Enter or typing comma/semicolon
432
+ - Remove tags with click or backspace
433
+ - Auto-complete suggestions with keyboard navigation
434
+ - Maximum tag limit support
435
+ - Full theme support
436
+ - Form validation integration
437
+
438
+ #### `DeesInputTypelist`
439
+ Dynamic list input for managing arrays of typed values.
440
+
441
+ ```typescript
442
+ <dees-input-typelist
443
+ key="features"
444
+ label="Product Features"
445
+ placeholder="Add a feature..."
446
+ .value=${['Feature 1', 'Feature 2']}
447
+ @change=${handleFeaturesChange}
448
+ ></dees-input-typelist>
449
+ ```
450
+
451
+ #### `DeesInputDatepicker`
452
+ Date and time picker component with calendar interface and manual typing support.
453
+
454
+ ```typescript
455
+ <dees-input-datepicker
456
+ key="eventDate"
457
+ label="Event Date"
458
+ placeholder="YYYY-MM-DD"
459
+ value="2025-01-15T14:30:00Z" // ISO string format
460
+ dateFormat="YYYY-MM-DD" // Display format (default: YYYY-MM-DD)
461
+ enableTime={true} // Enable time selection
462
+ timeFormat="24h" // Options: 24h, 12h
463
+ minuteIncrement={15} // Time step in minutes
464
+ minDate="2025-01-01" // Minimum selectable date
465
+ maxDate="2025-12-31" // Maximum selectable date
466
+ .disabledDates=${[ // Array of disabled dates
467
+ '2025-01-10',
468
+ '2025-01-11'
469
+ ]}
470
+ weekStartsOn={1} // 0 = Sunday, 1 = Monday
471
+ required
472
+ @change=${handleDateChange}
473
+ ></dees-input-datepicker>
474
+ ```
475
+
476
+ Key Features:
477
+ - Interactive calendar popup
478
+ - Manual date typing with multiple formats
479
+ - Optional time selection
480
+ - Configurable date format
481
+ - Min/max date constraints
482
+ - Disable specific dates
483
+ - Keyboard navigation
484
+ - Today button
485
+ - Clear functionality
486
+ - 12/24 hour time formats
487
+ - Theme-aware styling
488
+ - Live parsing and validation
489
+
490
+ Manual Input Formats:
491
+ ```typescript
492
+ // Date formats supported
493
+ "2023-12-20" // ISO format (YYYY-MM-DD)
494
+ "20.12.2023" // European format (DD.MM.YYYY)
495
+ "12/20/2023" // US format (MM/DD/YYYY)
496
+
497
+ // Date with time (add space and time after any date format)
498
+ "2023-12-20 14:30"
499
+ "20.12.2023 9:45"
500
+ "12/20/2023 16:00"
501
+ ```
502
+
503
+ The component automatically parses and validates input as you type, updating the internal date value when a valid date is recognized.
504
+
505
+ #### `DeesInputSearchselect`
506
+ Search-enabled dropdown selection component.
507
+
508
+ ```typescript
509
+ <dees-input-searchselect
510
+ key="category"
511
+ label="Select Category"
512
+ placeholder="Search categories..."
513
+ .options=${[
514
+ { key: 'tech', label: 'Technology' },
515
+ { key: 'health', label: 'Healthcare' },
516
+ { key: 'finance', label: 'Finance' }
517
+ ]}
518
+ required
519
+ @change=${handleCategoryChange}
520
+ ></dees-input-searchselect>
521
+ ```
522
+
523
+ #### `DeesInputRichtext`
524
+ Rich text editor with formatting toolbar powered by TipTap.
525
+
526
+ ```typescript
527
+ <dees-input-richtext
528
+ key="content"
529
+ label="Article Content"
530
+ .value=${htmlContent}
531
+ placeholder="Start writing..."
532
+ minHeight={300} // Minimum editor height
533
+ showWordCount={true} // Show word/character count
534
+ @change=${handleContentChange}
535
+ ></dees-input-richtext>
536
+ ```
537
+
538
+ Key Features:
539
+ - Full formatting toolbar (bold, italic, underline, strike, etc.)
540
+ - Heading levels (H1-H6)
541
+ - Lists (bullet, ordered)
542
+ - Links with URL editing
543
+ - Code blocks and inline code
544
+ - Blockquotes
545
+ - Horizontal rules
546
+ - Undo/redo support
547
+ - Word and character count
548
+ - HTML output
549
+
550
+ #### `DeesInputWysiwyg`
551
+ Advanced block-based editor with slash commands and rich content blocks.
552
+
553
+ ```typescript
554
+ <dees-input-wysiwyg
555
+ key="document"
556
+ label="Document Editor"
557
+ .value=${documentContent}
558
+ outputFormat="html" // Options: html, markdown, json
559
+ @change=${handleDocumentChange}
560
+ ></dees-input-wysiwyg>
561
+ ```
562
+
563
+ Key Features:
564
+ - Slash commands for quick formatting
565
+ - Block-based editing (paragraphs, headings, lists, etc.)
566
+ - Drag and drop block reordering
567
+ - Multiple output formats
568
+ - Keyboard shortcuts
569
+ - Collaborative editing ready
570
+ - Extensible block types
571
+
572
+ #### `DeesFormSubmit`
573
+ Submit button component specifically designed for `DeesForm`.
574
+
575
+ ```typescript
576
+ <dees-form-submit
577
+ disabled // Optional: disable submit button
578
+ status="normal" // Options: normal, pending, success, error
579
+ >Submit Form</dees-form-submit>
580
+ ```
581
+
582
+ ### Layout Components
583
+
584
+ #### `DeesAppuiBase`
585
+ Base container component for application layout structure with integrated appbar, menu system, and content areas.
157
586
 
158
- #### Application Shell
159
587
  ```typescript
160
- // Complete application layout with one component
161
588
  <dees-appui-base
162
- .appbarMenuItems=${menuItems}
163
- .appbarBreadcrumbs=${'Home > Dashboard'}
164
- .mainmenuTabs=${tabs}
165
- .user=${{ name: 'John Doe', status: 'online' }}
589
+ // Appbar configuration
590
+ .appbarMenuItems=${[
591
+ {
592
+ name: 'File',
593
+ action: async () => {}, // No-op for parent menu items
594
+ submenu: [
595
+ { name: 'New File', shortcut: 'Cmd+N', iconName: 'file-plus', action: async () => {} },
596
+ { name: 'Open...', shortcut: 'Cmd+O', iconName: 'folder-open', action: async () => {} },
597
+ { divider: true },
598
+ { name: 'Save', shortcut: 'Cmd+S', iconName: 'save', action: async () => {} }
599
+ ]
600
+ },
601
+ {
602
+ name: 'Edit',
603
+ action: async () => {},
604
+ submenu: [
605
+ { name: 'Undo', shortcut: 'Cmd+Z', iconName: 'undo', action: async () => {} },
606
+ { name: 'Redo', shortcut: 'Cmd+Shift+Z', iconName: 'redo', action: async () => {} }
607
+ ]
608
+ }
609
+ ]}
610
+ .appbarBreadcrumbs=${'Dashboard > Overview'}
611
+ .appbarTheme=${'dark'}
612
+ .appbarUser=${{ name: 'John Doe', status: 'online' }}
613
+ .appbarShowSearch=${true}
614
+ .appbarShowWindowControls=${true}
615
+
616
+ // Main menu configuration (left sidebar)
617
+ .mainmenuTabs=${[
618
+ { key: 'dashboard', iconName: 'lucide:home', action: () => {} },
619
+ { key: 'projects', iconName: 'lucide:folder', action: () => {} },
620
+ { key: 'settings', iconName: 'lucide:settings', action: () => {} }
621
+ ]}
622
+ .mainmenuSelectedTab=${selectedTab}
623
+
624
+ // Selector configuration (second sidebar)
625
+ .mainselectorOptions=${[
626
+ { key: 'Overview', action: () => {} },
627
+ { key: 'Components', action: () => {} },
628
+ { key: 'Services', action: () => {} }
629
+ ]}
630
+ .mainselectorSelectedOption=${selectedOption}
631
+
632
+ // Main content tabs
633
+ .maincontentTabs=${[
634
+ { key: 'tab1', iconName: 'lucide:file', action: () => {} }
635
+ ]}
636
+
637
+ // Event handlers
638
+ @appbar-menu-select=${(e) => handleMenuSelect(e.detail)}
639
+ @appbar-breadcrumb-navigate=${(e) => handleBreadcrumbNav(e.detail)}
640
+ @appbar-search-click=${() => handleSearch()}
641
+ @appbar-user-menu-open=${() => handleUserMenu()}
642
+ @mainmenu-tab-select=${(e) => handleTabSelect(e.detail)}
643
+ @mainselector-option-select=${(e) => handleOptionSelect(e.detail)}
166
644
  >
167
645
  <div slot="maincontent">
168
- <!-- Your app content -->
646
+ <!-- Your main application content goes here -->
169
647
  </div>
170
648
  </dees-appui-base>
171
649
  ```
172
650
 
173
- #### Dashboard Grid
651
+ Key Features:
652
+ - **Integrated Layout System**: Automatically arranges appbar, sidebars, and content area
653
+ - **Centralized Configuration**: Pass properties to all child components from one place
654
+ - **Event Propagation**: All child component events are re-emitted for easy handling
655
+ - **Responsive Grid**: Uses CSS Grid for flexible, responsive layout
656
+ - **Slot Support**: Main content area supports custom content via slots
657
+
658
+ #### `DeesAppuiMainmenu`
659
+ Main navigation menu component for application-wide navigation.
660
+
174
661
  ```typescript
175
- // Drag-and-drop dashboard widgets
176
- <dees-dashboardgrid
177
- .widgets=${[
662
+ <dees-appui-mainmenu
663
+ .menuItems=${[
178
664
  {
179
- id: 'sales',
180
- title: 'Sales Overview',
181
- x: 0, y: 0, w: 4, h: 3,
182
- content: html`<sales-chart></sales-chart>`
665
+ key: 'dashboard',
666
+ label: 'Dashboard',
667
+ icon: 'home',
668
+ action: () => handleNavigation('dashboard')
183
669
  },
184
670
  {
185
- id: 'stats',
186
- title: 'Statistics',
187
- x: 4, y: 0, w: 4, h: 3,
188
- content: html`<dees-statsgrid .tiles=${stats}></dees-statsgrid>`
671
+ key: 'settings',
672
+ label: 'Settings',
673
+ icon: 'cog',
674
+ action: () => handleNavigation('settings')
675
+ }
676
+ ]}
677
+ collapsed // Optional: show collapsed version
678
+ position="left" // Options: left, right
679
+ ></dees-appui-mainmenu>
680
+ ```
681
+
682
+ #### `DeesAppuiMainselector`
683
+ Secondary navigation component for sub-section selection.
684
+
685
+ ```typescript
686
+ <dees-appui-mainselector
687
+ .items=${[
688
+ {
689
+ key: 'section1',
690
+ label: 'Section 1',
691
+ icon: 'folder',
692
+ action: () => selectSection('section1')
189
693
  }
190
694
  ]}
191
- editable
192
- ></dees-dashboardgrid>
695
+ selectedKey="section1" // Currently selected section
696
+ @selection-change=${handleSectionChange}
697
+ ></dees-appui-mainselector>
193
698
  ```
194
699
 
195
- ### 📊 Data Display
700
+ #### `DeesAppuiMaincontent`
701
+ Main content area with tab management support.
702
+
703
+ ```typescript
704
+ <dees-appui-maincontent
705
+ .tabs=${[
706
+ {
707
+ key: 'tab1',
708
+ label: 'Tab 1',
709
+ content: html`<div>Tab 1 Content</div>`,
710
+ action: () => handleTabAction('tab1')
711
+ }
712
+ ]}
713
+ selectedTab="tab1" // Currently active tab
714
+ @tab-change=${handleTabChange}
715
+ ></dees-appui-maincontent>
716
+ ```
717
+
718
+ #### `DeesAppuiAppbar`
719
+ Professional application bar component with hierarchical menus, breadcrumb navigation, and user account management.
720
+
721
+ ```typescript
722
+ <dees-appui-appbar
723
+ .menuItems=${[
724
+ {
725
+ name: 'File',
726
+ action: async () => {}, // No-op for parent menu items
727
+ submenu: [
728
+ {
729
+ name: 'New File',
730
+ shortcut: 'Cmd+N',
731
+ iconName: 'file-plus',
732
+ action: async () => handleNewFile()
733
+ },
734
+ {
735
+ name: 'Open...',
736
+ shortcut: 'Cmd+O',
737
+ iconName: 'folder-open',
738
+ action: async () => handleOpen()
739
+ },
740
+ { divider: true }, // Menu separator
741
+ {
742
+ name: 'Save',
743
+ shortcut: 'Cmd+S',
744
+ iconName: 'save',
745
+ action: async () => handleSave(),
746
+ disabled: true // Disabled state
747
+ }
748
+ ]
749
+ },
750
+ {
751
+ name: 'Edit',
752
+ action: async () => {},
753
+ submenu: [
754
+ { name: 'Undo', shortcut: 'Cmd+Z', iconName: 'undo', action: async () => handleUndo() },
755
+ { name: 'Redo', shortcut: 'Cmd+Shift+Z', iconName: 'redo', action: async () => handleRedo() }
756
+ ]
757
+ }
758
+ ]}
759
+ .breadcrumbs=${'Project > src > components > AppBar.ts'}
760
+ .breadcrumbSeparator=${' > '}
761
+ .showWindowControls=${true}
762
+ .showSearch=${true}
763
+ .theme=${'dark'} // Options: 'light' | 'dark'
764
+ .user=${{
765
+ name: 'John Doe',
766
+ avatar: '/path/to/avatar.jpg', // Optional
767
+ status: 'online' // Options: 'online' | 'offline' | 'busy' | 'away'
768
+ }}
769
+ @menu-select=${(e) => handleMenuSelect(e.detail.item)}
770
+ @breadcrumb-navigate=${(e) => handleBreadcrumbClick(e.detail)}
771
+ @search-click=${() => handleSearchClick()}
772
+ @user-menu-open=${() => handleUserMenuOpen()}
773
+ ></dees-appui-appbar>
774
+ ```
775
+
776
+ Key Features:
777
+ - **Hierarchical Menu System**
778
+ - Top-level text-only menus (following desktop UI standards)
779
+ - Dropdown submenus with icons and keyboard shortcuts
780
+ - Support for nested submenus
781
+ - Menu dividers for visual grouping
782
+ - Disabled state support
783
+
784
+ - **Keyboard Navigation**
785
+ - Tab navigation between top-level items
786
+ - Arrow keys for dropdown navigation (Up/Down in dropdowns, Left/Right between top items)
787
+ - Enter to select items
788
+ - Escape to close dropdowns
789
+ - Home/End keys for first/last item
790
+
791
+ - **Breadcrumb Navigation**
792
+ - Customizable breadcrumb trail
793
+ - Configurable separator
794
+ - Click events for navigation
795
+
796
+ - **User Account Section**
797
+ - User avatar with fallback to initials
798
+ - Status indicator (online, offline, busy, away)
799
+ - Click handler for user menu
800
+
801
+ - **Visual Features**
802
+ - Light and dark theme support
803
+ - Smooth animations and transitions
804
+ - Window controls integration
805
+ - Search icon with click handler
806
+ - Responsive layout using CSS Grid
807
+
808
+ - **Accessibility**
809
+ - Full ARIA support (menubar, menuitem roles)
810
+ - Keyboard navigation
811
+ - Focus management
812
+ - Screen reader compatible
813
+
814
+ ### Data Display Components
815
+
816
+ #### `DeesTable`
817
+ Advanced table component with sorting, filtering, and action support.
196
818
 
197
- #### Advanced Tables
198
819
  ```typescript
199
820
  <dees-table
200
- .data=${users}
201
- .displayFunction=${(user) => ({
202
- Name: user.name,
203
- Email: user.email,
204
- Role: user.role,
205
- Status: html`<dees-badge type="${user.active ? 'success' : 'error'}">
206
- ${user.active ? 'Active' : 'Inactive'}
207
- </dees-badge>`
821
+ .data=${tableData}
822
+ .displayFunction=${(item) => ({
823
+ name: item.name,
824
+ date: item.date,
825
+ amount: item.amount,
826
+ description: item.description
208
827
  })}
209
828
  .dataActions=${[
210
- { name: 'Edit', icon: 'fa:edit', action: editUser },
211
- { name: 'Delete', icon: 'fa:trash', action: deleteUser }
829
+ {
830
+ name: 'Edit',
831
+ icon: 'edit',
832
+ action: (item) => handleEdit(item)
833
+ },
834
+ {
835
+ name: 'Delete',
836
+ icon: 'trash',
837
+ action: (item) => handleDelete(item)
838
+ }
212
839
  ]}
213
- searchable
840
+ heading1="Transactions"
841
+ heading2="Recent Activity"
842
+ searchable // Enable search functionality
843
+ dataName="transaction" // Name for single data item
844
+ @selection-change=${handleSelectionChange}
214
845
  ></dees-table>
215
846
  ```
216
847
 
217
- #### Statistics Grid
848
+ ##### DeesTable (Updated)
849
+
850
+ Newer features available in `dees-table`:
851
+ - Schema-first columns or `displayFunction` rendering
852
+ - Sorting via header clicks with `aria-sort` + `sortChange`
853
+ - Global search with Lucene-like syntax; modes: `table`, `data`, `server`
854
+ - Per-column quick filters row; `showColumnFilters` and `column.filterable=false`
855
+ - Selection: `none` | `single` | `multi`, with select-all and `selectionChange`
856
+ - Sticky header + internal scroll (`stickyHeader`, `--table-max-height`)
857
+ - Rich actions: header/in-row/contextmenu/footer/doubleClick; pinned Actions column
858
+ - Editable cells via `editableFields`
859
+ - Drag & drop files onto rows
860
+
861
+ #### `DeesDataviewCodebox`
862
+ Code display component with syntax highlighting and line numbers.
863
+
864
+ ```typescript
865
+ <dees-dataview-codebox
866
+ progLang="typescript" // Programming language for syntax highlighting
867
+ .codeToDisplay=${`
868
+ import { html } from '@design.estate/dees-element';
869
+
870
+ export const myComponent = () => {
871
+ return html`<div>Hello World</div>`;
872
+ };
873
+ `}
874
+ ></dees-dataview-codebox>
875
+ ```
876
+
877
+ #### `DeesDataviewStatusobject`
878
+ Status display component for complex objects with nested status indicators.
879
+
880
+ ```typescript
881
+ <dees-dataview-statusobject
882
+ .statusObject=${{
883
+ id: '1',
884
+ name: 'System Status',
885
+ combinedStatus: 'partly_ok',
886
+ combinedStatusText: 'Partially OK',
887
+ details: [
888
+ {
889
+ name: 'Database',
890
+ value: 'Connected',
891
+ status: 'ok',
892
+ statusText: 'OK'
893
+ },
894
+ {
895
+ name: 'API Service',
896
+ value: 'Degraded',
897
+ status: 'partly_ok',
898
+ statusText: 'Partially OK'
899
+ }
900
+ ]
901
+ }}
902
+ ></dees-dataview-statusobject>
903
+ ```
904
+
905
+ #### `DeesPdf`
906
+ PDF viewer component with navigation and zoom controls.
907
+
908
+ ```typescript
909
+ <dees-pdf
910
+ source="path/to/document.pdf" // URL or base64 encoded PDF
911
+ page={1} // Current page number
912
+ scale={1.0} // Zoom level
913
+ .controls=${[ // Optional: customize available controls
914
+ 'zoom',
915
+ 'download',
916
+ 'print',
917
+ 'navigation'
918
+ ]}
919
+ @page-change=${handlePageChange}
920
+ @document-loaded=${handleDocumentLoaded}
921
+ ></dees-pdf>
922
+ ```
923
+
924
+ #### `DeesStatsGrid`
925
+ A responsive grid component for displaying statistical data with various visualization types including numbers, gauges, percentages, and trends.
926
+
218
927
  ```typescript
219
928
  <dees-statsgrid
220
929
  .tiles=${[
221
930
  {
222
- title: 'Revenue',
931
+ id: 'revenue',
932
+ title: 'Total Revenue',
223
933
  value: 125420,
224
934
  unit: '$',
225
935
  type: 'number',
226
- description: '+12.5% from last month'
936
+ icon: 'faDollarSign',
937
+ description: '+12.5% from last month',
938
+ color: '#22c55e',
939
+ actions: [
940
+ {
941
+ name: 'View Details',
942
+ iconName: 'faChartLine',
943
+ action: async () => {
944
+ console.log('Viewing revenue details');
945
+ }
946
+ },
947
+ {
948
+ name: 'Export Data',
949
+ iconName: 'faFileExport',
950
+ action: async () => {
951
+ console.log('Exporting revenue data');
952
+ }
953
+ }
954
+ ]
227
955
  },
228
956
  {
957
+ id: 'cpu',
229
958
  title: 'CPU Usage',
230
959
  value: 73,
231
960
  type: 'gauge',
961
+ icon: 'faMicrochip',
232
962
  gaugeOptions: {
963
+ min: 0,
964
+ max: 100,
233
965
  thresholds: [
234
966
  { value: 0, color: '#22c55e' },
967
+ { value: 60, color: '#f59e0b' },
235
968
  { value: 80, color: '#ef4444' }
236
969
  ]
237
970
  }
971
+ },
972
+ {
973
+ id: 'storage',
974
+ title: 'Storage Used',
975
+ value: 65,
976
+ type: 'percentage',
977
+ icon: 'faHardDrive',
978
+ description: '650 GB of 1 TB',
979
+ color: '#3b82f6'
980
+ },
981
+ {
982
+ id: 'requests',
983
+ title: 'API Requests',
984
+ value: '1.2k',
985
+ unit: '/min',
986
+ type: 'trend',
987
+ icon: 'faServer',
988
+ trendData: [45, 52, 38, 65, 72, 68, 75, 82, 79, 85, 88, 92]
989
+ },
990
+ {
991
+ id: 'uptime',
992
+ title: 'System Uptime',
993
+ value: '99.95%',
994
+ type: 'text',
995
+ icon: 'faCheckCircle',
996
+ color: '#22c55e',
997
+ description: 'Last 30 days'
238
998
  }
239
999
  ]}
1000
+ .gridActions=${[
1001
+ {
1002
+ name: 'Refresh',
1003
+ iconName: 'faSync',
1004
+ action: async () => {
1005
+ console.log('Refreshing stats...');
1006
+ }
1007
+ },
1008
+ {
1009
+ name: 'Export Report',
1010
+ iconName: 'faFileExport',
1011
+ action: async () => {
1012
+ console.log('Exporting stats report...');
1013
+ }
1014
+ }
1015
+ ]}
1016
+ .minTileWidth=${250} // Minimum tile width in pixels
1017
+ .gap=${16} // Gap between tiles in pixels
240
1018
  ></dees-statsgrid>
241
1019
  ```
242
1020
 
243
- ### 🎭 Overlays & Dialogs
1021
+ #### `DeesPagination`
1022
+ Pagination component for navigating through large datasets.
1023
+
1024
+ ```typescript
1025
+ <dees-pagination
1026
+ totalItems={500}
1027
+ itemsPerPage={20}
1028
+ currentPage={1}
1029
+ maxVisiblePages={7} // Maximum page numbers to display
1030
+ @page-change=${handlePageChange}
1031
+ ></dees-pagination>
1032
+ ```
1033
+
1034
+ ### Visualization Components
1035
+
1036
+ #### `DeesChartArea`
1037
+ Area chart component built on ApexCharts for visualizing time-series data.
1038
+
1039
+ ```typescript
1040
+ <dees-chart-area
1041
+ label="System Usage" // Chart title
1042
+ .series=${[
1043
+ {
1044
+ name: 'CPU',
1045
+ data: [
1046
+ { x: '2025-01-15T03:00:00', y: 25 },
1047
+ { x: '2025-01-15T07:00:00', y: 30 },
1048
+ { x: '2025-01-15T11:00:00', y: 20 }
1049
+ ]
1050
+ },
1051
+ {
1052
+ name: 'Memory',
1053
+ data: [
1054
+ { x: '2025-01-15T03:00:00', y: 10 },
1055
+ { x: '2025-01-15T07:00:00', y: 12 },
1056
+ { x: '2025-01-15T11:00:00', y: 10 }
1057
+ ]
1058
+ }
1059
+ ]}
1060
+ ></dees-chart-area>
1061
+ ```
1062
+
1063
+ #### `DeesChartLog`
1064
+ Specialized chart component for visualizing log data and events.
244
1065
 
245
- #### Modal Dialogs
246
1066
  ```typescript
1067
+ <dees-chart-log
1068
+ label="System Events"
1069
+ .data=${[
1070
+ {
1071
+ timestamp: '2025-01-15T03:00:00',
1072
+ event: 'Server Start',
1073
+ type: 'info'
1074
+ },
1075
+ {
1076
+ timestamp: '2025-01-15T03:15:00',
1077
+ event: 'Error Detected',
1078
+ type: 'error'
1079
+ }
1080
+ ]}
1081
+ .filters=${['info', 'warning', 'error']} // Event types to display
1082
+ @event-click=${handleEventClick}
1083
+ ></dees-chart-log>
1084
+ ```
1085
+
1086
+ ### Dialogs & Overlays Components
1087
+
1088
+ #### `DeesModal`
1089
+ Modal dialog component with customizable content and actions.
1090
+
1091
+ ```typescript
1092
+ // Programmatic usage
247
1093
  DeesModal.createAndShow({
248
1094
  heading: 'Confirm Action',
249
1095
  content: html`
250
- <p>Are you sure you want to proceed?</p>
1096
+ <dees-form>
1097
+ <dees-input-text
1098
+ .label=${'Enter reason'}
1099
+ ></dees-input-text>
1100
+ </dees-form>
251
1101
  `,
252
1102
  menuOptions: [
253
1103
  {
254
1104
  name: 'Cancel',
255
- action: async (modal) => modal.destroy()
1105
+ action: async (modal) => {
1106
+ modal.destroy();
1107
+ return null;
1108
+ }
256
1109
  },
257
1110
  {
258
1111
  name: 'Confirm',
259
1112
  action: async (modal) => {
260
- await performAction();
1113
+ // Handle confirmation
261
1114
  modal.destroy();
1115
+ return null;
262
1116
  }
263
1117
  }
264
1118
  ]
265
1119
  });
266
- ```
267
1120
 
268
- ## 🎨 Theme System
1121
+ // Component usage
1122
+ <dees-modal
1123
+ heading="Settings"
1124
+ .content=${settingsContent}
1125
+ .menuOptions=${actions}
1126
+ ></dees-modal>
1127
+ ```
269
1128
 
270
- All components support automatic theme switching:
1129
+ #### `DeesContextmenu`
1130
+ Context menu component for right-click actions.
271
1131
 
272
1132
  ```typescript
273
- // Components automatically adapt to light/dark themes
274
- // Use the cssManager for theme-aware colors
275
- import { cssManager } from '@design.estate/dees-catalog';
276
-
277
- css`
278
- .my-element {
279
- background: ${cssManager.bdTheme('#fff', '#1a1a1a')};
280
- color: ${cssManager.bdTheme('#000', '#fff')};
281
- }
282
- `
1133
+ <dees-contextmenu
1134
+ .items=${[
1135
+ {
1136
+ label: 'Edit',
1137
+ icon: 'edit',
1138
+ action: () => handleEdit()
1139
+ },
1140
+ {
1141
+ label: 'Delete',
1142
+ icon: 'trash',
1143
+ action: () => handleDelete()
1144
+ }
1145
+ ]}
1146
+ position="right" // Options: right, left, auto
1147
+ @item-click=${handleMenuItemClick}
1148
+ ></dees-contextmenu>
283
1149
  ```
284
1150
 
285
- ## 🔧 Development
1151
+ #### `DeesSpeechbubble`
1152
+ Tooltip-style speech bubble component for contextual information.
1153
+
1154
+ ```typescript
1155
+ // Programmatic usage
1156
+ const bubble = await DeesSpeechbubble.createAndShow(
1157
+ referenceElement, // Element to attach to
1158
+ 'Helpful information about this feature'
1159
+ );
1160
+
1161
+ // Component usage
1162
+ <dees-speechbubble
1163
+ .reffedElement=${targetElement}
1164
+ text="Click here to continue"
1165
+ ></dees-speechbubble>
1166
+ ```
286
1167
 
287
- ### Prerequisites
288
- - Node.js 18+
289
- - pnpm (recommended) or npm
1168
+ #### `DeesWindowlayer`
1169
+ Base overlay component used by modal dialogs and other overlay components.
290
1170
 
291
- ### Setup
292
- ```bash
293
- # Clone the repository
294
- git clone https://github.com/design-estate/dees-catalog.git
1171
+ ```typescript
1172
+ // Programmatic usage
1173
+ const layer = await DeesWindowLayer.createAndShow({
1174
+ blur: true, // Enable backdrop blur
1175
+ });
295
1176
 
296
- # Install dependencies
297
- pnpm install
1177
+ // Component usage
1178
+ <dees-windowlayer
1179
+ .options=${{
1180
+ blur: true
1181
+ }}
1182
+ @clicked=${handleOverlayClick}
1183
+ >
1184
+ <div class="content">
1185
+ <!-- Overlay content -->
1186
+ </div>
1187
+ </dees-windowlayer>
1188
+ ```
298
1189
 
299
- # Build the project
300
- pnpm run build
1190
+ ### Navigation Components
301
1191
 
302
- # Run in development mode
303
- pnpm run watch
1192
+ #### `DeesStepper`
1193
+ Multi-step navigation component for guided user flows.
304
1194
 
305
- # Run tests
306
- pnpm test
1195
+ ```typescript
1196
+ <dees-stepper
1197
+ .steps=${[
1198
+ {
1199
+ key: 'personal',
1200
+ label: 'Personal Info',
1201
+ content: html`<div>Personal Information Form</div>`,
1202
+ validation: () => validatePersonalInfo()
1203
+ },
1204
+ {
1205
+ key: 'address',
1206
+ label: 'Address',
1207
+ content: html`<div>Address Form</div>`,
1208
+ validation: () => validateAddress()
1209
+ },
1210
+ {
1211
+ key: 'confirm',
1212
+ label: 'Confirmation',
1213
+ content: html`<div>Review and Confirm</div>`
1214
+ }
1215
+ ]}
1216
+ currentStep="personal"
1217
+ @step-change=${handleStepChange}
1218
+ @complete=${handleComplete}
1219
+ ></dees-stepper>
307
1220
  ```
308
1221
 
309
- ### Project Structure
310
- ```
311
- dees-catalog/
312
- ├── ts_web/
313
- │ ├── elements/ # All component implementations
314
- │ │ ├── dees-*.ts # Component files
315
- │ │ └── *.demo.ts # Component demos
316
- │ ├── pages/ # Demo showcase pages
317
- │ └── index.ts # Main exports
318
- ├── dist_ts_web/ # Built distribution files
319
- └── test/ # Test files
1222
+ #### `DeesProgressbar`
1223
+ Progress indicator component for tracking completion status.
1224
+
1225
+ ```typescript
1226
+ <dees-progressbar
1227
+ value={75} // Current progress (0-100)
1228
+ label="Uploading" // Optional label
1229
+ showPercentage // Display percentage
1230
+ type="determinate" // Options: determinate, indeterminate
1231
+ status="normal" // Options: normal, success, warning, error
1232
+ @progress=${handleProgress}
1233
+ ></dees-progressbar>
320
1234
  ```
321
1235
 
322
- ## 📚 Documentation
1236
+ ### Development Components
323
1237
 
324
- ### Component Demos
325
- Each component includes a built-in demo accessible via the static `.demo` property:
1238
+ #### `DeesEditor`
1239
+ Code editor component with syntax highlighting and code completion, powered by Monaco Editor.
326
1240
 
327
1241
  ```typescript
328
- import { DeesButton } from '@design.estate/dees-catalog';
1242
+ <dees-editor
1243
+ .value=${code}
1244
+ @change=${handleCodeChange}
1245
+ .language=${'typescript'}
1246
+ .theme=${'vs-dark'}
1247
+ .options=${{
1248
+ lineNumbers: true,
1249
+ minimap: { enabled: true },
1250
+ autoClosingBrackets: 'always'
1251
+ }}
1252
+ ></dees-editor>
1253
+ ```
1254
+
1255
+ #### `DeesEditorMarkdown`
1256
+ Markdown editor component with live preview.
329
1257
 
330
- // Access the component's demo
331
- const demoHTML = DeesButton.demo();
1258
+ ```typescript
1259
+ <dees-editor-markdown
1260
+ .value=${markdown}
1261
+ @change=${handleMarkdownChange}
1262
+ .options=${{
1263
+ preview: true,
1264
+ toolbar: true,
1265
+ spellcheck: true,
1266
+ autosave: true
1267
+ }}
1268
+ ></dees-editor-markdown>
332
1269
  ```
333
1270
 
334
- ### Interactive Playground
335
- For a complete interactive playground with all components:
1271
+ #### `DeesEditorMarkdownoutlet`
1272
+ Markdown preview component for rendering markdown content.
336
1273
 
337
- 1. Clone the repository
338
- 2. Run `pnpm install && pnpm run build`
339
- 3. Open the demo pages in `dist_ts_web/pages/`
1274
+ ```typescript
1275
+ <dees-editor-markdownoutlet
1276
+ .markdown=${markdownContent}
1277
+ .theme=${'github'} // Options: github, dark, custom
1278
+ .plugins=${['mermaid', 'highlight']} // Optional plugins
1279
+ allowHtml={false} // Security: disable raw HTML
1280
+ ></dees-editor-markdownoutlet>
1281
+ ```
340
1282
 
341
- ### TypeScript Support
342
- Full TypeScript definitions are included. Your IDE will provide:
343
- - 🔍 IntelliSense for all properties and methods
344
- - 📝 JSDoc comments with usage examples
345
- - ✅ Type checking for component properties
346
- - 🎯 Auto-imports and code completion
1283
+ #### `DeesTerminal`
1284
+ Terminal emulator component for command-line interface.
347
1285
 
348
- ## 🤝 Contributing
1286
+ ```typescript
1287
+ <dees-terminal
1288
+ .commands=${{
1289
+ 'echo': (args) => `Echo: ${args.join(' ')}`,
1290
+ 'help': () => 'Available commands: echo, help'
1291
+ }}
1292
+ .prompt=${'$'}
1293
+ .welcomeMessage=${'Welcome! Type "help" for available commands.'}
1294
+ .historySize=${100}
1295
+ .autoFocus={true}
1296
+ ></dees-terminal>
1297
+ ```
349
1298
 
350
- We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
1299
+ #### `DeesUpdater`
1300
+ Component for managing application updates and version control.
351
1301
 
352
- ### Development Workflow
353
- 1. Fork the repository
354
- 2. Create a feature branch: `git checkout -b feature/amazing-feature`
355
- 3. Make your changes and add tests
356
- 4. Ensure all tests pass: `pnpm test`
357
- 5. Commit with conventional commits: `git commit -m 'feat: add amazing feature'`
358
- 6. Push and create a Pull Request
1302
+ ```typescript
1303
+ <dees-updater
1304
+ .currentVersion=${'1.5.2'}
1305
+ .checkInterval=${3600000} // Check every hour
1306
+ .autoUpdate=${false}
1307
+ @update-available=${handleUpdateAvailable}
1308
+ @update-progress=${handleUpdateProgress}
1309
+ ></dees-updater>
1310
+ ```
359
1311
 
360
- ## 🐛 Troubleshooting
1312
+ ### Auth & Utilities Components
361
1313
 
362
- ### Common Issues
1314
+ #### `DeesSimpleAppdash`
1315
+ Simple application dashboard component for quick prototyping.
363
1316
 
364
- **Issue: Components not rendering**
365
1317
  ```typescript
366
- // Ensure you're importing from the correct path
367
- import '@design.estate/dees-catalog/dist_ts_web/elements/dees-button.js';
368
- // Or use the bundled version
369
- import '@design.estate/dees-catalog';
1318
+ <dees-simple-appdash
1319
+ .appTitle=${'My Application'}
1320
+ .menuItems=${[
1321
+ { name: 'Dashboard', icon: 'home', route: '/dashboard' },
1322
+ { name: 'Settings', icon: 'settings', route: '/settings' }
1323
+ ]}
1324
+ .user=${{
1325
+ name: 'John Doe',
1326
+ role: 'Administrator'
1327
+ }}
1328
+ @menu-select=${handleMenuSelect}
1329
+ >
1330
+ <!-- Dashboard content -->
1331
+ </dees-simple-appdash>
370
1332
  ```
371
1333
 
372
- **Issue: TypeScript errors**
1334
+ #### `DeesSimpleLogin`
1335
+ Simple login form component with validation and customization.
1336
+
373
1337
  ```typescript
374
- // Add to tsconfig.json
375
- {
376
- "compilerOptions": {
377
- "moduleResolution": "node",
378
- "experimentalDecorators": true,
379
- "allowSyntheticDefaultImports": true
380
- }
381
- }
1338
+ <dees-simple-login
1339
+ .appName=${'My Application'}
1340
+ .logo=${'./assets/logo.png'}
1341
+ .backgroundImage=${'./assets/background.jpg'}
1342
+ .fields=${['username', 'password']} // Options: username, email, password
1343
+ showForgotPassword
1344
+ showRememberMe
1345
+ @login=${handleLogin}
1346
+ @forgot-password=${handleForgotPassword}
1347
+ ></dees-simple-login>
382
1348
  ```
383
1349
 
384
- **Issue: Styles not applying**
385
- ```html
386
- <!-- Components use Shadow DOM, styles are encapsulated -->
387
- <!-- Use CSS custom properties for theming -->
388
- <style>
389
- dees-button {
390
- --button-background: #007bff;
391
- --button-color: white;
392
- }
393
- </style>
394
- ```
1350
+ ### Shopping Components
395
1351
 
396
- ## 🔗 Links & Resources
1352
+ #### `DeesShoppingProductcard`
1353
+ Product card component for e-commerce applications.
397
1354
 
398
- - 📖 [Full Documentation](https://design.estate/docs/dees-catalog)
399
- - 🎮 [Interactive Demo](https://design.estate/demo/dees-catalog)
400
- - 📦 [NPM Package](https://www.npmjs.com/package/@design.estate/dees-catalog)
401
- - 🐛 [Issue Tracker](https://github.com/design-estate/dees-catalog/issues)
402
- - 💬 [Discussions](https://github.com/design-estate/dees-catalog/discussions)
1355
+ ```typescript
1356
+ <dees-shopping-productcard
1357
+ .productData=${{
1358
+ name: 'Premium Headphones',
1359
+ category: 'Electronics',
1360
+ description: 'High-quality wireless headphones with noise cancellation',
1361
+ price: 199.99,
1362
+ originalPrice: 249.99, // Shows strikethrough price
1363
+ currency: '$',
1364
+ inStock: true,
1365
+ stockText: 'In Stock', // Custom stock text
1366
+ imageUrl: '/images/headphones.jpg',
1367
+ iconName: 'lucide:headphones' // Fallback icon if no image
1368
+ }}
1369
+ quantity={1} // Current quantity
1370
+ showQuantitySelector={true} // Show quantity selector
1371
+ selectable={false} // Enable selection mode
1372
+ selected={false} // Selection state
1373
+ @quantityChange=${(e) => handleQuantityChange(e.detail)}
1374
+ @selectionChange=${(e) => handleSelectionChange(e.detail)}
1375
+ ></dees-shopping-productcard>
1376
+ ```
403
1377
 
404
- ## 📄 License
1378
+ ## License and Legal Information
405
1379
 
406
- This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](./license) file within this repository.
1380
+ This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the license file within this repository.
407
1381
 
408
- **Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
1382
+ Please note: The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
409
1383
 
410
- ## ® Trademarks
1384
+ ### Trademarks
411
1385
 
412
- This project is owned and maintained by **Task Venture Capital GmbH**. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.
1386
+ This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.
413
1387
 
414
- ## 🏢 Company Information
1388
+ ### Company Information
415
1389
 
416
- **Task Venture Capital GmbH**
417
- Registered at District Court Bremen HRB 35230 HB, Germany
1390
+ Task Venture Capital GmbH
1391
+ Registered at District court Bremen HRB 35230 HB, Germany
418
1392
 
419
- For any legal inquiries or if you require further information, please contact us via email at **hello@task.vc**.
1393
+ For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
420
1394
 
421
1395
  By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
422
-
423
- ---
424
-
425
- <div align="center">
426
- <p>Built with ❤️ by <a href="https://task.vc">Task Venture Capital GmbH</a></p>
427
- <p>
428
- <a href="https://github.com/design-estate/dees-catalog/stargazers">⭐ Star us on GitHub</a> •
429
- <a href="https://twitter.com/taskventure">🐦 Follow on Twitter</a> •
430
- <a href="https://www.linkedin.com/company/task-venture-capital">💼 LinkedIn</a>
431
- </p>
432
- </div>