2025-09-17 20:48:18 +00:00
# @design.estate/dees-catalog
2024-12-09 19:14:21 +01:00
2025-12-29 01:20:24 +00:00
A comprehensive web components library built with TypeScript and LitElement, providing **75+ UI components ** for building modern web applications with consistent design and behavior. 🚀
[](https://www.typescriptlang.org/)
[](https://lit.dev/)
## Issue Reporting and Security
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/ ](https://community.foss.global/ ). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/ ](https://code.foss.global/ ) account to submit Pull Requests directly.
## ✨ Features
2025-07-04 18:42:53 +00:00
2025-12-29 01:20:24 +00:00
- 🎨 **Consistent Design System ** - Beautiful, cohesive components following modern UI/UX principles
- 🌙 **Dark/Light Theme Support ** - All components automatically adapt to your theme
- ⌨️ **Keyboard Accessible ** - Full keyboard navigation and ARIA support
- 📱 **Responsive ** - Mobile-first design that works across all screen sizes
- 🔧 **TypeScript-First ** - Fully typed APIs with excellent IDE support
- 🧩 **Modular ** - Use only what you need, tree-shakeable architecture
## 📦 Installation
2024-12-09 19:14:21 +01:00
```bash
npm install @design .estate/dees-catalog
2025-12-29 01:20:24 +00:00
# or
pnpm add @design .estate/dees-catalog
```
## 🚀 Quick Start
```typescript
import { html, DeesElement, customElement } from '@design .estate/dees-element';
import '@design .estate/dees-catalog';
@customElement ('my-app')
class MyApp extends DeesElement {
render() {
return html`
<dees-button type="highlighted" @click =${() => alert('Hello!')}>
Click me!
</dees-button>
`;
}
}
2025-09-17 20:48:18 +00:00
```
2025-12-29 01:20:24 +00:00
## 📖 Development Guide
For developers working on this library, please refer to the [UI Components Playbook ](readme.playbook.md ) for comprehensive patterns, best practices, and architectural guidelines.
## 📚 Components Overview
2025-09-17 20:48:18 +00:00
| Category | Components |
|----------|------------|
2025-12-29 01:20:24 +00:00
| **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 ) |
| **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 ) |
2026-01-02 21:40:49 +00:00
| **Layout ** | [`DeesAppui` ](#deesappui ), [`DeesAppuiMainmenu` ](#deesappuimainmenu ), [`DeesAppuiSecondarymenu` ](#deesappuisecondarymenu ), [`DeesAppuiMaincontent` ](#deesappuimaincontent ), [`DeesAppuiAppbar` ](#deesappuiappbar ), [`DeesAppuiActivitylog` ](#deesappuiactivitylog ), [`DeesAppuiProfiledropdown` ](#deesappuiprofiledropdown ), [`DeesAppuiTabs` ](#deesappuitabs ), [`DeesMobileNavigation` ](#deesmobilenavigation ), [`DeesDashboardGrid` ](#deesdashboardgrid ) |
2025-12-29 01:20:24 +00:00
| **Data Display ** | [`DeesTable` ](#deestable ), [`DeesDataviewCodebox` ](#deesdataviewcodebox ), [`DeesDataviewStatusobject` ](#deesdataviewstatusobject ), [`DeesPdf` ](#deespdf ), [`DeesStatsGrid` ](#deesstatsgrid ), [`DeesPagination` ](#deespagination ) |
| **Visualization ** | [`DeesChartArea` ](#deeschartarea ), [`DeesChartLog` ](#deeschartlog ) |
| **Dialogs & Overlays ** | [`DeesModal` ](#deesmodal ), [`DeesContextmenu` ](#deescontextmenu ), [`DeesSpeechbubble` ](#deesspeechbubble ), [`DeesWindowlayer` ](#deeswindowlayer ) |
| **Navigation ** | [`DeesStepper` ](#deesstepper ), [`DeesProgressbar` ](#deesprogressbar ) |
| **Development ** | [`DeesEditor` ](#deeseditor ), [`DeesEditorMarkdown` ](#deeseditormarkdown ), [`DeesEditorMarkdownoutlet` ](#deeseditormarkdownoutlet ), [`DeesTerminal` ](#deesterminal ), [`DeesUpdater` ](#deesupdater ) |
| **Auth & Utilities ** | [`DeesSimpleAppdash` ](#deessimpleappdash ), [`DeesSimpleLogin` ](#deessimplelogin ) |
| **Shopping ** | [`DeesShoppingProductcard` ](#deesshoppingproductcard ) |
---
## 🎯 Detailed Component Documentation
2025-09-17 20:48:18 +00:00
### Core UI Components
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
#### `DeesButton`
A versatile button component supporting multiple styles and states.
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
```typescript
// Basic usage
const button = document.createElement('dees-button');
button.text = 'Click me';
// With options
<dees-button
type="highlighted" // Options: normal, highlighted, discreet
status="pending" // Options: normal, pending, success, error
disabled={false} // Optional: disables the button
@click =${handleClick}
>Click me</dees-button>
2025-04-11 10:20:35 +00:00
```
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
#### `DeesBadge`
Display status indicators or counts with customizable styles.
2024-12-09 19:14:21 +01:00
2025-04-11 10:20:35 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-badge
type="success" // Options: default, primary, success, warning, error
text="New" // Text to display
rounded // Optional: applies rounded corners
></dees-badge>
```
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
#### `DeesChips`
Interactive chips/tags with selection capabilities.
```typescript
<dees-chips
selectionMode="multiple" // Options: none, single, multiple
chipsAreRemovable // Optional: allows removing chips
.selectableChips=${[
{ key: 'tag1', value: 'Important' },
{ key: 'tag2', value: 'Urgent' }
]}
@selection -change=${handleSelection}
></dees-chips>
2025-04-11 11:19:23 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesIcon`
Display icons from FontAwesome and Lucide icon libraries with library prefixes.
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
```typescript
// FontAwesome icons - use 'fa:' prefix
<dees-icon
icon="fa:check" // FontAwesome icon with fa: prefix
iconSize="24" // Size in pixels
color="#22c55e " // Optional: custom color
></dees-icon>
2025-12-29 01:20:24 +00:00
// Lucide icons - use 'lucide:' prefix
2025-09-17 20:48:18 +00:00
<dees-icon
icon="lucide:menu" // Lucide icon with lucide: prefix
iconSize="24" // Size in pixels
color="#007bff " // Optional: custom color
strokeWidth="2" // Optional: stroke width for Lucide icons
></dees-icon>
// Legacy API (deprecated but still supported)
<dees-icon
iconFA="check" // Without prefix - assumes FontAwesome
></dees-icon>
```
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesLabel`
Text label component with optional icon and status indicators.
2025-06-12 09:33:46 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-label
text="Status" // Label text
icon="info-circle" // Optional: icon name
type="info" // Options: default, info, success, warning, error
size="medium" // Options: small, medium, large
></dees-label>
```
2025-06-12 09:33:46 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesSpinner`
Loading indicator with customizable appearance.
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-spinner
size="medium" // Options: small, medium, large
type="primary" // Options: primary, secondary, light, dark
overlay // Optional: adds a full-screen overlay
></dees-spinner>
```
2025-06-12 09:33:46 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesToast`
Notification toast messages with various styles, positions, and auto-dismiss functionality.
2025-06-26 19:18:58 +00:00
```typescript
2025-09-17 20:48:18 +00:00
// Programmatic usage
DeesToast.show({
message: 'Operation successful',
type: 'success', // Options: info, success, warning, error
duration: 3000, // Time in milliseconds before auto-dismiss
position: 'top-right' // Options: top-right, top-left, bottom-right, bottom-left, top-center, bottom-center
});
// Convenience methods
DeesToast.info('Information message');
DeesToast.success('Success message');
DeesToast.warning('Warning message');
DeesToast.error('Error message');
// Advanced control
const toast = await DeesToast.show({
message: 'Processing...',
type: 'info',
duration: 0 // No auto-dismiss
});
// Later dismiss programmatically
toast.dismiss();
```
2025-12-29 01:20:24 +00:00
**Key Features:**
2025-09-17 20:48:18 +00:00
- Multiple toast types with distinct icons and colors
- 6 position options for flexible placement
- Auto-dismiss with visual progress indicator
- Manual dismiss by clicking
- Smooth animations and transitions
- Automatic stacking of multiple toasts
- Theme-aware styling
- Programmatic control
#### `DeesButtonExit`
Exit/close button component with consistent styling.
2025-06-26 19:18:58 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-button-exit
@click =${handleClose}
></dees-button-exit>
```
#### `DeesButtonGroup`
Container for grouping related buttons together.
```typescript
2025-06-26 19:18:58 +00:00
<dees-button-group
.buttons=${[
2025-09-17 20:48:18 +00:00
{ text: 'Save', type: 'highlighted', action: handleSave },
{ text: 'Cancel', type: 'normal', action: handleCancel }
2025-06-26 19:18:58 +00:00
]}
2025-09-17 20:48:18 +00:00
spacing="medium" // Options: small, medium, large
2025-06-26 19:18:58 +00:00
></dees-button-group>
```
2025-09-17 20:48:18 +00:00
#### `DeesHeading`
Consistent heading component with level and styling options.
2025-06-26 19:18:58 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-heading
level={1} // 1-6 for H1-H6
text="Page Title"
.subheading=${'Optional subtitle'}
centered // Optional: center alignment
></dees-heading>
```
2025-06-26 19:18:58 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesHint`
Hint/tooltip component for providing contextual help.
```typescript
<dees-hint
text="This field is required"
type="info" // Options: info, warning, error, success
position="top" // Options: top, bottom, left, right
></dees-hint>
2025-06-26 19:18:58 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesPanel`
Container component for grouping related content with optional title and actions.
2025-06-26 19:18:58 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-panel
.title=${'Panel Title'}
.subtitle=${'Optional subtitle'}
collapsible // Optional: allow collapse/expand
collapsed={false} // Initial collapsed state
.actions=${[
{ icon: 'settings', action: handleSettings }
]}
>
<!-- Panel content -->
</dees-panel>
```
2025-06-26 19:18:58 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesSearchbar`
Search input component with suggestions and search handling.
```typescript
<dees-searchbar
placeholder="Search..."
.suggestions=${['item1', 'item2', 'item3']}
showClearButton // Show clear button when has value
@search =${handleSearch}
@suggestion -select=${handleSuggestionSelect}
></dees-searchbar>
2025-06-26 19:18:58 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesWindowcontrols`
Window control buttons (minimize, maximize, close) for desktop-like applications.
```typescript
<dees-windowcontrols
.controls=${['minimize', 'maximize', 'close']}
@minimize =${handleMinimize}
@maximize =${handleMaximize}
@close =${handleClose}
></dees-windowcontrols>
```
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Form Components
#### `DeesForm`
Container component for form elements with built-in validation and data handling.
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-form
@formData =${(e) => handleFormData(e.detail)} // Emitted when form is submitted
@formValidation =${(e) => handleValidation(e.detail)} // Emitted during validation
>
<dees-input-text required></dees-input-text>
2025-04-11 10:20:35 +00:00
<dees-form-submit>Submit</dees-form-submit>
</dees-form>
2024-12-09 19:14:21 +01:00
```
2025-09-17 20:48:18 +00:00
#### `DeesInputText`
Text input field with validation and formatting options.
```typescript
<dees-input-text
key="email" // Unique identifier for form data
label="Email" // Input label
value="initial@value .com" // Initial value
required // Makes the field required
disabled // Disables the input
placeholder="Enter your email"
></dees-input-text>
```
#### `DeesInputCheckbox`
Checkbox input component for boolean values.
```typescript
<dees-input-checkbox
key="terms"
label="Accept Terms"
checked // Initial checked state
required
@change =${handleChange}
></dees-input-checkbox>
```
#### `DeesInputDropdown`
Dropdown selection component with search and filtering capabilities.
```typescript
<dees-input-dropdown
key="country"
label="Select Country"
.options=${[
{ key: 'us', option: 'United States' },
{ key: 'uk', option: 'United Kingdom' }
]}
searchable // Enables search functionality
multiple // Allows multiple selections
></dees-input-dropdown>
```
#### `DeesInputFileupload`
File upload component with drag-and-drop support.
```typescript
<dees-input-fileupload
key="documents"
label="Upload Files"
multiple // Allow multiple file selection
accept=".pdf,.doc" // Accepted file types
maxSize="5MB" // Maximum file size
@upload =${handleUpload}
></dees-input-fileupload>
```
#### `DeesInputIban`
Specialized input for IBAN (International Bank Account Number) with validation.
```typescript
<dees-input-iban
key="bankAccount"
label="IBAN"
country="DE" // Default country format
required
@validate =${handleIbanValidation}
></dees-input-iban>
```
#### `DeesInputPhone`
Phone number input with country code selection and formatting.
```typescript
<dees-input-phone
key="phone"
label="Phone Number"
defaultCountry="US" // Default country code
required
@validate =${handlePhoneValidation}
></dees-input-phone>
```
#### `DeesInputQuantitySelector`
Numeric input with increment/decrement controls.
```typescript
<dees-input-quantity-selector
key="quantity"
label="Quantity"
min="0" // Minimum value
max="100" // Maximum value
step="1" // Increment/decrement step
value="1" // Initial value
></dees-input-quantity-selector>
```
#### `DeesInputMultitoggle`
Multi-state toggle button group.
```typescript
<dees-input-multitoggle
key="status"
label="Status"
.options=${[
{ key: 'active', label: 'Active' },
{ key: 'pending', label: 'Pending' },
{ key: 'inactive', label: 'Inactive' }
]}
value="active" // Initial selected value
></dees-input-multitoggle>
```
#### `DeesInputRadiogroup`
Radio button group for single-choice selections with internal state management.
```typescript
<dees-input-radiogroup
key="plan"
label="Select Plan"
.options=${['Free', 'Pro', 'Enterprise']}
selectedOption="Pro"
required
@change =${handlePlanChange}
></dees-input-radiogroup>
// With custom option objects
<dees-input-radiogroup
key="priority"
label="Priority Level"
.options=${[
{ key: 'low', label: 'Low Priority' },
{ key: 'medium', label: 'Medium Priority' },
{ key: 'high', label: 'High Priority' }
]}
selectedOption="medium"
></dees-input-radiogroup>
```
#### `DeesInputTags`
Tag input component for managing lists of tags with auto-complete and validation.
```typescript
<dees-input-tags
key="skills"
label="Skills"
.value=${['JavaScript', 'TypeScript', 'CSS']}
placeholder="Add a skill..."
.suggestions=${[
'JavaScript', 'TypeScript', 'Python', 'Go', 'Rust',
'React', 'Vue', 'Angular', 'Node.js', 'Docker'
]}
maxTags={10} // Optional: limit number of tags
required
@change =${handleTagsChange}
></dees-input-tags>
```
2025-12-29 01:20:24 +00:00
**Key Features:**
2025-09-17 20:48:18 +00:00
- Add tags by pressing Enter or typing comma/semicolon
- Remove tags with click or backspace
- Auto-complete suggestions with keyboard navigation
- Maximum tag limit support
- Full theme support
- Form validation integration
#### `DeesInputTypelist`
Dynamic list input for managing arrays of typed values.
```typescript
<dees-input-typelist
key="features"
label="Product Features"
placeholder="Add a feature..."
.value=${['Feature 1', 'Feature 2']}
@change =${handleFeaturesChange}
></dees-input-typelist>
```
#### `DeesInputDatepicker`
Date and time picker component with calendar interface and manual typing support.
```typescript
<dees-input-datepicker
key="eventDate"
label="Event Date"
placeholder="YYYY-MM-DD"
value="2025-01-15T14:30:00Z" // ISO string format
dateFormat="YYYY-MM-DD" // Display format (default: YYYY-MM-DD)
enableTime={true} // Enable time selection
timeFormat="24h" // Options: 24h, 12h
minuteIncrement={15} // Time step in minutes
minDate="2025-01-01" // Minimum selectable date
maxDate="2025-12-31" // Maximum selectable date
.disabledDates=${[ // Array of disabled dates
2025-12-29 01:20:24 +00:00
'2025-01-10',
2025-09-17 20:48:18 +00:00
'2025-01-11'
]}
weekStartsOn={1} // 0 = Sunday, 1 = Monday
required
@change =${handleDateChange}
></dees-input-datepicker>
```
2025-12-29 01:20:24 +00:00
**Key Features:**
2025-09-17 20:48:18 +00:00
- Interactive calendar popup
- Manual date typing with multiple formats
- Optional time selection
- Configurable date format
- Min/max date constraints
- Disable specific dates
- Keyboard navigation
- Today button
- Clear functionality
- 12/24 hour time formats
- Theme-aware styling
- Live parsing and validation
2025-12-29 01:20:24 +00:00
**Manual Input Formats:**
2025-09-17 20:48:18 +00:00
```typescript
// Date formats supported
"2023-12-20" // ISO format (YYYY-MM-DD)
"20.12.2023" // European format (DD.MM.YYYY)
"12/20/2023" // US format (MM/DD/YYYY)
// Date with time (add space and time after any date format)
"2023-12-20 14:30"
"20.12.2023 9:45"
"12/20/2023 16:00"
```
#### `DeesInputSearchselect`
Search-enabled dropdown selection component.
```typescript
<dees-input-searchselect
key="category"
label="Select Category"
placeholder="Search categories..."
.options=${[
{ key: 'tech', label: 'Technology' },
{ key: 'health', label: 'Healthcare' },
{ key: 'finance', label: 'Finance' }
]}
required
@change =${handleCategoryChange}
></dees-input-searchselect>
```
#### `DeesInputRichtext`
Rich text editor with formatting toolbar powered by TipTap.
```typescript
<dees-input-richtext
key="content"
label="Article Content"
.value=${htmlContent}
placeholder="Start writing..."
minHeight={300} // Minimum editor height
showWordCount={true} // Show word/character count
@change =${handleContentChange}
></dees-input-richtext>
```
2025-12-29 01:20:24 +00:00
**Key Features:**
2025-09-17 20:48:18 +00:00
- Full formatting toolbar (bold, italic, underline, strike, etc.)
- Heading levels (H1-H6)
- Lists (bullet, ordered)
- Links with URL editing
- Code blocks and inline code
- Blockquotes
- Horizontal rules
- Undo/redo support
- Word and character count
- HTML output
#### `DeesInputWysiwyg`
Advanced block-based editor with slash commands and rich content blocks.
```typescript
<dees-input-wysiwyg
key="document"
label="Document Editor"
.value=${documentContent}
outputFormat="html" // Options: html, markdown, json
@change =${handleDocumentChange}
></dees-input-wysiwyg>
```
2025-12-29 01:20:24 +00:00
**Key Features:**
2025-09-17 20:48:18 +00:00
- Slash commands for quick formatting
- Block-based editing (paragraphs, headings, lists, etc.)
- Drag and drop block reordering
- Multiple output formats
- Keyboard shortcuts
- Collaborative editing ready
- Extensible block types
#### `DeesFormSubmit`
Submit button component specifically designed for `DeesForm` .
```typescript
<dees-form-submit
disabled // Optional: disable submit button
status="normal" // Options: normal, pending, success, error
>Submit Form</dees-form-submit>
```
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Layout Components
2026-01-02 21:40:49 +00:00
#### `DeesAppui`
2025-12-19 13:54:37 +00:00
A comprehensive application shell component providing a complete UI framework with navigation, menus, activity logging, and view management.
2026-01-02 21:40:49 +00:00
> **Full API Documentation**: See [ts_web/elements/00group-appui/dees-appui/readme.md](./ts_web/elements/00group-appui/dees-appui/readme.md) for complete documentation including all programmatic APIs, view lifecycle hooks, and TypeScript interfaces.
2025-12-19 13:54:37 +00:00
**Quick Start:**
```typescript
import { html, DeesElement, customElement } from '@design .estate/dees-element';
2026-01-02 21:40:49 +00:00
import { DeesAppui } from '@design .estate/dees-catalog';
2025-12-19 13:54:37 +00:00
@customElement ('my-app')
class MyApp extends DeesElement {
2026-01-02 21:40:49 +00:00
private appui: DeesAppui;
2025-12-19 13:54:37 +00:00
async firstUpdated() {
2026-01-02 21:40:49 +00:00
this.appui = this.shadowRoot.querySelector('dees-appui');
2025-12-19 13:54:37 +00:00
// Configure with views and menu
this.appui.configure({
branding: { logoIcon: 'lucide:box', logoText: 'My App' },
views: [
{ id: 'dashboard', name: 'Dashboard', iconName: 'lucide:home', content: 'my-dashboard' },
{ id: 'settings', name: 'Settings', iconName: 'lucide:settings', content: 'my-settings' },
],
mainMenu: {
sections: [{ name: 'Main', views: ['dashboard', 'settings'] }]
},
defaultView: 'dashboard'
});
}
render() {
2026-01-02 21:40:49 +00:00
return html`<dees-appui></dees-appui>` ;
2025-12-19 13:54:37 +00:00
}
}
```
**Key Features:**
- **Configure API**: Single `configure()` method for complete app setup
- **View Management**: Automatic view caching, lazy loading, and lifecycle hooks
- **Programmatic APIs**: Full control over AppBar, Main Menu, Secondary Menu, Content Tabs, and Activity Log
- **View Lifecycle Hooks**: `onActivate()` , `onDeactivate()` , and `canDeactivate()` for view components
- **Hash-based Routing**: Automatic URL synchronization with view navigation
- **RxJS Observables**: `viewChanged$` and `viewLifecycle$` for reactive programming
- **TypeScript-first**: Typed `IViewActivationContext` passed to views on activation
**Programmatic APIs include:**
- `navigateToView(viewId, params?)` - Navigate between views
- `setAppBarMenus()` , `setBreadcrumbs()` , `setUser()` - Control the app bar
- `setMainMenu()` , `setMainMenuSelection()` , `setMainMenuBadge()` - Control main navigation
2025-12-29 03:04:39 +00:00
- `setMainMenuCollapsed()` , `setMainMenuVisible()` - Control main menu visibility
- `setSecondaryMenu()` , `setSecondaryMenuCollapsed()` , `setSecondaryMenuVisible()` - Control secondary menu
- `setContentTabs()` , `setContentTabsVisible()` - Control view-specific UI
2025-12-19 13:54:37 +00:00
- `activityLog.add()` , `activityLog.addMany()` , `activityLog.clear()` - Manage activity entries
2025-09-17 20:48:18 +00:00
2025-12-29 03:04:39 +00:00
**View Visibility Control:**
```typescript
// In your view's onActivate hook
onActivate(context: IViewActivationContext) {
// Hide secondary menu for a fullscreen view
context.appui.setSecondaryMenuVisible(false);
// Hide content tabs
context.appui.setContentTabsVisible(false);
// Collapse main menu to give more space
context.appui.setMainMenuCollapsed(true);
}
```
2025-09-17 20:48:18 +00:00
#### `DeesAppuiMainmenu`
Main navigation menu component for application-wide navigation.
2025-06-30 10:53:22 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-appui-mainmenu
2025-12-29 01:20:24 +00:00
.menuGroups=${[
2025-06-30 10:53:22 +00:00
{
2025-12-29 01:20:24 +00:00
name: 'Main',
items: [
{ key: 'dashboard', iconName: 'lucide:home', action: () => navigate('dashboard') },
{ key: 'settings', iconName: 'lucide:settings', action: () => navigate('settings') }
]
2025-09-17 20:48:18 +00:00
}
]}
collapsed // Optional: show collapsed version
></dees-appui-mainmenu>
```
2025-12-29 01:20:24 +00:00
#### `DeesAppuiSecondarymenu`
Secondary navigation component for sub-section selection with collapsible groups and badges.
2025-09-17 20:48:18 +00:00
```typescript
2025-12-29 01:20:24 +00:00
<dees-appui-secondarymenu
.heading=${'Projects'}
.groups=${[
2025-09-17 20:48:18 +00:00
{
2025-12-29 01:20:24 +00:00
name: 'Active',
iconName: 'lucide:folder',
items: [
{ key: 'Frontend App', iconName: 'lucide:code', action: () => select('frontend'), badge: 3, badgeVariant: 'warning' },
{ key: 'API Server', iconName: 'lucide:server', action: () => select('api') }
]
2025-06-30 10:53:22 +00:00
}
]}
2025-12-29 01:20:24 +00:00
@item -select=${handleSectionChange}
></dees-appui-secondarymenu>
2025-06-30 10:53:22 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesAppuiMaincontent`
Main content area with tab management support.
```typescript
<dees-appui-maincontent
.tabs=${[
2025-12-29 01:20:24 +00:00
{ key: 'Overview', iconName: 'lucide:home', action: () => selectTab('overview') },
{ key: 'Details', iconName: 'lucide:info', action: () => selectTab('details') }
2025-09-17 20:48:18 +00:00
]}
2025-12-29 01:20:24 +00:00
@tab -select=${handleTabChange}
>
<!-- Content goes here -->
</dees-appui-maincontent>
2025-09-17 20:48:18 +00:00
```
#### `DeesAppuiAppbar`
Professional application bar component with hierarchical menus, breadcrumb navigation, and user account management.
```typescript
<dees-appui-appbar
.menuItems=${[
{
name: 'File',
action: async () => {}, // No-op for parent menu items
submenu: [
2025-12-29 01:20:24 +00:00
{
name: 'New File',
shortcut: 'Cmd+N',
iconName: 'file-plus',
action: async () => handleNewFile()
2025-09-17 20:48:18 +00:00
},
2025-12-29 01:20:24 +00:00
{
name: 'Open...',
shortcut: 'Cmd+O',
iconName: 'folder-open',
action: async () => handleOpen()
2025-09-17 20:48:18 +00:00
},
{ divider: true }, // Menu separator
2025-12-29 01:20:24 +00:00
{
name: 'Save',
shortcut: 'Cmd+S',
iconName: 'save',
2025-09-17 20:48:18 +00:00
action: async () => handleSave(),
disabled: true // Disabled state
}
]
}
]}
2025-12-29 01:20:24 +00:00
.breadcrumbs=${'Project > src > components'}
2025-09-17 20:48:18 +00:00
.showWindowControls=${true}
.showSearch=${true}
.user=${{
name: 'John Doe',
2025-12-29 01:20:24 +00:00
avatar: '/path/to/avatar.jpg',
2025-09-17 20:48:18 +00:00
status: 'online' // Options: 'online' | 'offline' | 'busy' | 'away'
}}
@menu -select=${(e) => handleMenuSelect(e.detail.item)}
@breadcrumb -navigate=${(e) => handleBreadcrumbClick(e.detail)}
></dees-appui-appbar>
```
2025-12-29 01:20:24 +00:00
**Key Features:**
- **Hierarchical Menu System** - Top-level menus with dropdown submenus, icons, and keyboard shortcuts
- **Keyboard Navigation** - Full keyboard support (Tab, Arrow keys, Enter, Escape)
- **Breadcrumb Navigation** - Customizable breadcrumb trail with click events
- **User Account Section** - Avatar with status indicator
- **Accessibility** - Full ARIA support with menubar roles
#### `DeesAppuiTabs`
Reusable tab component with horizontal/vertical layout support.
```typescript
<dees-appui-tabs
.tabs=${[
{ key: 'Home', iconName: 'lucide:home', action: () => console.log('Home') },
{ key: 'Settings', iconName: 'lucide:settings', action: () => console.log('Settings') }
]}
tabStyle="horizontal" // Options: horizontal, vertical
showTabIndicator={true}
@tab -select=${handleTabSelect}
></dees-appui-tabs>
```
---
2025-09-17 20:48:18 +00:00
### Data Display Components
#### `DeesTable`
Advanced table component with sorting, filtering, and action support.
2024-12-09 19:14:21 +01:00
2025-04-11 10:20:35 +00:00
```typescript
<dees-table
2025-09-17 20:48:18 +00:00
.data=${tableData}
.displayFunction=${(item) => ({
name: item.name,
date: item.date,
amount: item.amount,
description: item.description
2025-04-11 11:19:23 +00:00
})}
.dataActions=${[
2025-09-17 20:48:18 +00:00
{
name: 'Edit',
icon: 'edit',
action: (item) => handleEdit(item)
},
{
name: 'Delete',
icon: 'trash',
action: (item) => handleDelete(item)
}
2025-04-11 10:20:35 +00:00
]}
2025-09-17 20:48:18 +00:00
heading1="Transactions"
heading2="Recent Activity"
searchable // Enable search functionality
dataName="transaction" // Name for single data item
@selection -change=${handleSelectionChange}
2025-04-11 10:20:35 +00:00
></dees-table>
2024-12-09 19:14:21 +01:00
```
2025-12-29 01:20:24 +00:00
**Advanced Features:**
2025-09-17 20:48:18 +00:00
- Schema-first columns or `displayFunction` rendering
- Sorting via header clicks with `aria-sort` + `sortChange`
- Global search with Lucene-like syntax; modes: `table` , `data` , `server`
- Per-column quick filters row; `showColumnFilters` and `column.filterable=false`
- Selection: `none` | `single` | `multi` , with select-all and `selectionChange`
- Sticky header + internal scroll (`stickyHeader` , `--table-max-height` )
- Rich actions: header/in-row/contextmenu/footer/doubleClick; pinned Actions column
- Editable cells via `editableFields`
- Drag & drop files onto rows
#### `DeesDataviewCodebox`
Code display component with syntax highlighting and line numbers.
```typescript
<dees-dataview-codebox
progLang="typescript" // Programming language for syntax highlighting
.codeToDisplay=${`
import { html } from '@design .estate/dees-element';
2025-12-29 01:20:24 +00:00
2025-09-17 20:48:18 +00:00
export const myComponent = () => {
2025-12-29 01:20:24 +00:00
return html\`<div>Hello World</div>\`;
2025-09-17 20:48:18 +00:00
};
`}
></dees-dataview-codebox>
```
#### `DeesDataviewStatusobject`
Status display component for complex objects with nested status indicators.
```typescript
<dees-dataview-statusobject
.statusObject=${{
id: '1',
name: 'System Status',
combinedStatus: 'partly_ok',
combinedStatusText: 'Partially OK',
details: [
2025-12-29 01:20:24 +00:00
{ name: 'Database', value: 'Connected', status: 'ok', statusText: 'OK' },
{ name: 'API Service', value: 'Degraded', status: 'partly_ok', statusText: 'Partially OK' }
2025-09-17 20:48:18 +00:00
]
}}
></dees-dataview-statusobject>
```
#### `DeesPdf`
PDF viewer component with navigation and zoom controls.
```typescript
<dees-pdf
source="path/to/document.pdf" // URL or base64 encoded PDF
page={1} // Current page number
scale={1.0} // Zoom level
2025-12-29 01:20:24 +00:00
.controls=${['zoom', 'download', 'print', 'navigation']}
2025-09-17 20:48:18 +00:00
@page -change=${handlePageChange}
></dees-pdf>
```
#### `DeesStatsGrid`
2025-12-29 01:20:24 +00:00
A responsive grid component for displaying statistical data with various visualization types.
2025-09-17 20:48:18 +00:00
2025-06-10 18:58:05 +00:00
```typescript
<dees-statsgrid
.tiles=${[
{
2025-09-17 20:48:18 +00:00
id: 'revenue',
title: 'Total Revenue',
2025-06-10 18:58:05 +00:00
value: 125420,
unit: '$',
type: 'number',
2025-09-17 20:48:18 +00:00
icon: 'faDollarSign',
description: '+12.5% from last month',
2025-12-29 01:20:24 +00:00
color: '#22c55e '
2025-06-10 18:58:05 +00:00
},
{
2025-09-17 20:48:18 +00:00
id: 'cpu',
2025-06-10 18:58:05 +00:00
title: 'CPU Usage',
value: 73,
type: 'gauge',
2025-09-17 20:48:18 +00:00
icon: 'faMicrochip',
2025-06-10 18:58:05 +00:00
gaugeOptions: {
2025-12-29 01:20:24 +00:00
min: 0, max: 100,
2025-06-10 18:58:05 +00:00
thresholds: [
{ value: 0, color: '#22c55e ' },
2025-09-17 20:48:18 +00:00
{ value: 60, color: '#f59e0b ' },
2025-06-10 18:58:05 +00:00
{ value: 80, color: '#ef4444 ' }
]
}
2025-09-17 20:48:18 +00:00
},
{
id: 'requests',
title: 'API Requests',
value: '1.2k',
unit: '/min',
type: 'trend',
icon: 'faServer',
trendData: [45, 52, 38, 65, 72, 68, 75, 82, 79, 85, 88, 92]
}
]}
2025-12-29 01:20:24 +00:00
.minTileWidth=${250}
.gap=${16}
2025-06-10 18:58:05 +00:00
></dees-statsgrid>
```
2025-09-17 20:48:18 +00:00
#### `DeesPagination`
Pagination component for navigating through large datasets.
```typescript
<dees-pagination
totalItems={500}
itemsPerPage={20}
currentPage={1}
2025-12-29 01:20:24 +00:00
maxVisiblePages={7}
2025-09-17 20:48:18 +00:00
@page -change=${handlePageChange}
></dees-pagination>
```
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Visualization Components
#### `DeesChartArea`
Area chart component built on ApexCharts for visualizing time-series data.
```typescript
<dees-chart-area
2025-12-29 01:20:24 +00:00
label="System Usage"
2025-09-17 20:48:18 +00:00
.series=${[
{
name: 'CPU',
data: [
{ x: '2025-01-15T03:00:00', y: 25 },
{ x: '2025-01-15T07:00:00', y: 30 },
{ x: '2025-01-15T11:00:00', y: 20 }
]
}
]}
></dees-chart-area>
```
#### `DeesChartLog`
Specialized chart component for visualizing log data and events.
2024-12-09 19:14:21 +01:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-chart-log
label="System Events"
.data=${[
2025-12-29 01:20:24 +00:00
{ timestamp: '2025-01-15T03:00:00', event: 'Server Start', type: 'info' },
{ timestamp: '2025-01-15T03:15:00', event: 'Error Detected', type: 'error' }
2025-09-17 20:48:18 +00:00
]}
2025-12-29 01:20:24 +00:00
.filters=${['info', 'warning', 'error']}
2025-09-17 20:48:18 +00:00
@event -click=${handleEventClick}
></dees-chart-log>
```
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Dialogs & Overlays Components
#### `DeesModal`
Modal dialog component with customizable content and actions.
```typescript
// Programmatic usage
2025-04-11 10:20:35 +00:00
DeesModal.createAndShow({
heading: 'Confirm Action',
2025-04-11 11:19:23 +00:00
content: html`
2025-09-17 20:48:18 +00:00
<dees-form>
2025-12-29 01:20:24 +00:00
<dees-input-text .label=${'Enter reason'}></dees-input-text>
2025-09-17 20:48:18 +00:00
</dees-form>
2025-04-11 11:19:23 +00:00
`,
2025-04-11 10:20:35 +00:00
menuOptions: [
2025-12-29 01:20:24 +00:00
{ name: 'Cancel', action: async (modal) => { modal.destroy(); return null; } },
{ name: 'Confirm', action: async (modal) => { /* handle */ modal.destroy(); return null; } }
2025-04-11 10:20:35 +00:00
]
});
2025-09-17 20:48:18 +00:00
```
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesContextmenu`
Context menu component for right-click actions.
2025-04-11 11:19:23 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-contextmenu
.items=${[
2025-12-29 01:20:24 +00:00
{ label: 'Edit', icon: 'edit', action: () => handleEdit() },
{ label: 'Delete', icon: 'trash', action: () => handleDelete() }
2025-09-17 20:48:18 +00:00
]}
2025-12-29 01:20:24 +00:00
position="right"
2025-09-17 20:48:18 +00:00
></dees-contextmenu>
2025-04-11 11:19:23 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesSpeechbubble`
Tooltip-style speech bubble component for contextual information.
```typescript
// Programmatic usage
const bubble = await DeesSpeechbubble.createAndShow(
2025-12-29 01:20:24 +00:00
referenceElement,
2025-09-17 20:48:18 +00:00
'Helpful information about this feature'
);
```
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesWindowlayer`
Base overlay component used by modal dialogs and other overlay components.
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
```typescript
const layer = await DeesWindowLayer.createAndShow({
2025-12-29 01:20:24 +00:00
blur: true,
2025-09-17 20:48:18 +00:00
});
```
2025-04-11 11:19:23 +00:00
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Navigation Components
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesStepper`
Multi-step navigation component for guided user flows.
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-stepper
.steps=${[
2025-12-29 01:20:24 +00:00
{ key: 'personal', label: 'Personal Info', content: html`<div>Form 1</div>` },
{ key: 'address', label: 'Address', content: html`<div>Form 2</div>` },
{ key: 'confirm', label: 'Confirmation', content: html`<div>Review</div>` }
2025-09-17 20:48:18 +00:00
]}
currentStep="personal"
@step -change=${handleStepChange}
@complete =${handleComplete}
></dees-stepper>
2025-04-11 11:19:23 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesProgressbar`
Progress indicator component for tracking completion status.
```typescript
<dees-progressbar
2025-12-29 01:20:24 +00:00
value={75}
label="Uploading"
showPercentage
2025-09-17 20:48:18 +00:00
type="determinate" // Options: determinate, indeterminate
status="normal" // Options: normal, success, warning, error
></dees-progressbar>
2025-04-11 11:19:23 +00:00
```
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Development Components
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesEditor`
Code editor component with syntax highlighting and code completion, powered by Monaco Editor.
2025-06-26 19:18:58 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-editor
.value=${code}
@change =${handleCodeChange}
.language=${'typescript'}
.theme=${'vs-dark'}
.options=${{
lineNumbers: true,
minimap: { enabled: true },
autoClosingBrackets: 'always'
}}
></dees-editor>
```
#### `DeesEditorMarkdown`
Markdown editor component with live preview.
2025-06-26 19:18:58 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-editor-markdown
.value=${markdown}
@change =${handleMarkdownChange}
2025-12-29 01:20:24 +00:00
.options=${{ preview: true, toolbar: true, spellcheck: true }}
2025-09-17 20:48:18 +00:00
></dees-editor-markdown>
2025-04-11 11:19:23 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesEditorMarkdownoutlet`
Markdown preview component for rendering markdown content.
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-editor-markdownoutlet
.markdown=${markdownContent}
2025-12-29 01:20:24 +00:00
.theme=${'github'}
allowHtml={false}
2025-09-17 20:48:18 +00:00
></dees-editor-markdownoutlet>
```
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
#### `DeesTerminal`
Terminal emulator component for command-line interface.
2024-12-09 19:14:21 +01:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-terminal
.commands=${{
'echo': (args) => `Echo: ${args.join(' ')}` ,
'help': () => 'Available commands: echo, help'
}}
.prompt=${'$'}
.welcomeMessage=${'Welcome! Type "help" for available commands.'}
></dees-terminal>
```
2025-04-11 11:19:23 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesUpdater`
Component for managing application updates and version control.
2020-05-10 23:19:31 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-updater
.currentVersion=${'1.5.2'}
2025-12-29 01:20:24 +00:00
.checkInterval=${3600000}
2025-09-17 20:48:18 +00:00
.autoUpdate=${false}
@update -available=${handleUpdateAvailable}
></dees-updater>
```
2020-05-10 23:19:31 +00:00
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Auth & Utilities Components
2025-06-26 19:18:58 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesSimpleAppdash`
Simple application dashboard component for quick prototyping.
2025-06-26 19:18:58 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-simple-appdash
.appTitle=${'My Application'}
.menuItems=${[
{ name: 'Dashboard', icon: 'home', route: '/dashboard' },
{ name: 'Settings', icon: 'settings', route: '/settings' }
]}
2025-12-29 01:20:24 +00:00
.user=${{ name: 'John Doe', role: 'Administrator' }}
2025-09-17 20:48:18 +00:00
@menu -select=${handleMenuSelect}
>
<!-- Dashboard content -->
</dees-simple-appdash>
2025-06-26 19:18:58 +00:00
```
2025-09-17 20:48:18 +00:00
#### `DeesSimpleLogin`
Simple login form component with validation and customization.
2025-06-26 19:18:58 +00:00
```typescript
2025-09-17 20:48:18 +00:00
<dees-simple-login
.appName=${'My Application'}
.logo=${'./assets/logo.png'}
.backgroundImage=${'./assets/background.jpg'}
2025-12-29 01:20:24 +00:00
.fields=${['username', 'password']}
2025-09-17 20:48:18 +00:00
showForgotPassword
showRememberMe
@login =${handleLogin}
@forgot -password=${handleForgotPassword}
></dees-simple-login>
2025-06-26 19:18:58 +00:00
```
2025-12-29 01:20:24 +00:00
---
2025-09-17 20:48:18 +00:00
### Shopping Components
2025-06-30 10:53:22 +00:00
2025-09-17 20:48:18 +00:00
#### `DeesShoppingProductcard`
Product card component for e-commerce applications.
2025-06-30 10:53:22 +00:00
2025-09-17 20:48:18 +00:00
```typescript
<dees-shopping-productcard
.productData=${{
name: 'Premium Headphones',
category: 'Electronics',
description: 'High-quality wireless headphones with noise cancellation',
price: 199.99,
2025-12-29 01:20:24 +00:00
originalPrice: 249.99,
2025-09-17 20:48:18 +00:00
currency: '$',
inStock: true,
2025-12-29 01:20:24 +00:00
imageUrl: '/images/headphones.jpg'
2025-09-17 20:48:18 +00:00
}}
2025-12-29 01:20:24 +00:00
quantity={1}
showQuantitySelector={true}
@quantityChange =${handleQuantityChange}
2025-09-17 20:48:18 +00:00
></dees-shopping-productcard>
```
2025-06-30 10:53:22 +00:00
2025-12-29 01:20:24 +00:00
---
## 🔧 TypeScript Interfaces
The library exports unified interfaces for consistent API patterns:
```typescript
// Base menu item interface (used by tabs, menus, etc.)
interface IMenuItem {
key: string;
iconName?: string;
action: () => void;
badge?: string | number;
badgeVariant?: 'default' | 'success' | 'warning' | 'error';
}
// Menu group interface for organized menus
interface IMenuGroup {
name: string;
items: IMenuItem[];
collapsed?: boolean;
iconName?: string;
}
```
---
2025-09-17 20:48:18 +00:00
## License and Legal Information
2025-04-11 11:19:58 +00:00
2025-12-29 01:20:24 +00:00
This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [LICENSE ](./LICENSE ) file.
2025-04-11 11:19:58 +00:00
2025-12-29 01:20:24 +00:00
**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.
2025-04-11 11:19:58 +00:00
2025-09-17 20:48:18 +00:00
### Trademarks
2025-04-11 11:19:58 +00:00
2025-12-29 01:20:24 +00:00
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 or third parties, 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 or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.
2025-04-11 11:19:58 +00:00
2025-09-17 20:48:18 +00:00
### Company Information
2025-04-11 11:19:58 +00:00
2025-09-17 20:48:18 +00:00
Task Venture Capital GmbH
2025-12-29 01:20:24 +00:00
Registered at District Court Bremen HRB 35230 HB, Germany
2025-04-11 11:19:58 +00:00
2025-12-29 01:20:24 +00:00
For any legal inquiries or further information, please contact us via email at hello@task .vc.
2025-04-11 11:19:58 +00:00
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.