@design.estate/dees-catalog 3.37.0 → 3.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/npmextra.json CHANGED
@@ -59,5 +59,8 @@
59
59
  "bundler": "esbuild"
60
60
  }
61
61
  ]
62
+ },
63
+ "@git.zone/tswatch": {
64
+ "preset": "element"
62
65
  }
63
66
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "3.37.0",
3
+ "version": "3.38.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
@@ -9,7 +9,7 @@
9
9
  "scripts": {
10
10
  "test": "tstest test/ --web --verbose --timeout 30 --logfile",
11
11
  "build": "tsbuild tsfolders --allowimplicitany && tsbundle",
12
- "watch": "tswatch element",
12
+ "watch": "tswatch",
13
13
  "buildDocs": "tsdoc",
14
14
  "postinstall": "node scripts/update-monaco-version.cjs"
15
15
  },
@@ -37,19 +37,19 @@
37
37
  "apexcharts": "^5.3.6",
38
38
  "highlight.js": "11.11.1",
39
39
  "ibantools": "^4.5.1",
40
- "lucide": "^0.562.0",
40
+ "lucide": "^0.563.0",
41
41
  "monaco-editor": "0.55.1",
42
42
  "pdfjs-dist": "^4.10.38",
43
43
  "xterm": "^5.3.0",
44
44
  "xterm-addon-fit": "^0.8.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@git.zone/tsbuild": "^4.1.0",
48
- "@git.zone/tsbundle": "^2.8.1",
49
- "@git.zone/tstest": "^3.1.4",
50
- "@git.zone/tswatch": "^2.3.13",
47
+ "@git.zone/tsbuild": "^4.1.2",
48
+ "@git.zone/tsbundle": "^2.8.3",
49
+ "@git.zone/tstest": "^3.1.7",
50
+ "@git.zone/tswatch": "^3.0.1",
51
51
  "@push.rocks/projectinfo": "^5.0.2",
52
- "@types/node": "^25.0.6"
52
+ "@types/node": "^25.0.10"
53
53
  },
