@@ -1,6 +1,6 @@
# @design.estate/dees-catalog
# @design.estate/dees-catalog
A comprehensive web components library built with TypeScript and LitElement, providing **7 0+ production-ready UI components ** for building modern web applications with consistent design and behavior. 🚀
A comprehensive web components library built with TypeScript and LitElement, providing **9 0+ production-ready UI components ** for building modern web applications with consistent design and behavior. 🚀
[](https://www.typescriptlang.org/)
[](https://www.typescriptlang.org/)
[](https://lit.dev/)
[](https://lit.dev/)
@@ -18,6 +18,8 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
- 🔧 **TypeScript-First ** — Fully typed APIs with excellent IDE support
- 🔧 **TypeScript-First ** — Fully typed APIs with excellent IDE support
- 🧩 **Modular ** — Use only what you need, tree-shakeable architecture
- 🧩 **Modular ** — Use only what you need, tree-shakeable architecture
- 🏗️ **Full App Shell ** — `dees-appui` provides a complete application framework with menus, routing, activity log, and bottom bar
- 🏗️ **Full App Shell ** — `dees-appui` provides a complete application framework with menus, routing, activity log, and bottom bar
- 🎬 **Media Components ** — Rich tile-based previews for PDFs, images, audio, video, notes, and folders
- 💻 **IDE Workspace ** — Full workspace component with Monaco editor, file tree, terminal, and diff viewer
## 📦 Installation
## 📦 Installation
@@ -55,12 +57,13 @@ For developers working on this library, please refer to the [UI Components Playb
|----------|------------|
|----------|------------|
| **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 ), [`DeesActionbar` ](#deesactionbar ) |
| **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 ), [`DeesActionbar` ](#deesactionbar ) |
| **Forms ** | [`DeesForm` ](#deesform ), [`DeesInputText` ](#deesinputtext ), [`DeesInputCheckbox` ](#deesinputcheckbox ), [`DeesInputDropdown` ](#deesinputdropdown ), [`DeesInputRadiogroup` ](#deesinputradiogroup ), [`DeesInputFileupload` ](#deesinputfileupload ), [`DeesInputIban` ](#deesinputiban ), [`DeesInputPhone` ](#deesinputphone ), [`DeesInputQuantitySelector` ](#deesinputquantityselector ), [`DeesInputMultitoggle` ](#deesinputmultitoggle ), [`DeesInputToggle` ](#deesinputtoggle ), [`DeesInputTags` ](#deesinputtags ), [`DeesInputTypelist` ](#deesinputtypelist ), [`DeesInputList` ](#deesinputlist ), [`DeesInputProfilepicture` ](#deesinputprofilepicture ), [`DeesInputRichtext` ](#deesinputrichtext ), [`DeesInputWysiwyg` ](#deesinputwysiwyg ), [`DeesInputDatepicker` ](#deesinputdatepicker ), [`DeesInputSearchselect` ](#deesinputsearchselect ), [`DeesInputCode` ](#deesinputcode ), [`DeesFormSubmit` ](#deesformsubmit ) |
| **Forms ** | [`DeesForm` ](#deesform ), [`DeesInputText` ](#deesinputtext ), [`DeesInputCheckbox` ](#deesinputcheckbox ), [`DeesInputDropdown` ](#deesinputdropdown ), [`DeesInputRadiogroup` ](#deesinputradiogroup ), [`DeesInputFileupload` ](#deesinputfileupload ), [`DeesInputIban` ](#deesinputiban ), [`DeesInputPhone` ](#deesinputphone ), [`DeesInputQuantitySelector` ](#deesinputquantityselector ), [`DeesInputMultitoggle` ](#deesinputmultitoggle ), [`DeesInputToggle` ](#deesinputtoggle ), [`DeesInputTags` ](#deesinputtags ), [`DeesInputTypelist` ](#deesinputtypelist ), [`DeesInputList` ](#deesinputlist ), [`DeesInputProfilepicture` ](#deesinputprofilepicture ), [`DeesInputRichtext` ](#deesinputrichtext ), [`DeesInputWysiwyg` ](#deesinputwysiwyg ), [`DeesInputDatepicker` ](#deesinputdatepicker ), [`DeesInputSearchselect` ](#deesinputsearchselect ), [`DeesInputCode` ](#deesinputcode ), [`DeesFormSubmit` ](#deesformsubmit ) |
| **App Shell (Layout) ** | [`DeesAppui` ](#deesappui- ), [`DeesAppuiMainmenu` ](#deesappuimainmenu ), [`DeesAppuiSecondarymenu` ](#deesappuisecondarymenu ), [`DeesAppuiMaincontent` ](#deesappuimaincontent ), [`DeesAppuiAppbar` ](#deesappuiappbar ), [`DeesAppuiActivitylog` ](#deesappuiactivitylog ), [`DeesAppuiBottombar` ](#deesappuibottombar ), [`DeesAppuiProfiledropdown` ](#deesappuiprofiledropdown ), [`DeesAppuiTabs` ](#deesappuitabs ), [`DeesMobileNavigation` ](#deesmobilenavigation ), [`DeesDashboardGrid` ](#deesdashboardgrid ) |
| **App Shell (Layout) ** | [`DeesAppui` ](#deesappui-️ ), [`DeesAppuiMainmenu` ](#deesappuimainmenu ), [`DeesAppuiSecondarymenu` ](#deesappuisecondarymenu ), [`DeesAppuiMaincontent` ](#deesappuimaincontent ), [`DeesAppuiAppbar` ](#deesappuiappbar ), [`DeesAppuiActivitylog` ](#deesappuiactivitylog ), [`DeesAppuiBottombar` ](#deesappuibottombar ), [`DeesAppuiProfiledropdown` ](#deesappuiprofiledropdown ), [`DeesAppuiTabs` ](#deesappuitabs ), [`DeesMobileNavigation` ](#deesmobilenavigation ), [`DeesDashboardGrid` ](#deesdashboardgrid ) |
| **Data Display ** | [`DeesTable` ](#deestable ), [`DeesDataviewCodebox` ](#deesdataviewcodebox ), [`DeesDataviewStatusobject` ](#deesdataviewstatusobject ), [`DeesPdf` ](#deespdf ), [`DeesStatsGrid` ](#deesstatsgrid ), [`DeesPagination` ](#deespagination ) |
| **Data Display ** | [`DeesTable` ](#deestable ), [`DeesDataviewCodebox` ](#deesdataviewcodebox ), [`DeesDataviewStatusobject` ](#deesdataviewstatusobject ), [`DeesPdf` ](#deespdf ), [`DeesStatsGrid` ](#deesstatsgrid ), [`DeesPagination` ](#deespagination ) |
| **Media & Tiles ** | [`DeesTilePdf` ](#deestilepdf ), [`DeesTileImage` ](#deestileimage ), [`DeesTileAudio` ](#deestileaudio ), [`DeesTileVideo` ](#deestilevideo ), [`DeesTileNote` ](#deestilenote ), [`DeesTileFolder` ](#deestilefolder ), [`DeesPreview` ](#deespreview ), [`DeesPdfViewer` ](#deespdfviewer ), [`DeesPdfPreview` ](#deespdfpreview ), [`DeesImageViewer` ](#deesimageviewer ), [`DeesAudioViewer` ](#deesaudioviewer ), [`DeesVideoViewer` ](#deesvideoviewer ) |
| **Visualization ** | [`DeesChartArea` ](#deeschartarea ), [`DeesChartLog` ](#deeschartlog ) |
| **Visualization ** | [`DeesChartArea` ](#deeschartarea ), [`DeesChartLog` ](#deeschartlog ) |
| **Dialogs & Overlays ** | [`DeesModal` ](#deesmodal ), [`DeesContextmenu` ](#deescontextmenu ), [`DeesSpeechbubble` ](#deesspeechbubble ), [`DeesWindowlayer` ](#deeswindowlayer ) |
| **Dialogs & Overlays ** | [`DeesModal` ](#deesmodal ), [`DeesContextmenu` ](#deescontextmenu ), [`DeesSpeechbubble` ](#deesspeechbubble ), [`DeesWindowlayer` ](#deeswindowlayer ) |
| **Navigation ** | [`DeesStepper` ](#deesstepper ), [`DeesProgressbar` ](#deesprogressbar ) |
| **Navigation ** | [`DeesStepper` ](#deesstepper ), [`DeesProgressbar` ](#deesprogressbar ) |
| **Workspace / IDE ** | [`DeesEditor` ](#deeseditor ), [`DeesTerminal` ](#deesterminal ), [`DeesUpdater` ](#deesupdate r ) |
| **Workspace / IDE ** | [`DeesWorkspace` ](#deesworkspace ), [`DeesWorkspaceMonaco` ](#deesworkspacemonaco ), [`DeesWorkspaceDiff Editor` ](#deesworkspacediff editor ), [`DeesWorkspaceFiletree` ](#deesworkspacefiletree ), [`DeesWorkspace Terminal` ](#deesworkspace terminal ), [`DeesWorkspaceTerminalPreview` ](#deesworkspaceterminalpreview ), [`DeesWorkspaceMarkdown` ](#deesworkspacemarkdown ), [`DeesWorkspaceMarkdownoutlet` ](#deesworkspacemarkdownoutlet ), [`DeesWorkspaceBottombar` ](#deesworkspacebottomba r ) |
| **Theming ** | [`DeesTheme` ](#deestheme ) |
| **Theming ** | [`DeesTheme` ](#deestheme ) |
| **Pre-built Templates ** | [`DeesSimpleAppdash` ](#deessimpleappdash ), [`DeesSimpleLogin` ](#deessimplelogin ) |
| **Pre-built Templates ** | [`DeesSimpleAppdash` ](#deessimpleappdash ), [`DeesSimpleLogin` ](#deessimplelogin ) |
| **Shopping ** | [`DeesShoppingProductcard` ](#deesshoppingproductcard ) |
| **Shopping ** | [`DeesShoppingProductcard` ](#deesshoppingproductcard ) |
@@ -1234,6 +1237,146 @@ Pagination component for navigating through large datasets.
---
---
### Media & Tile Components 🎬
A rich collection of tile-based preview components for displaying media files in grids. All tiles share a consistent base class (`DeesTileBase` ) with lazy loading via `IntersectionObserver` , hover interactions, click events, context menus, and three size variants (`small` , `default` , `large` ).
All tile badges use a unified styling system with label-awareness — when a `label` is set, bottom badges automatically shift up to avoid overlapping.
#### `DeesTilePdf`
PDF document tile with live page preview on hover.
``` typescript
< dees - tile - pdf
pdfUrl = "/documents/report.pdf"
label = "Annual Report"
clickable
@ tile-click = $ { handleClick }
> < / d e e s - t i l e - p d f >
```
**Key Features: **
- Renders first page as canvas preview
- Hover to scrub through pages (mouse X position maps to page number)
- Shows page count badge, hover page indicator
- Detects A4/Letter vs non-standard aspect ratios
#### `DeesTileImage`
Image tile with lazy loading and dimension display.
``` typescript
< dees - tile - image
src = "/photos/landscape.jpg"
alt = "Mountain landscape"
label = "landscape.jpg"
clickable
@ tile-click = $ { handleClick }
> < / d e e s - t i l e - i m a g e >
```
**Key Features: **
- Lazy loads image on scroll into view
- Shows image dimensions on hover (e.g. "1920 × 1080")
- Checkerboard background for transparent images
#### `DeesTileAudio`
Audio file tile with waveform visualization.
``` typescript
< dees - tile - audio
src = "/music/track.mp3"
title = "Summer Vibes"
artist = "DJ Example"
clickable
@ tile-click = $ { handleClick }
> < / d e e s - t i l e - a u d i o >
```
**Key Features: **
- Generates waveform visualization from audio data
- Shows duration badge (e.g. "3:42")
- Displays title and artist metadata
- Play overlay on hover
#### `DeesTileVideo`
Video tile with thumbnail capture and hover preview.
``` typescript
< dees - tile - video
src = "/videos/intro.mp4"
poster = "/thumbs/intro.jpg"
label = "Introduction"
clickable
@ tile-click = $ { handleClick }
> < / d e e s - t i l e - v i d e o >
```
**Key Features: **
- Auto-captures first frame as thumbnail (or uses provided `poster` )
- Plays video preview on hover
- Shows duration badge
- Play button overlay
#### `DeesTileNote`
Code/text snippet tile with syntax-aware display.
``` typescript
< dees - tile - note
title = "config.ts"
language = "TypeScript"
.content = $ { codeString }
clickable
@ tile-click = $ { handleClick }
> < / d e e s - t i l e - n o t e >
```
**Key Features: **
- Monospace font with line numbers
- Language badge (top-right)
- Scrollable content on hover (mouse X position controls scroll)
- Line indicator badge while scrolling
- Gradient fade at bottom
#### `DeesTileFolder`
Folder tile with 2× 2 content preview grid.
``` typescript
< dees - tile - folder
name = "Project Assets"
.items = $ { [
{ type : 'image' , name : 'logo.png' , thumbnailSrc : '/thumbs/logo.png' } ,
{ type : 'pdf' , name : 'spec.pdf' } ,
{ type : 'audio' , name : 'jingle.mp3' } ,
{ type : 'video' , name : 'demo.mp4' } ,
] }
clickable
@ tile-click = $ { handleClick }
> < / d e e s - t i l e - f o l d e r >
```
**Key Features: **
- 2× 2 preview grid showing first 4 items (thumbnails or type icons)
- Item count badge (e.g. "12 items")
- Folder icon header with name
- Supports: `pdf` , `image` , `audio` , `video` , `note` , `folder` , `unknown` types
#### `DeesPreview`
Unified preview component that auto-selects the right tile type based on content.
#### `DeesPdfViewer` / `DeesPdfPreview`
Full PDF viewing components with navigation controls.
#### `DeesImageViewer`
Full-screen image viewer with zoom and pan.
#### `DeesAudioViewer`
Audio playback component with waveform and controls.
#### `DeesVideoViewer`
Video playback component with standard controls.
---
### Visualization Components
### Visualization Components
#### `DeesChartArea`
#### `DeesChartArea`
@@ -1294,16 +1437,41 @@ DeesModal.createAndShow({
```
```
#### `DeesContextmenu`
#### `DeesContextmenu`
Context menu component for right-click actions.
Context menu component for right-click actions with nested submenu support .
``` typescript
``` typescript
< dees - contextmenu
// Programmatic usage
.items = $ { [
DeesContextmenu . openContextMenuWithOptions ( mouseEvent , [
{ label : 'Edit' , icon : 'edit' , action : ( ) = > handleEdit ( ) } ,
{
{ label : 'Delete' , icon : 'trash' , action : ( ) = > handleDelete ( ) }
name : 'Edit' ,
] }
iconName : 'lucide:edit' ,
posi tion= "right"
ac tion: async ( ) = > handleEdit ( )
> < / d e e s - c o n t e x t m e n u >
} ,
{ divider : true } ,
{
name : 'More Options' ,
iconName : 'lucide:moreHorizontal' ,
submenu : [
{ name : 'Duplicate' , iconName : 'lucide:copy' , action : async ( ) = > handleDuplicate ( ) } ,
{ name : 'Archive' , iconName : 'lucide:archive' , action : async ( ) = > handleArchive ( ) } ,
]
} ,
{
name : 'Delete' ,
iconName : 'lucide:trash2' ,
action : async ( ) = > handleDelete ( )
}
] ) ;
// Component-based (implement getContextMenuItems on any element)
class MyComponent extends DeesElement {
getContextMenuItems() {
return [
{ name : 'View Details' , iconName : 'lucide:eye' , action : async ( ) = > { . . . } } ,
{ name : 'Edit' , iconName : 'lucide:edit' , action : async ( ) = > { . . . } } ,
] ;
}
}
```
```
#### `DeesSpeechbubble`
#### `DeesSpeechbubble`
@@ -1395,51 +1563,68 @@ Theme provider component that wraps children and provides CSS custom properties
---
---
### Workspace / IDE Components
### Workspace / IDE Components 💻
#### `DeesEditor`
A full-featured IDE workspace component suite for building browser-based code editors, terminal interfaces, and documentation viewers.
Code editor component with syntax highlighting and code completion, powered by Monaco Editor.
#### `DeesWorkspace`
Top-level workspace shell that composes editor, file tree, terminal, and bottom bar into an IDE-like layout.
``` typescript
``` typescript
< dees - editor
< dees - workspace > < / d e e s - w o r k s p a c e >
```
#### `DeesWorkspaceMonaco`
Monaco Editor integration for code editing with full IntelliSense, syntax highlighting, and language support.
``` typescript
< dees - workspace - monaco
.value = $ { code }
.value = $ { code }
@ change = $ { handleCodeChange }
.language = $ { 'typescript' }
.language = $ { 'typescript' }
.them e =$ { 'vs-dark' }
@ chang e =$ { handleCodeChange }
.options = $ {{
> < / d e e s - w o r k s p a c e - m o n a c o >
lineNumbers : true ,
minimap : { enabled : true } ,
autoClosingBrackets : 'always'
}}
> < / d e e s - e d i t o r >
```
```
#### `DeesTerminal `
#### `DeesWorkspaceDiffEditor `
Terminal emulator component for command-line interface .
Side-by-side diff editor powered by Monaco for comparing file versions .
``` typescript
``` typescript
< dees - terminal
< dees - workspace - diff - editor
.commands = $ {{
.originalValue = $ { originalCode }
'echo' : ( args ) = > ` Echo: ${ args . join ( ' ' ) } ` ,
.modifiedValue = $ { modifiedCode }
'help' : ( ) = > 'Available commands: echo, help'
.language = $ { 'typescript' }
} }
> < / d e e s - w o r k s p a c e - d i f f - e d i t o r >
. prompt = $ { '$' }
. welcomeMessage = $ { 'Welcome! Type "help" for available commands.' }
> < / d e e s - t e r m i n a l >
```
```
#### `DeesUpdater `
#### `DeesWorkspaceFiletree `
Component for managing application updates and version control .
File tree navigation component with expand/collapse, file icons, and selection .
``` typescript
``` typescript
< dees - updater
< dees - workspace - filetree
.currentVersion = $ { '1.5.2' }
.files = $ { fileTreeData }
.checkInterval = $ { 3600000 }
@ file-select = $ { handleFileSelect }
.autoUpdate = $ { false }
> < / d e e s - w o r k s p a c e - f i l e t r e e >
@ update-available = $ { handleUpdateAvailable }
> < / d e e s - u p d a t e r >
```
```
#### `DeesWorkspaceTerminal`
Terminal emulator component powered by xterm.js.
``` typescript
< dees - workspace - terminal > < / d e e s - w o r k s p a c e - t e r m i n a l >
```
#### `DeesWorkspaceTerminalPreview`
Terminal with integrated preview pane for output visualization.
#### `DeesWorkspaceMarkdown`
Markdown editor with live preview.
#### `DeesWorkspaceMarkdownoutlet`
Read-only markdown renderer for documentation display.
#### `DeesWorkspaceBottombar`
IDE-style bottom status bar for the workspace.
---
---
### Pre-built Templates
### Pre-built Templates
@@ -1582,6 +1767,13 @@ interface IViewActivationContext {
viewId : string ;
viewId : string ;
params? : Record < string , string > ;
params? : Record < string , string > ;
}
}
// Tile folder item (for DeesTileFolder)
interface ITileFolderItem {
type : 'pdf' | 'image' | 'audio' | 'video' | 'note' | 'folder' | 'unknown' ;
thumbnailSrc? : string ;
name : string ;
}
```
```
---
---