54
54
  "files": [
55
55
  "ts/**/*",
package/readme.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @design.estate/dees-catalog
2
2
 
3
- A comprehensive web components library built with TypeScript and LitElement, providing **80+ production-ready UI components** for building modern web applications with consistent design and behavior. 🚀
3
+ A comprehensive web components library built with TypeScript and LitElement, providing **70+ production-ready UI components** for building modern web applications with consistent design and behavior. 🚀
4
4
 
5
5
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)
6
6
  [![LitElement](https://img.shields.io/badge/LitElement-4.0+-orange.svg)](https://lit.dev/)
@@ -11,12 +11,13 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community
11
11
 
12
12
  ## ✨ Features
13
13
 
14
- - 🎨 **Consistent Design System** - Beautiful, cohesive components following modern UI/UX principles
15
- - 🌙 **Dark/Light Theme Support** - All components automatically adapt to your theme
16
- - ⌨️ **Keyboard Accessible** - Full keyboard navigation and ARIA support
17
- - 📱 **Responsive** - Mobile-first design that works across all screen sizes
18
- - 🔧 **TypeScript-First** - Fully typed APIs with excellent IDE support
19
- - 🧩 **Modular** - Use only what you need, tree-shakeable architecture
14
+ - 🎨 **Consistent Design System** Beautiful, cohesive components following modern UI/UX principles
15
+ - 🌙 **Dark/Light Theme Support** All components automatically adapt to your theme
16
+ - ⌨️ **Keyboard Accessible** Full keyboard navigation and ARIA support
17
+ - 📱 **Responsive** Mobile-first design that works across all screen sizes
18
+ - 🔧 **TypeScript-First** Fully typed APIs with excellent IDE support
19
+ - 🧩 **Modular** Use only what you need, tree-shakeable architecture
20
+ - 🏗️ **Full App Shell** — `dees-appui` provides a complete application framework with menus, routing, activity log, and bottom bar
20
21
 
21
22
  ## 📦 Installation
22
23
 
@@ -52,16 +53,16 @@ For developers working on this library, please refer to the [UI Components Playb
52
53
 
53
54
  | Category | Components |
54
55
  |----------|------------|
55
- | **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) |
56
- | **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), [`DeesInputList`](#deesinputlist), [`DeesInputProfilepicture`](#deesinputprofilepicture), [`DeesInputRichtext`](#deesinputrichtext), [`DeesInputWysiwyg`](#deesinputwysiwyg), [`DeesInputDatepicker`](#deesinputdatepicker), [`DeesInputSearchselect`](#deesinputsearchselect), [`DeesFormSubmit`](#deesformsubmit) |
57
- | **Layout** | [`DeesAppui`](#deesappui), [`DeesAppuiMainmenu`](#deesappuimainmenu), [`DeesAppuiSecondarymenu`](#deesappuisecondarymenu), [`DeesAppuiMaincontent`](#deesappuimaincontent), [`DeesAppuiAppbar`](#deesappuiappbar), [`DeesAppuiActivitylog`](#deesappuiactivitylog), [`DeesAppuiProfiledropdown`](#deesappuiprofiledropdown), [`DeesAppuiTabs`](#deesappuitabs), [`DeesMobileNavigation`](#deesmobilenavigation), [`DeesDashboardGrid`](#deesdashboardgrid) |
56
+ | **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) |
57
+ | **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) |
58
+ | **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) |
58
59
  | **Data Display** | [`DeesTable`](#deestable), [`DeesDataviewCodebox`](#deesdataviewcodebox), [`DeesDataviewStatusobject`](#deesdataviewstatusobject), [`DeesPdf`](#deespdf), [`DeesStatsGrid`](#deesstatsgrid), [`DeesPagination`](#deespagination) |
59
60
  | **Visualization** | [`DeesChartArea`](#deeschartarea), [`DeesChartLog`](#deeschartlog) |
60
61
  | **Dialogs & Overlays** | [`DeesModal`](#deesmodal), [`DeesContextmenu`](#deescontextmenu), [`DeesSpeechbubble`](#deesspeechbubble), [`DeesWindowlayer`](#deeswindowlayer) |
61
62
  | **Navigation** | [`DeesStepper`](#deesstepper), [`DeesProgressbar`](#deesprogressbar) |
62
- | **Development** | [`DeesEditor`](#deeseditor), [`DeesEditorMarkdown`](#deeseditormarkdown), [`DeesEditorMarkdownoutlet`](#deeseditormarkdownoutlet), [`DeesTerminal`](#deesterminal), [`DeesUpdater`](#deesupdater) |
63
+ | **Workspace / IDE** | [`DeesEditor`](#deeseditor), [`DeesTerminal`](#deesterminal), [`DeesUpdater`](#deesupdater) |
63
64
  | **Theming** | [`DeesTheme`](#deestheme) |
64
- | **Auth & Utilities** | [`DeesSimpleAppdash`](#deessimpleappdash), [`DeesSimpleLogin`](#deessimplelogin) |
65
+ | **Pre-built Templates** | [`DeesSimpleAppdash`](#deessimpleappdash), [`DeesSimpleLogin`](#deessimplelogin) |
65
66
  | **Shopping** | [`DeesShoppingProductcard`](#deesshoppingproductcard) |
66
67
 
67
68
  ---
@@ -117,14 +118,14 @@ Interactive chips/tags with selection capabilities.
117
118
  Display icons from FontAwesome and Lucide icon libraries with library prefixes.
118
119
 
119
120
  ```typescript
120
- // FontAwesome icons - use 'fa:' prefix
121
+ // FontAwesome icons use 'fa:' prefix
121
122
  <dees-icon
122
123
  icon="fa:check" // FontAwesome icon with fa: prefix
123
124
  iconSize="24" // Size in pixels
124
125
  color="#22c55e" // Optional: custom color
125
126
  ></dees-icon>
126
127
 
127
- // Lucide icons - use 'lucide:' prefix
128
+ // Lucide icons use 'lucide:' prefix
128
129
  <dees-icon
129
130
  icon="lucide:menu" // Lucide icon with lucide: prefix
130
131
  iconSize="24" // Size in pixels
@@ -134,7 +135,7 @@ Display icons from FontAwesome and Lucide icon libraries with library prefixes.
134
135
 
135
136
  // Legacy API (deprecated but still supported)
136
137
  <dees-icon
137
- iconFA="check" // Without prefix - assumes FontAwesome
138
+ iconFA="check" // Without prefix assumes FontAwesome
138
139
  ></dees-icon>
139
140
  ```
140
141
 
@@ -287,6 +288,18 @@ Window control buttons (minimize, maximize, close) for desktop-like applications
287
288
  ></dees-windowcontrols>
288
289
  ```
289
290
 
291
+ #### `DeesActionbar`
292
+ Floating action bar for contextual actions.
293
+
294
+ ```typescript
295
+ <dees-actionbar
296
+ .actions=${[
297
+ { icon: 'lucide:save', label: 'Save', action: () => handleSave() },
298
+ { icon: 'lucide:trash', label: 'Delete', action: () => handleDelete() }
299
+ ]}
300
+ ></dees-actionbar>
301
+ ```
302
+
290
303
  ---
291
304
 
292
305
  ### Form Components
@@ -331,6 +344,18 @@ Checkbox input component for boolean values.
331
344
  ></dees-input-checkbox>
332
345
  ```
333
346
 
347
+ #### `DeesInputToggle`
348
+ Toggle switch component for boolean on/off states.
349
+
350
+ ```typescript
351
+ <dees-input-toggle
352
+ key="darkMode"
353
+ label="Enable Dark Mode"
354
+ .value=${true}
355
+ @change=${handleToggle}
356
+ ></dees-input-toggle>
357
+ ```
358
+
334
359
  #### `DeesInputDropdown`
335
360
  Dropdown selection component with search and filtering capabilities.
336
361
 
@@ -658,6 +683,19 @@ Advanced block-based editor with slash commands and rich content blocks.
658
683
  - Collaborative editing ready
659
684
  - Extensible block types
660
685
 
686
+ #### `DeesInputCode`
687
+ Code input component for editing source code with syntax highlighting.
688
+
689
+ ```typescript
690
+ <dees-input-code
691
+ key="snippet"
692
+ label="Code Snippet"
693
+ .value=${codeString}
694
+ language="typescript"
695
+ @change=${handleCodeChange}
696
+ ></dees-input-code>
697
+ ```
698
+
661
699
  #### `DeesFormSubmit`
662
700
  Submit button component specifically designed for `DeesForm`.
663
701
 
@@ -670,10 +708,10 @@ Submit button component specifically designed for `DeesForm`.
670
708
 
671
709
  ---
672
710
 
673
- ### Layout Components
711
+ ### App Shell (Layout) Components
674
712
 
675
- #### `DeesAppui`
676
- A comprehensive application shell component providing a complete UI framework with navigation, menus, activity logging, and view management.
713
+ #### `DeesAppui` 🏗️
714
+ A comprehensive application shell component providing a complete UI framework with navigation, menus, activity logging, bottom bar, and view management.
677
715
 
678
716
  > **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.
679
717
 
@@ -690,7 +728,6 @@ class MyApp extends DeesElement {
690
728
  async firstUpdated() {
691
729
  this.appui = this.shadowRoot.querySelector('dees-appui');
692
730
 
693
- // Configure with views and menu
694
731
  this.appui.configure({
695
732
  branding: { logoIcon: 'lucide:box', logoText: 'My App' },
696
733
  views: [
@@ -700,7 +737,13 @@ class MyApp extends DeesElement {
700
737
  mainMenu: {
701
738
  sections: [{ name: 'Main', views: ['dashboard', 'settings'] }]
702
739
  },
703
- defaultView: 'dashboard'
740
+ defaultView: 'dashboard',
741
+ bottomBar: {
742
+ visible: true,
743
+ widgets: [
744
+ { id: 'status', iconName: 'lucide:activity', label: 'Online', status: 'success' }
745
+ ]
746
+ }
704
747
  });
705
748
  }
706
749
 
@@ -710,43 +753,123 @@ class MyApp extends DeesElement {
710
753
  }
711
754
  ```
712
755
 
756
+ **Architecture Overview:**
757
+
758
+ ```
759
+ ┌─────────────────────────────────────────────────────────────────────┐
760
+ │ AppBar (dees-appui-appbar) │
761
+ │ ├── Menus (File, Edit, View...) │
762
+ │ ├── Breadcrumbs │
763
+ │ ├── User Profile + Dropdown │
764
+ │ └── Activity Log Toggle │
765
+ ├─────────────┬───────────────────────────────────┬───────────────────┤
766
+ │ Main Menu │ Content Area │ Activity Log │
767
+ │ (collapsed/ │ ├── Content Tabs │ (slide panel) │
768
+ │ expanded) │ │ (closable, from tables/lists)│ │
769
+ │ │ └── View Container │ │
770
+ │ ┌─────────┐ │ └── Active View │ │
771
+ │ │ 🏠 Home │ ├─────────────────────────────────┐ │ │
772
+ │ │ 📁 Files│ │ Secondary Menu │ │ │
773
+ │ │ ⚙ Set.. │ │ ├── Collapsible Groups │ │ │
774
+ │ │ │ │ │ ├── Tabs / Actions │ │ │
775
+ │ └─────────┘ │ │ ├── Filters / Links │ │ │
776
+ │ │ │ └── Dividers / Headers │ │ │
777
+ ├─────────────┴──┴───────────────────────────────┴───────────────────┤
778
+ │ Bottom Bar (dees-appui-bottombar) — 24px status bar │
779
+ │ ├── Status widgets (left/right) │
780
+ │ └── Action buttons (left/right) │
781
+ └─────────────────────────────────────────────────────────────────────┘
782
+ ```
783
+
784
+ **Configuration (`IAppConfig`):**
785
+
786
+ ```typescript
787
+ interface IAppConfig {
788
+ branding?: { logoIcon?: string; logoText?: string };
789
+ appBar?: IAppBarConfig;
790
+ views: IViewDefinition[];
791
+ mainMenu?: IMainMenuConfig;
792
+ defaultView?: string;
793
+ activityLog?: IActivityLogConfig;
794
+ bottomBar?: IBottomBarConfig;
795
+ onViewChange?: (viewId: string, view: IViewDefinition) => void;
796
+ onSearch?: (query: string) => void;
797
+ }
798
+ ```
799
+
713
800
  **Key Features:**
714
- - **Configure API**: Single `configure()` method for complete app setup
715
- - **View Management**: Automatic view caching, lazy loading, and lifecycle hooks
716
- - **Programmatic APIs**: Full control over AppBar, Main Menu, Secondary Menu, Content Tabs, and Activity Log
717
- - **View Lifecycle Hooks**: `onActivate()`, `onDeactivate()`, and `canDeactivate()` for view components
718
- - **Hash-based Routing**: Automatic URL synchronization with view navigation
719
- - **RxJS Observables**: `viewChanged$` and `viewLifecycle$` for reactive programming
720
- - **TypeScript-first**: Typed `IViewActivationContext` passed to views on activation
721
- - **Activity Log Toggle**: Built-in appbar button to show/hide activity panel with entry count badge
722
-
723
- **Programmatic APIs include:**
724
- - `navigateToView(viewId, params?)` - Navigate between views
725
- - `setAppBarMenus()`, `setBreadcrumbs()`, `setUser()` - Control the app bar
726
- - `setMainMenu()`, `setMainMenuSelection()`, `setMainMenuBadge()` - Control main navigation
727
- - `setMainMenuCollapsed()`, `setMainMenuVisible()` - Control main menu visibility
728
- - `setSecondaryMenu()`, `setSecondaryMenuCollapsed()`, `setSecondaryMenuVisible()` - Control secondary menu
729
- - `setContentTabs()`, `setContentTabsVisible()` - Control view-specific UI
730
- - `activityLog.add()`, `activityLog.addMany()`, `activityLog.clear()` - Manage activity entries
731
- - `setActivityLogVisible()`, `toggleActivityLog()`, `getActivityLogVisible()` - Control activity panel
732
-
733
- **View Visibility Control:**
734
- ```typescript
735
- // In your view's onActivate hook
736
- onActivate(context: IViewActivationContext) {
737
- // Hide secondary menu for a fullscreen view
738
- context.appui.setSecondaryMenuVisible(false);
739
-
740
- // Hide content tabs
741
- context.appui.setContentTabsVisible(false);
742
-
743
- // Collapse main menu to give more space
744
- context.appui.setMainMenuCollapsed(true);
801
+ - 🔧 **Configure API** Single `configure()` method for complete app setup
802
+ - 📄 **View Management** Automatic view caching, lazy loading, and lifecycle hooks (`onActivate`, `onDeactivate`, `canDeactivate`)
803
+ - 🧭 **Hash-based Routing** Automatic URL synchronization with view navigation and parameterized routes
804
+ - 📊 **Activity Log** Slide-out panel with stacked entries, date grouping, search, and filtering
805
+ - 📌 **Bottom Status Bar** Configurable widgets and actions with status colors and loading states
806
+ - 🎯 **RxJS Observables** `viewChanged$` and `viewLifecycle$` for reactive programming
807
+ - 🏷️ **TypeScript-first** Typed `IViewActivationContext` passed to views on activation
808
+
809
+ **Programmatic APIs:**
810
+
811
+ | Area | Methods |
812
+ |------|---------|
813
+ | **Navigation** | `navigateToView(viewId, params?)`, `getCurrentView()`, `getViewRegistry()` |
814
+ | **App Bar** | `setAppBarMenus()`, `updateAppBarMenu()`, `setBreadcrumbs()`, `setUser()`, `setProfileMenuItems()`, `setSearchVisible()`, `onSearch()`, `setWindowControlsVisible()` |
815
+ | **Main Menu** | `setMainMenu()`, `updateMainMenuGroup()`, `addMainMenuItem()`, `removeMainMenuItem()`, `setMainMenuSelection()`, `setMainMenuCollapsed()`, `setMainMenuVisible()`, `setMainMenuBadge()`, `clearMainMenuBadge()` |
816
+ | **Secondary Menu** | `setSecondaryMenu()`, `updateSecondaryMenuGroup()`, `addSecondaryMenuItem()`, `setSecondaryMenuSelection()`, `setSecondaryMenuCollapsed()`, `setSecondaryMenuVisible()`, `clearSecondaryMenu()` |
817
+ | **Content Tabs** | `setContentTabs()`, `addContentTab()`, `removeContentTab()`, `selectContentTab()`, `getSelectedContentTab()`, `setContentTabsVisible()`, `setContentTabsAutoHide()` |
818
+ | **Activity Log** | `activityLog.add()`, `activityLog.addMany()`, `activityLog.clear()`, `activityLog.getEntries()`, `activityLog.filter()`, `activityLog.search()`, `setActivityLogVisible()`, `toggleActivityLog()`, `getActivityLogVisible()` |
819
+ | **Bottom Bar** | `bottomBar.addWidget()`, `bottomBar.updateWidget()`, `bottomBar.removeWidget()`, `bottomBar.getWidget()`, `bottomBar.clearWidgets()`, `bottomBar.addAction()`, `bottomBar.removeAction()`, `bottomBar.clearActions()`, `setBottomBarVisible()`, `getBottomBarVisible()` |
820
+ | **Observables** | `viewChanged$`, `viewLifecycle$` |
821
+
822
+ **View Lifecycle Hooks:**
823
+
824
+ ```typescript
825
+ import { DeesElement, customElement } from '@design.estate/dees-element';
826
+ import type { IViewActivationContext, IViewLifecycle } from '@design.estate/dees-catalog';
827
+
828
+ @customElement('my-settings-view')
829
+ class MySettingsView extends DeesElement implements IViewLifecycle {
830
+ // Called when view becomes visible
831
+ async onActivate(context: IViewActivationContext) {
832
+ const { appui, viewId, params } = context;
833
+
834
+ // Set view-specific secondary menu
835
+ appui.setSecondaryMenu({
836
+ heading: 'Settings',
837
+ groups: [{ name: 'Options', items: [...] }]
838
+ });
839
+
840
+ // Control visibility of other shell parts
841
+ appui.setContentTabsVisible(false);
842
+ appui.setSecondaryMenuVisible(true);
843
+ }
844
+
845
+ // Called when navigating away
846
+ onDeactivate() { /* cleanup */ }
847
+
848
+ // Return false or a message string to block navigation
849
+ canDeactivate(): boolean | string {
850
+ if (this.hasUnsavedChanges) return 'You have unsaved changes. Leave anyway?';
851
+ return true;
852
+ }
745
853
  }
746
854
  ```
747
855
 
856
+ **Secondary Menu Item Types:**
857
+
858
+ The secondary menu supports **8 distinct item types** for building rich contextual sidebars:
859
+
860
+ | Type | Description |
861
+ |------|-------------|
862
+ | **Tab** (default) | Selectable item that stays highlighted |
863
+ | **Action** | Executes on click without staying selected (blue styling) |
864
+ | **Filter** | Checkbox toggle for filtering |
865
+ | **MultiFilter** | Collapsible multi-select filter box |
866
+ | **Divider** | Visual separator line |
867
+ | **Header** | Non-interactive section label |
868
+ | **Link** | Opens an external URL |
869
+ | **Danger Action** | Red-styled action with optional confirmation |
870
+
748
871
  #### `DeesAppuiMainmenu`
749
- Main navigation menu component for application-wide navigation.
872
+ Main navigation menu component for application-wide navigation. Supports collapsed (icon-only) mode.
750
873
 
751
874
  ```typescript
752
875
  <dees-appui-mainmenu
@@ -759,12 +882,12 @@ Main navigation menu component for application-wide navigation.
759
882
  ]
760
883
  }
761
884
  ]}
762
- collapsed // Optional: show collapsed version
885
+ collapsed // Optional: show collapsed icon-only version
763
886
  ></dees-appui-mainmenu>
764
887
  ```
765
888
 
766
889
  #### `DeesAppuiSecondarymenu`
767
- Secondary navigation component for sub-section selection with collapsible groups and badges.
890
+ Secondary navigation component for sub-section selection with collapsible groups, badges, and 8 item types.
768
891
 
769
892
  ```typescript
770
893
  <dees-appui-secondarymenu
@@ -806,28 +929,12 @@ Professional application bar component with hierarchical menus, breadcrumb navig
806
929
  .menuItems=${[
807
930
  {
808
931
  name: 'File',
809
- action: async () => {}, // No-op for parent menu items
932
+ action: async () => {},
810
933
  submenu: [
811
- {
812
- name: 'New File',
813
- shortcut: 'Cmd+N',
814
- iconName: 'file-plus',
815
- action: async () => handleNewFile()
816
- },
817
- {
818
- name: 'Open...',
819
- shortcut: 'Cmd+O',
820
- iconName: 'folder-open',
821
- action: async () => handleOpen()
822
- },
823
- { divider: true }, // Menu separator
824
- {
825
- name: 'Save',
826
- shortcut: 'Cmd+S',
827
- iconName: 'save',
828
- action: async () => handleSave(),
829
- disabled: true // Disabled state
830
- }
934
+ { name: 'New File', shortcut: 'Cmd+N', iconName: 'file-plus', action: async () => handleNewFile() },
935
+ { name: 'Open...', shortcut: 'Cmd+O', iconName: 'folder-open', action: async () => handleOpen() },
936
+ { divider: true },
937
+ { name: 'Save', shortcut: 'Cmd+S', iconName: 'save', action: async () => handleSave(), disabled: true }
831
938
  ]
832
939
  }
833
940
  ]}
@@ -849,12 +956,12 @@ Professional application bar component with hierarchical menus, breadcrumb navig
849
956
  ```
850
957
 
851
958
  **Key Features:**
852
- - **Hierarchical Menu System** - Top-level menus with dropdown submenus, icons, and keyboard shortcuts
853
- - **Keyboard Navigation** - Full keyboard support (Tab, Arrow keys, Enter, Escape)
854
- - **Breadcrumb Navigation** - Customizable breadcrumb trail with click events
855
- - **User Account Section** - Avatar with status indicator and profile dropdown
856
- - **Activity Log Toggle** - Button with badge count to show/hide activity panel
857
- - **Accessibility** - Full ARIA support with menubar roles
959
+ - **Hierarchical Menu System** Top-level menus with dropdown submenus, icons, and keyboard shortcuts
960
+ - **Keyboard Navigation** Full keyboard support (Tab, Arrow keys, Enter, Escape)
961
+ - **Breadcrumb Navigation** Customizable breadcrumb trail with click events
962
+ - **User Account Section** Avatar with status indicator and profile dropdown
963
+ - **Activity Log Toggle** Button with badge count to show/hide activity panel
964
+ - **Accessibility** Full ARIA support with menubar roles
858
965
 
859
966
  #### `DeesAppuiActivitylog`
860
967
  Real-time activity log panel for displaying user actions and system events.
@@ -886,6 +993,61 @@ activityLog.search('settings'); // Search by message
886
993
  - Animated slide-in/out panel
887
994
  - Theme-aware styling
888
995
 
996
+ #### `DeesAppuiBottombar`
997
+ A 24px fixed-height status bar at the bottom of the application shell. Supports status widgets and action buttons positioned left or right.
998
+
999
+ ```typescript
1000
+ // Configure via DeesAppui
1001
+ appui.configure({
1002
+ bottomBar: {
1003
+ visible: true,
1004
+ widgets: [
1005
+ {
1006
+ id: 'status',
1007
+ iconName: 'lucide:activity',
1008
+ label: 'System Online',
1009
+ status: 'success', // 'idle' | 'active' | 'success' | 'warning' | 'error'
1010
+ tooltip: 'All systems operational',
1011
+ onClick: () => console.log('Status clicked'),
1012
+ },
1013
+ {
1014
+ id: 'version',
1015
+ iconName: 'lucide:gitBranch',
1016
+ label: 'v1.2.3',
1017
+ position: 'right',
1018
+ }
1019
+ ],
1020
+ actions: [
1021
+ {
1022
+ id: 'terminal',
1023
+ iconName: 'lucide:terminal',
1024
+ tooltip: 'Open Terminal',
1025
+ position: 'right',
1026
+ onClick: () => console.log('Terminal clicked'),
1027
+ }
1028
+ ]
1029
+ }
1030
+ });
1031
+
1032
+ // Programmatic updates
1033
+ appui.bottomBar.addWidget({ id: 'build', iconName: 'lucide:hammer', label: 'Building...', loading: true, status: 'active' });
1034
+ appui.bottomBar.updateWidget('build', { label: 'Build complete', loading: false, status: 'success' });
1035
+ appui.bottomBar.removeWidget('build');
1036
+
1037
+ appui.bottomBar.addAction({ id: 'refresh', iconName: 'lucide:refreshCw', onClick: () => location.reload() });
1038
+ appui.bottomBar.removeAction('refresh');
1039
+
1040
+ appui.setBottomBarVisible(false);
1041
+ ```
1042
+
1043
+ **Key Features:**
1044
+ - Configurable status widgets with icons, labels, and colored status indicators
1045
+ - Loading spinner state for widgets
1046
+ - Contextual actions with icon buttons
1047
+ - Left/right positioning for both widgets and actions
1048
+ - Tooltips on hover
1049
+ - Context menu support per widget
1050
+
889
1051
  #### `DeesAppuiTabs`
890
1052
  Reusable tab component with horizontal/vertical layout support.
891
1053
 
@@ -1007,7 +1169,7 @@ A responsive grid component for displaying statistical data with various visuali
1007
1169
  value: 125420,
1008
1170
  unit: '$',
1009
1171
  type: 'number',
1010
- icon: 'faDollarSign',
1172
+ icon: 'lucide:dollarSign',
1011
1173
  description: '+12.5% from last month',
1012
1174
  color: '#22c55e'
1013
1175
  },
@@ -1016,7 +1178,7 @@ A responsive grid component for displaying statistical data with various visuali
1016
1178
  title: 'CPU Usage',
1017
1179
  value: 73,
1018
1180
  type: 'gauge',
1019
- icon: 'faMicrochip',
1181
+ icon: 'lucide:cpu',
1020
1182
  gaugeOptions: {
1021
1183
  min: 0, max: 100,
1022
1184
  thresholds: [
@@ -1032,8 +1194,22 @@ A responsive grid component for displaying statistical data with various visuali
1032
1194
  value: '1.2k',
1033
1195
  unit: '/min',
1034
1196
  type: 'trend',
1035
- icon: 'faServer',
1197
+ icon: 'lucide:server',
1036
1198
  trendData: [45, 52, 38, 65, 72, 68, 75, 82, 79, 85, 88, 92]
1199
+ },
1200
+ {
1201
+ id: 'cores',
1202
+ title: 'CPU Cores',
1203
+ value: 0,
1204
+ type: 'cpuCores',
1205
+ icon: 'lucide:cpu',
1206
+ columnSpan: 2,
1207
+ coresData: [
1208
+ { id: 0, usage: 45, label: '0' },
1209
+ { id: 1, usage: 72, label: '1' },
1210
+ { id: 2, usage: 30, label: '2' },
1211
+ { id: 3, usage: 88, label: '3' }
1212
+ ]
1037
1213
  }
1038
1214
  ]}
1039
1215
  .minTileWidth=${250}
@@ -1041,6 +1217,8 @@ A responsive grid component for displaying statistical data with various visuali
1041
1217
  ></dees-statsgrid>
1042
1218
  ```
1043
1219
 
1220
+ **Tile Types:** `number`, `gauge`, `percentage`, `trend`, `text`, `multiPercentage`, `cpuCores`
1221
+
1044
1222
  #### `DeesPagination`
1045
1223
  Pagination component for navigating through large datasets.
1046
1224
 
@@ -1189,7 +1367,7 @@ Progress indicator component for tracking completion status.
1189
1367
  Theme provider component that wraps children and provides CSS custom properties for consistent theming.
1190
1368
 
1191
1369
  ```typescript
1192
- // Basic usage - wrap your app
1370
+ // Basic usage wrap your app
1193
1371
  <dees-theme>
1194
1372
  <my-app></my-app>
1195
1373
  </dees-theme>
@@ -1217,7 +1395,7 @@ Theme provider component that wraps children and provides CSS custom properties
1217
1395
 
1218
1396
  ---
1219
1397
 
1220
- ### Development Components
1398
+ ### Workspace / IDE Components
1221
1399
 
1222
1400
  #### `DeesEditor`
1223
1401
  Code editor component with syntax highlighting and code completion, powered by Monaco Editor.
@@ -1236,28 +1414,6 @@ Code editor component with syntax highlighting and code completion, powered by M
1236
1414
  ></dees-editor>
1237
1415
  ```
1238
1416
 
1239
- #### `DeesEditorMarkdown`
1240
- Markdown editor component with live preview.
1241
-
1242
- ```typescript
1243
- <dees-editor-markdown
1244
- .value=${markdown}
1245
- @change=${handleMarkdownChange}
1246
- .options=${{ preview: true, toolbar: true, spellcheck: true }}
1247
- ></dees-editor-markdown>
1248
- ```
1249
-
1250
- #### `DeesEditorMarkdownoutlet`
1251
- Markdown preview component for rendering markdown content.
1252
-
1253
- ```typescript
1254
- <dees-editor-markdownoutlet
1255
- .markdown=${markdownContent}
1256
- .theme=${'github'}
1257
- allowHtml={false}
1258
- ></dees-editor-markdownoutlet>
1259
- ```
1260
-
1261
1417
  #### `DeesTerminal`
1262
1418
  Terminal emulator component for command-line interface.
1263
1419
 
@@ -1286,7 +1442,7 @@ Component for managing application updates and version control.
1286
1442
 
1287
1443
  ---
1288
1444
 
1289
- ### Auth & Utilities Components
1445
+ ### Pre-built Templates
1290
1446
 
1291
1447
  #### `DeesSimpleAppdash`
1292
1448
  Simple application dashboard component for quick prototyping.
@@ -1360,6 +1516,8 @@ interface IMenuItem {
1360
1516
  action: () => void;
1361
1517
  badge?: string | number;
1362
1518
  badgeVariant?: 'default' | 'success' | 'warning' | 'error';
1519
+ closeable?: boolean;
1520
+ onClose?: () => void;
1363
1521
  }
1364
1522
 
1365
1523
  // Menu group interface for organized menus
@@ -1375,11 +1533,13 @@ interface IViewDefinition {
1375
1533
  id: string;
1376
1534
  name: string;
1377
1535
  iconName?: string;
1378
- content: string | HTMLElement | (() => TemplateResult);
1536
+ content: string | (new () => HTMLElement) | (() => TemplateResult) | (() => Promise<any>);
1379
1537
  secondaryMenu?: ISecondaryMenuGroup[];
1380
1538
  contentTabs?: IMenuItem[];
1381
1539
  route?: string;
1382
1540
  badge?: string | number;
1541
+ badgeVariant?: 'default' | 'success' | 'warning' | 'error';
1542
+ cache?: boolean;
1383
1543
  }
1384
1544
 
1385
1545
  // Activity log entry
@@ -1392,6 +1552,36 @@ interface IActivityEntry {
1392
1552
  iconName?: string;
1393
1553
  data?: Record<string, unknown>;
1394
1554
  }
1555
+
1556
+ // Bottom bar widget
1557
+ interface IBottomBarWidget {
1558
+ id: string;
1559
+ iconName?: string;
1560
+ label?: string;
1561
+ status?: 'idle' | 'active' | 'success' | 'warning' | 'error';
1562
+ tooltip?: string;
1563
+ loading?: boolean;
1564
+ onClick?: () => void;
1565
+ position?: 'left' | 'right';
1566
+ order?: number;
1567
+ }
1568
+
1569
+ // Bottom bar action button
1570
+ interface IBottomBarAction {
1571
+ id: string;
1572
+ iconName: string;
1573
+ tooltip?: string;
1574
+ onClick: () => void | Promise<void>;
1575
+ disabled?: boolean;
1576
+ position?: 'left' | 'right';
1577
+ }
1578
+
1579
+ // View activation context (passed to onActivate)
1580
+ interface IViewActivationContext {
1581
+ appui: DeesAppui;
1582
+ viewId: string;
1583
+ params?: Record<string, string>;
1584
+ }
1395
1585
  ```
1396
1586
 
1397
1587
  ---