diff --git a/changelog.md b/changelog.md
index 06400ec..6d919a2 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,19 @@
# Changelog
+## 2025-12-08 - 2.0.7 - fix(structure)
+Add many new UI components, input controls, charts, editors, and demos
+
+- Introduce App UI components: dees-appui-appbar, dees-appui-mainmenu, dees-appui-mainselector, dees-appui-maincontent, dees-appui-activitylog, dees-appui-profiledropdown, dees-appui-tabs, dees-appui-base, dees-appui-view (templates, styles and demos included).
+- Add a comprehensive set of input components: dees-input-text, dees-input-checkbox, dees-input-dropdown, dees-input-fileupload, dees-input-datepicker, dees-input-phone, dees-input-iban, dees-input-quantityselector, dees-input-list, dees-input-typelist, dees-input-tags, dees-input-multitoggle, dees-input-radiogroup, dees-input-richtext and supporting demos/styles/templates.
+- Add form primitives and integration: dees-form and dees-form-submit with validation, collection and demo pages showcasing usage.
+- Add button family and utilities: dees-button (with updated variants, sizes, status handling and demo), dees-button-group and dees-button-exit.
+- Add charting components: dees-chart-area (ApexCharts integration) and dees-chart-log (log viewer) plus rich demo scenarios and realtime features.
+- Add data display components: dees-dataview-codebox (highlight.js integration) and dees-dataview-statusobject with copy/context behaviours and demos.
+- Add editor tooling: dees-editor (Monaco loader/version management), dees-editor-markdown and dees-editor-markdownoutlet; also TipTap-based richtext input with toolbar and link handling.
+- Add global utilities and infra: dees-toast (programmatic toast API and containers), z-index registry and theme/font helpers (fonts, color tokens), plus many styles and accessibility/keyboard improvements across components.
+- Export and index updates: new group exports added to ts_web/elements index and many index.ts files to expose the new components and demos.
+- Extensive demos and showcase pages added (input-showcase, component demos) to illustrate integration, keyboard navigation, theming and form flows.
+
## 2025-12-06 - 2.0.6 - fix(dees-input-richtext)
Initialize editor and link input element references in firstUpdated to ensure they exist before editor initialization.
diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts
index 7d8adfc..ac060f5 100644
--- a/ts_web/00_commitinfo_data.ts
+++ b/ts_web/00_commitinfo_data.ts
@@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-catalog',
- version: '2.0.6',
+ version: '2.0.7',
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
}
diff --git a/ts_web/elements/dees-appui-activitylog/dees-appui-activitylog.ts b/ts_web/elements/00group-appui/dees-appui-activitylog/dees-appui-activitylog.ts
similarity index 98%
rename from ts_web/elements/dees-appui-activitylog/dees-appui-activitylog.ts
rename to ts_web/elements/00group-appui/dees-appui-activitylog/dees-appui-activitylog.ts
index 72b1ba5..ce40046 100644
--- a/ts_web/elements/dees-appui-activitylog/dees-appui-activitylog.ts
+++ b/ts_web/elements/00group-appui/dees-appui-activitylog/dees-appui-activitylog.ts
@@ -1,4 +1,4 @@
-import * as plugins from '../00plugins.js';
+import * as plugins from '../../00plugins.js';
import {
DeesElement,
type TemplateResult,
@@ -10,8 +10,8 @@ import {
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
-import { DeesContextmenu } from '../dees-contextmenu/dees-contextmenu.js';
-import '../dees-icon/dees-icon.js';
+import { DeesContextmenu } from '../../dees-contextmenu/dees-contextmenu.js';
+import '../../dees-icon/dees-icon.js';
@customElement('dees-appui-activitylog')
export class DeesAppuiActivitylog extends DeesElement {
diff --git a/ts_web/elements/00group-appui/dees-appui-activitylog/index.ts b/ts_web/elements/00group-appui/dees-appui-activitylog/index.ts
new file mode 100644
index 0000000..d67c0a9
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-activitylog/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-activitylog.js';
diff --git a/ts_web/elements/dees-appui-appbar/component.ts b/ts_web/elements/00group-appui/dees-appui-appbar/component.ts
similarity index 98%
rename from ts_web/elements/dees-appui-appbar/component.ts
rename to ts_web/elements/00group-appui/dees-appui-appbar/component.ts
index 3249859..b4ce173 100644
--- a/ts_web/elements/dees-appui-appbar/component.ts
+++ b/ts_web/elements/00group-appui/dees-appui-appbar/component.ts
@@ -8,15 +8,15 @@ import {
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
-import * as interfaces from '../interfaces/index.js';
-import * as plugins from '../00plugins.js';
+import * as interfaces from '../../interfaces/index.js';
+import * as plugins from '../../00plugins.js';
import { demoFunc } from './demo.js';
import { appuiAppbarStyles } from './styles.js';
import { renderAppuiAppbar } from './template.js';
// Import required components
-import '../dees-icon/dees-icon.js';
-import '../dees-windowcontrols/dees-windowcontrols.js';
+import '../../dees-icon/dees-icon.js';
+import '../../dees-windowcontrols/dees-windowcontrols.js';
import '../dees-appui-profiledropdown/dees-appui-profiledropdown.js';
declare global {
diff --git a/ts_web/elements/dees-appui-appbar/demo.ts b/ts_web/elements/00group-appui/dees-appui-appbar/demo.ts
similarity index 99%
rename from ts_web/elements/dees-appui-appbar/demo.ts
rename to ts_web/elements/00group-appui/dees-appui-appbar/demo.ts
index 8b3f213..cc8ee5e 100644
--- a/ts_web/elements/dees-appui-appbar/demo.ts
+++ b/ts_web/elements/00group-appui/dees-appui-appbar/demo.ts
@@ -1,6 +1,6 @@
import { html, css } from '@design.estate/dees-element';
import type { DeesAppuiBar } from './component.js';
-import type { IAppBarMenuItem } from '../interfaces/appbarmenuitem.js';
+import type { IAppBarMenuItem } from '../../interfaces/appbarmenuitem.js';
import '@design.estate/dees-wcctools/demotools';
import './component.js';
diff --git a/ts_web/elements/00group-appui/dees-appui-appbar/index.ts b/ts_web/elements/00group-appui/dees-appui-appbar/index.ts
new file mode 100644
index 0000000..16900c4
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-appbar/index.ts
@@ -0,0 +1 @@
+export * from './component.js';
diff --git a/ts_web/elements/dees-appui-appbar/styles.ts b/ts_web/elements/00group-appui/dees-appui-appbar/styles.ts
similarity index 100%
rename from ts_web/elements/dees-appui-appbar/styles.ts
rename to ts_web/elements/00group-appui/dees-appui-appbar/styles.ts
diff --git a/ts_web/elements/dees-appui-appbar/template.ts b/ts_web/elements/00group-appui/dees-appui-appbar/template.ts
similarity index 100%
rename from ts_web/elements/dees-appui-appbar/template.ts
rename to ts_web/elements/00group-appui/dees-appui-appbar/template.ts
diff --git a/ts_web/elements/dees-appui-base/dees-appui-base.demo.ts b/ts_web/elements/00group-appui/dees-appui-base/dees-appui-base.demo.ts
similarity index 80%
rename from ts_web/elements/dees-appui-base/dees-appui-base.demo.ts
rename to ts_web/elements/00group-appui/dees-appui-base/dees-appui-base.demo.ts
index bb2f9c2..52ee680 100644
--- a/ts_web/elements/dees-appui-base/dees-appui-base.demo.ts
+++ b/ts_web/elements/00group-appui/dees-appui-base/dees-appui-base.demo.ts
@@ -1,9 +1,10 @@
import { html, css } from '@design.estate/dees-element';
import type { DeesAppuiBase } from '../dees-appui-base/dees-appui-base.js';
-import type { IAppBarMenuItem } from '../interfaces/appbarmenuitem.js';
-import type { ITab } from '../interfaces/tab.js';
-import type { ISelectionOption } from '../interfaces/selectionoption.js';
-import * as plugins from '../00plugins.js';
+import type { IAppBarMenuItem } from '../../interfaces/appbarmenuitem.js';
+import type { ITab } from '../../interfaces/tab.js';
+import type { ISelectionOption } from '../../interfaces/selectionoption.js';
+import type { IMenuGroup } from '../../interfaces/menugroup.js';
+import * as plugins from '../../00plugins.js';
import '@design.estate/dees-wcctools/demotools';
export const demoFunc = () => {
@@ -63,12 +64,35 @@ export const demoFunc = () => {
}
];
- // Main menu tabs (left sidebar)
- const mainMenuTabs: ITab[] = [
- { key: 'dashboard', iconName: 'lucide:home', action: () => console.log('Dashboard selected') },
- { key: 'projects', iconName: 'lucide:folder', action: () => console.log('Projects selected') },
- { key: 'analytics', iconName: 'lucide:lineChart', action: () => console.log('Analytics selected') },
- { key: 'settings', iconName: 'lucide:settings', action: () => console.log('Settings selected') },
+ // Main menu groups (left sidebar)
+ const mainMenuGroups: IMenuGroup[] = [
+ {
+ tabs: [
+ { key: 'Dashboard', iconName: 'lucide:home', action: () => console.log('Dashboard selected') },
+ { key: 'Inbox', iconName: 'lucide:inbox', action: () => console.log('Inbox selected') },
+ ]
+ },
+ {
+ name: 'Workspace',
+ tabs: [
+ { key: 'Projects', iconName: 'lucide:folder', action: () => console.log('Projects selected') },
+ { key: 'Tasks', iconName: 'lucide:checkSquare', action: () => console.log('Tasks selected') },
+ { key: 'Documents', iconName: 'lucide:fileText', action: () => console.log('Documents selected') },
+ ]
+ },
+ {
+ name: 'Analytics',
+ tabs: [
+ { key: 'Reports', iconName: 'lucide:barChart3', action: () => console.log('Reports selected') },
+ { key: 'Insights', iconName: 'lucide:lightbulb', action: () => console.log('Insights selected') },
+ ]
+ }
+ ];
+
+ // Main menu bottom tabs (pinned to bottom)
+ const mainMenuBottomTabs: ITab[] = [
+ { key: 'Settings', iconName: 'lucide:settings', action: () => console.log('Settings selected') },
+ { key: 'Help', iconName: 'lucide:helpCircle', action: () => console.log('Help selected') },
];
// Selector options (second sidebar)
@@ -127,7 +151,10 @@ export const demoFunc = () => {
.appbarProfileMenuItems=${profileMenuItems}
.appbarShowWindowControls=${true}
.appbarShowSearch=${true}
- .mainmenuTabs=${mainMenuTabs}
+ .mainmenuLogoIcon=${'lucide:box'}
+ .mainmenuLogoText=${'Acme App'}
+ .mainmenuGroups=${mainMenuGroups}
+ .mainmenuBottomTabs=${mainMenuBottomTabs}
.mainselectorOptions=${selectorOptions}
.maincontentTabs=${mainContentTabs}
@appbar-menu-select=${(e: CustomEvent) => console.log('Menu selected:', e.detail)}
diff --git a/ts_web/elements/dees-appui-base/dees-appui-base.ts b/ts_web/elements/00group-appui/dees-appui-base/dees-appui-base.ts
similarity index 90%
rename from ts_web/elements/dees-appui-base/dees-appui-base.ts
rename to ts_web/elements/00group-appui/dees-appui-base/dees-appui-base.ts
index d3a10bc..675d398 100644
--- a/ts_web/elements/dees-appui-base/dees-appui-base.ts
+++ b/ts_web/elements/00group-appui/dees-appui-base/dees-appui-base.ts
@@ -8,8 +8,8 @@ import {
cssManager,
state,
} from '@design.estate/dees-element';
-import * as interfaces from '../interfaces/index.js';
-import * as plugins from '../00plugins.js';
+import * as interfaces from '../../interfaces/index.js';
+import * as plugins from '../../00plugins.js';
import type { DeesAppuiBar } from '../dees-appui-appbar/index.js';
import type { DeesAppuiMainmenu } from '../dees-appui-mainmenu/dees-appui-mainmenu.js';
import type { DeesAppuiMainselector } from '../dees-appui-mainselector/dees-appui-mainselector.js';
@@ -57,6 +57,18 @@ export class DeesAppuiBase extends DeesElement {
accessor appbarShowSearch: boolean = false;
// Properties for mainmenu
+ @property({ type: String })
+ accessor mainmenuLogoIcon: string = '';
+
+ @property({ type: String })
+ accessor mainmenuLogoText: string = '';
+
+ @property({ type: Array })
+ accessor mainmenuGroups: interfaces.IMenuGroup[] = [];
+
+ @property({ type: Array })
+ accessor mainmenuBottomTabs: interfaces.ITab[] = [];
+
@property({ type: Array })
accessor mainmenuTabs: interfaces.ITab[] = [];
@@ -105,7 +117,8 @@ export class DeesAppuiBase extends DeesElement {
height: calc(100% - 40px);
width: 100%;
display: grid;
- grid-template-columns: 60px 240px 1fr 240px;
+ grid-template-columns: 200px 240px 1fr 240px;
+ grid-template-rows: 1fr;
}
`,
];
@@ -130,6 +143,10 @@ export class DeesAppuiBase extends DeesElement {
>
this.handleMainmenuTabSelect(e)}
diff --git a/ts_web/elements/00group-appui/dees-appui-base/index.ts b/ts_web/elements/00group-appui/dees-appui-base/index.ts
new file mode 100644
index 0000000..5298b3a
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-base/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-base.js';
diff --git a/ts_web/elements/dees-appui-maincontent/dees-appui-maincontent.ts b/ts_web/elements/00group-appui/dees-appui-maincontent/dees-appui-maincontent.ts
similarity index 98%
rename from ts_web/elements/dees-appui-maincontent/dees-appui-maincontent.ts
rename to ts_web/elements/00group-appui/dees-appui-maincontent/dees-appui-maincontent.ts
index 8b49298..3ab1f4f 100644
--- a/ts_web/elements/dees-appui-maincontent/dees-appui-maincontent.ts
+++ b/ts_web/elements/00group-appui/dees-appui-maincontent/dees-appui-maincontent.ts
@@ -1,4 +1,4 @@
-import * as interfaces from '../interfaces/index.js';
+import * as interfaces from '../../interfaces/index.js';
import {
DeesElement,
diff --git a/ts_web/elements/00group-appui/dees-appui-maincontent/index.ts b/ts_web/elements/00group-appui/dees-appui-maincontent/index.ts
new file mode 100644
index 0000000..7ce7008
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-maincontent/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-maincontent.js';
diff --git a/ts_web/elements/00group-appui/dees-appui-mainmenu/dees-appui-mainmenu.ts b/ts_web/elements/00group-appui/dees-appui-mainmenu/dees-appui-mainmenu.ts
new file mode 100644
index 0000000..90740e0
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-mainmenu/dees-appui-mainmenu.ts
@@ -0,0 +1,352 @@
+import * as plugins from '../../00plugins.js';
+import * as interfaces from '../../interfaces/index.js';
+import { zIndexLayers } from '../../00zindex.js';
+
+import {
+ DeesElement,
+ type TemplateResult,
+ property,
+ customElement,
+ html,
+ css,
+ cssManager,
+} from '@design.estate/dees-element';
+import { DeesContextmenu } from '../../dees-contextmenu/dees-contextmenu.js';
+
+/**
+ * the most left menu
+ * usually used as organization selector
+ */
+@customElement('dees-appui-mainmenu')
+export class DeesAppuiMainmenu extends DeesElement {
+ public static demo = () => html`
+
+
+ console.log('Dashboard') },
+ { key: 'Inbox', iconName: 'lucide:inbox', action: () => console.log('Inbox') },
+ ]
+ },
+ {
+ name: 'Workspace',
+ tabs: [
+ { key: 'Projects', iconName: 'lucide:folder', action: () => console.log('Projects') },
+ { key: 'Tasks', iconName: 'lucide:checkSquare', action: () => console.log('Tasks') },
+ { key: 'Documents', iconName: 'lucide:fileText', action: () => console.log('Documents') },
+ ]
+ },
+ {
+ name: 'Analytics',
+ tabs: [
+ { key: 'Reports', iconName: 'lucide:barChart3', action: () => console.log('Reports') },
+ { key: 'Insights', iconName: 'lucide:lightbulb', action: () => console.log('Insights') },
+ ]
+ }
+ ]}
+ .bottomTabs=${[
+ { key: 'Settings', iconName: 'lucide:settings', action: () => console.log('Settings') },
+ { key: 'Help', iconName: 'lucide:helpCircle', action: () => console.log('Help') },
+ ]}
+ >
+
+ `;
+
+ // INSTANCE
+
+ // Logo properties
+ @property({ type: String })
+ accessor logoIcon: string = '';
+
+ @property({ type: String })
+ accessor logoText: string = '';
+
+ // Menu groups (new way)
+ @property({ type: Array })
+ accessor menuGroups: interfaces.IMenuGroup[] = [];
+
+ // Bottom tabs (pinned to bottom)
+ @property({ type: Array })
+ accessor bottomTabs: interfaces.ITab[] = [];
+
+ // Legacy tabs property (for backward compatibility)
+ @property({ type: Array })
+ accessor tabs: interfaces.ITab[] = [];
+
+ @property()
+ accessor selectedTab: interfaces.ITab;
+
+ public static styles = [
+ cssManager.defaultStyles,
+ css`
+ :host {
+ display: block;
+ height: 100%;
+ }
+
+ .mainContainer {
+ --menuWidth: 200px;
+ color: ${cssManager.bdTheme('#666', '#ccc')};
+ z-index: ${zIndexLayers.fixed.appBar};
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ width: var(--menuWidth);
+ height: 100%;
+ background: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
+ user-select: none;
+ border-right: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
+ font-family: 'Geist Sans', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
+ }
+
+ /* Logo Section */
+ .logoSection {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 16px 14px;
+ border-bottom: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
+ flex-shrink: 0;
+ }
+
+ .logoSection dees-icon {
+ font-size: 22px;
+ color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ }
+
+ .logoSection .logoText {
+ font-size: 15px;
+ font-weight: 600;
+ color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ /* Middle Section (scrollable) */
+ .menuSection {
+ flex: 1;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 8px 0;
+ }
+
+ .menuSection::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ .menuSection::-webkit-scrollbar-track {
+ background: transparent;
+ }
+
+ .menuSection::-webkit-scrollbar-thumb {
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.15)', 'rgba(255, 255, 255, 0.15)')};
+ border-radius: 3px;
+ }
+
+ .menuSection::-webkit-scrollbar-thumb:hover {
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.25)', 'rgba(255, 255, 255, 0.25)')};
+ }
+
+ /* Menu Group */
+ .menuGroup {
+ padding: 0 8px;
+ margin-bottom: 8px;
+ }
+
+ .menuGroup:last-child {
+ margin-bottom: 0;
+ }
+
+ .groupHeader {
+ padding: 8px 12px 6px;
+ font-size: 11px;
+ font-weight: 600;
+ color: ${cssManager.bdTheme('#737373', '#737373')};
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ }
+
+ .groupTabs {
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+ }
+
+ /* Tab Item */
+ .tab {
+ position: relative;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 10px 12px;
+ font-size: 13px;
+ font-weight: 500;
+ border-radius: 6px;
+ cursor: pointer;
+ transition: all 0.15s ease;
+ color: ${cssManager.bdTheme('#525252', '#a3a3a3')};
+ }
+
+ .tab:hover {
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.04)', 'rgba(255, 255, 255, 0.06)')};
+ color: ${cssManager.bdTheme('#262626', '#e5e5e5')};
+ }
+
+ .tab:active {
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
+ }
+
+ .tab.selectedTab {
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.06)', 'rgba(255, 255, 255, 0.08)')};
+ color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ }
+
+ .tab.selectedTab::before {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 50%;
+ transform: translateY(-50%);
+ width: 3px;
+ height: 16px;
+ background: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
+ border-radius: 0 2px 2px 0;
+ }
+
+ .tab dees-icon {
+ font-size: 18px;
+ opacity: 0.85;
+ flex-shrink: 0;
+ }
+
+ .tab.selectedTab dees-icon {
+ opacity: 1;
+ }
+
+ .tab .tabLabel {
+ flex: 1;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ /* Bottom Section */
+ .bottomSection {
+ flex-shrink: 0;
+ padding: 8px;
+ border-top: 1px solid ${cssManager.bdTheme('#e5e5e5', '#1a1a1a')};
+ display: flex;
+ flex-direction: column;
+ gap: 2px;
+ }
+ `,
+ ];
+
+ public render(): TemplateResult {
+ // Get all tabs for selection (from groups or legacy tabs)
+ const allTabs = this.getAllTabs();
+
+ return html`
+ {
+ DeesContextmenu.openContextMenuWithOptions(eventArg, [{
+ name: 'app settings',
+ action: async () => {},
+ iconName: 'gear',
+ }])
+ }}>
+ ${this.logoIcon || this.logoText ? html`
+
+ ${this.logoIcon ? html`` : ''}
+ ${this.logoText ? html`${this.logoText}` : ''}
+
+ ` : ''}
+
+
+
+ ${this.bottomTabs.length > 0 ? html`
+
+ ${this.bottomTabs.map((tabArg) => this.renderTab(tabArg))}
+
+ ` : ''}
+
+ `;
+ }
+
+ private renderMenuGroups(): TemplateResult {
+ return html`
+ ${this.menuGroups.map((group) => html`
+
+ `)}
+ `;
+ }
+
+ private renderLegacyTabs(): TemplateResult {
+ return html`
+
+ `;
+ }
+
+ private renderTab(tabArg: interfaces.ITab): TemplateResult {
+ return html`
+ {
+ this.updateTab(tabArg);
+ }}"
+ >
+
+ ${tabArg.key}
+
+ `;
+ }
+
+ private getAllTabs(): interfaces.ITab[] {
+ if (this.menuGroups.length > 0) {
+ const groupTabs = this.menuGroups.flatMap(group => group.tabs);
+ return [...groupTabs, ...this.bottomTabs];
+ }
+ return [...this.tabs, ...this.bottomTabs];
+ }
+
+ updateTab(tabArg: interfaces.ITab) {
+ this.selectedTab = tabArg;
+ this.selectedTab.action();
+
+ // Emit tab-select event
+ this.dispatchEvent(new CustomEvent('tab-select', {
+ detail: { tab: tabArg },
+ bubbles: true,
+ composed: true
+ }));
+ }
+
+ firstUpdated() {
+ const allTabs = this.getAllTabs();
+ if (allTabs.length > 0) {
+ this.updateTab(allTabs[0]);
+ }
+ }
+}
diff --git a/ts_web/elements/00group-appui/dees-appui-mainmenu/index.ts b/ts_web/elements/00group-appui/dees-appui-mainmenu/index.ts
new file mode 100644
index 0000000..fb6fbb1
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-mainmenu/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-mainmenu.js';
diff --git a/ts_web/elements/dees-appui-mainselector/dees-appui-mainselector.ts b/ts_web/elements/00group-appui/dees-appui-mainselector/dees-appui-mainselector.ts
similarity index 96%
rename from ts_web/elements/dees-appui-mainselector/dees-appui-mainselector.ts
rename to ts_web/elements/00group-appui/dees-appui-mainselector/dees-appui-mainselector.ts
index b32ed60..dfe385d 100644
--- a/ts_web/elements/dees-appui-mainselector/dees-appui-mainselector.ts
+++ b/ts_web/elements/00group-appui/dees-appui-mainselector/dees-appui-mainselector.ts
@@ -1,8 +1,8 @@
-import * as plugins from '../00plugins.js';
-import * as interfaces from '../interfaces/index.js';
+import * as plugins from '../../00plugins.js';
+import * as interfaces from '../../interfaces/index.js';
-import { DeesContextmenu } from '../dees-contextmenu/dees-contextmenu.js';
-import '../dees-icon/dees-icon.js';
+import { DeesContextmenu } from '../../dees-contextmenu/dees-contextmenu.js';
+import '../../dees-icon/dees-icon.js';
import {
DeesElement,
diff --git a/ts_web/elements/00group-appui/dees-appui-mainselector/index.ts b/ts_web/elements/00group-appui/dees-appui-mainselector/index.ts
new file mode 100644
index 0000000..85bf178
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-mainselector/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-mainselector.js';
diff --git a/ts_web/elements/dees-appui-profiledropdown/dees-appui-profiledropdown.ts b/ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.ts
similarity index 99%
rename from ts_web/elements/dees-appui-profiledropdown/dees-appui-profiledropdown.ts
rename to ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.ts
index 362b469..611ae68 100644
--- a/ts_web/elements/dees-appui-profiledropdown/dees-appui-profiledropdown.ts
+++ b/ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.ts
@@ -1,5 +1,5 @@
-import * as plugins from '../00plugins.js';
-import { zIndexLayers } from '../00zindex.js';
+import * as plugins from '../../00plugins.js';
+import { zIndexLayers } from '../../00zindex.js';
import {
DeesElement,
diff --git a/ts_web/elements/00group-appui/dees-appui-profiledropdown/index.ts b/ts_web/elements/00group-appui/dees-appui-profiledropdown/index.ts
new file mode 100644
index 0000000..8aae4a3
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-profiledropdown/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-profiledropdown.js';
diff --git a/ts_web/elements/dees-appui-tabs/dees-appui-tabs.ts b/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts
similarity index 99%
rename from ts_web/elements/dees-appui-tabs/dees-appui-tabs.ts
rename to ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts
index 25a1d40..4688fb6 100644
--- a/ts_web/elements/dees-appui-tabs/dees-appui-tabs.ts
+++ b/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts
@@ -1,4 +1,4 @@
-import * as interfaces from '../interfaces/index.js';
+import * as interfaces from '../../interfaces/index.js';
import {
DeesElement,
diff --git a/ts_web/elements/00group-appui/dees-appui-tabs/index.ts b/ts_web/elements/00group-appui/dees-appui-tabs/index.ts
new file mode 100644
index 0000000..97b2608
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-tabs/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-tabs.js';
diff --git a/ts_web/elements/dees-appui-view/dees-appui-view.ts b/ts_web/elements/00group-appui/dees-appui-view/dees-appui-view.ts
similarity index 98%
rename from ts_web/elements/dees-appui-view/dees-appui-view.ts
rename to ts_web/elements/00group-appui/dees-appui-view/dees-appui-view.ts
index d37c998..c63b367 100644
--- a/ts_web/elements/dees-appui-view/dees-appui-view.ts
+++ b/ts_web/elements/00group-appui/dees-appui-view/dees-appui-view.ts
@@ -1,4 +1,4 @@
-import * as interfaces from '../interfaces/index.js';
+import * as interfaces from '../../interfaces/index.js';
import {
DeesElement,
diff --git a/ts_web/elements/00group-appui/dees-appui-view/index.ts b/ts_web/elements/00group-appui/dees-appui-view/index.ts
new file mode 100644
index 0000000..613865c
--- /dev/null
+++ b/ts_web/elements/00group-appui/dees-appui-view/index.ts
@@ -0,0 +1 @@
+export * from './dees-appui-view.js';
diff --git a/ts_web/elements/00group-appui/index.ts b/ts_web/elements/00group-appui/index.ts
new file mode 100644
index 0000000..cdc0e19
--- /dev/null
+++ b/ts_web/elements/00group-appui/index.ts
@@ -0,0 +1,10 @@
+// App UI Components
+export * from './dees-appui-activitylog/index.js';
+export * from './dees-appui-appbar/index.js';
+export * from './dees-appui-base/index.js';
+export * from './dees-appui-maincontent/index.js';
+export * from './dees-appui-mainmenu/index.js';
+export * from './dees-appui-mainselector/index.js';
+export * from './dees-appui-profiledropdown/index.js';
+export * from './dees-appui-tabs/index.js';
+export * from './dees-appui-view/index.js';
diff --git a/ts_web/elements/dees-button-exit/dees-button-exit.ts b/ts_web/elements/00group-button/dees-button-exit/dees-button-exit.ts
similarity index 100%
rename from ts_web/elements/dees-button-exit/dees-button-exit.ts
rename to ts_web/elements/00group-button/dees-button-exit/dees-button-exit.ts
diff --git a/ts_web/elements/00group-button/dees-button-exit/index.ts b/ts_web/elements/00group-button/dees-button-exit/index.ts
new file mode 100644
index 0000000..39b7f7f
--- /dev/null
+++ b/ts_web/elements/00group-button/dees-button-exit/index.ts
@@ -0,0 +1 @@
+export * from './dees-button-exit.js';
diff --git a/ts_web/elements/dees-button-group/dees-button-group.demo.ts b/ts_web/elements/00group-button/dees-button-group/dees-button-group.demo.ts
similarity index 100%
rename from ts_web/elements/dees-button-group/dees-button-group.demo.ts
rename to ts_web/elements/00group-button/dees-button-group/dees-button-group.demo.ts
diff --git a/ts_web/elements/dees-button-group/dees-button-group.ts b/ts_web/elements/00group-button/dees-button-group/dees-button-group.ts
similarity index 100%
rename from ts_web/elements/dees-button-group/dees-button-group.ts
rename to ts_web/elements/00group-button/dees-button-group/dees-button-group.ts
diff --git a/ts_web/elements/00group-button/dees-button-group/index.ts b/ts_web/elements/00group-button/dees-button-group/index.ts
new file mode 100644
index 0000000..761ffe9
--- /dev/null
+++ b/ts_web/elements/00group-button/dees-button-group/index.ts
@@ -0,0 +1 @@
+export * from './dees-button-group.js';
diff --git a/ts_web/elements/dees-button/dees-button.demo.ts b/ts_web/elements/00group-button/dees-button/dees-button.demo.ts
similarity index 98%
rename from ts_web/elements/dees-button/dees-button.demo.ts
rename to ts_web/elements/00group-button/dees-button/dees-button.demo.ts
index 0dfd634..d201e42 100644
--- a/ts_web/elements/dees-button/dees-button.demo.ts
+++ b/ts_web/elements/00group-button/dees-button/dees-button.demo.ts
@@ -1,10 +1,10 @@
import { html, css, cssManager, domtools } from '@design.estate/dees-element';
import '@design.estate/dees-wcctools/demotools';
-import '../dees-panel/dees-panel.js';
-import '../dees-form/dees-form.js';
-import '../dees-form-submit/dees-form-submit.js';
-import '../dees-input-text/dees-input-text.js';
-import '../dees-icon/dees-icon.js';
+import '../../dees-panel/dees-panel.js';
+import '../../00group-form/dees-form/dees-form.js';
+import '../../00group-form/dees-form-submit/dees-form-submit.js';
+import '../../00group-input/dees-input-text/dees-input-text.js';
+import '../../dees-icon/dees-icon.js';
import type { DeesButton } from '../dees-button/dees-button.js';
export const demoFunc = () => html`
diff --git a/ts_web/elements/dees-button/dees-button.ts b/ts_web/elements/00group-button/dees-button/dees-button.ts
similarity index 100%
rename from ts_web/elements/dees-button/dees-button.ts
rename to ts_web/elements/00group-button/dees-button/dees-button.ts
diff --git a/ts_web/elements/00group-button/dees-button/index.ts b/ts_web/elements/00group-button/dees-button/index.ts
new file mode 100644
index 0000000..7ea8526
--- /dev/null
+++ b/ts_web/elements/00group-button/dees-button/index.ts
@@ -0,0 +1 @@
+export * from './dees-button.js';
diff --git a/ts_web/elements/00group-button/index.ts b/ts_web/elements/00group-button/index.ts
new file mode 100644
index 0000000..07dfaf1
--- /dev/null
+++ b/ts_web/elements/00group-button/index.ts
@@ -0,0 +1,4 @@
+// Button Components
+export * from './dees-button/index.js';
+export * from './dees-button-exit/index.js';
+export * from './dees-button-group/index.js';
diff --git a/ts_web/elements/dees-chart-area/component.ts b/ts_web/elements/00group-chart/dees-chart-area/component.ts
similarity index 100%
rename from ts_web/elements/dees-chart-area/component.ts
rename to ts_web/elements/00group-chart/dees-chart-area/component.ts
diff --git a/ts_web/elements/dees-chart-area/demo.ts b/ts_web/elements/00group-chart/dees-chart-area/demo.ts
similarity index 100%
rename from ts_web/elements/dees-chart-area/demo.ts
rename to ts_web/elements/00group-chart/dees-chart-area/demo.ts
diff --git a/ts_web/elements/00group-chart/dees-chart-area/index.ts b/ts_web/elements/00group-chart/dees-chart-area/index.ts
new file mode 100644
index 0000000..16900c4
--- /dev/null
+++ b/ts_web/elements/00group-chart/dees-chart-area/index.ts
@@ -0,0 +1 @@
+export * from './component.js';
diff --git a/ts_web/elements/dees-chart-area/styles.ts b/ts_web/elements/00group-chart/dees-chart-area/styles.ts
similarity index 100%
rename from ts_web/elements/dees-chart-area/styles.ts
rename to ts_web/elements/00group-chart/dees-chart-area/styles.ts
diff --git a/ts_web/elements/dees-chart-area/template.ts b/ts_web/elements/00group-chart/dees-chart-area/template.ts
similarity index 100%
rename from ts_web/elements/dees-chart-area/template.ts
rename to ts_web/elements/00group-chart/dees-chart-area/template.ts
diff --git a/ts_web/elements/dees-chart-log/dees-chart-log.demo.ts b/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.demo.ts
similarity index 100%
rename from ts_web/elements/dees-chart-log/dees-chart-log.demo.ts
rename to ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.demo.ts
diff --git a/ts_web/elements/dees-chart-log/dees-chart-log.ts b/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts
similarity index 100%
rename from ts_web/elements/dees-chart-log/dees-chart-log.ts
rename to ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts
diff --git a/ts_web/elements/00group-chart/dees-chart-log/index.ts b/ts_web/elements/00group-chart/dees-chart-log/index.ts
new file mode 100644
index 0000000..b001474
--- /dev/null
+++ b/ts_web/elements/00group-chart/dees-chart-log/index.ts
@@ -0,0 +1 @@
+export * from './dees-chart-log.js';
diff --git a/ts_web/elements/00group-chart/index.ts b/ts_web/elements/00group-chart/index.ts
new file mode 100644
index 0000000..58bf4ee
--- /dev/null
+++ b/ts_web/elements/00group-chart/index.ts
@@ -0,0 +1,3 @@
+// Chart Components
+export * from './dees-chart-area/index.js';
+export * from './dees-chart-log/index.js';
diff --git a/ts_web/elements/dees-dataview-codebox/dees-dataview-codebox.demo.ts b/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.ts
similarity index 100%
rename from ts_web/elements/dees-dataview-codebox/dees-dataview-codebox.demo.ts
rename to ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.ts
diff --git a/ts_web/elements/dees-dataview-codebox/dees-dataview-codebox.ts b/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts
similarity index 97%
rename from ts_web/elements/dees-dataview-codebox/dees-dataview-codebox.ts
rename to ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts
index eb68b15..e379d28 100644
--- a/ts_web/elements/dees-dataview-codebox/dees-dataview-codebox.ts
+++ b/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts
@@ -8,14 +8,14 @@ import {
state,
cssManager,
} from '@design.estate/dees-element';
-import { cssGeistFontFamily, cssMonoFontFamily } from '../00fonts.js';
+import { cssGeistFontFamily, cssMonoFontFamily } from '../../00fonts.js';
import hlight from 'highlight.js';
import * as smartstring from '@push.rocks/smartstring';
import * as domtools from '@design.estate/dees-domtools';
-import { DeesContextmenu } from '../dees-contextmenu/dees-contextmenu.js';
+import { DeesContextmenu } from '../../dees-contextmenu/dees-contextmenu.js';
declare global {
interface HTMLElementTagNameMap {
diff --git a/ts_web/elements/00group-dataview/dees-dataview-codebox/index.ts b/ts_web/elements/00group-dataview/dees-dataview-codebox/index.ts
new file mode 100644
index 0000000..11dbe4d
--- /dev/null
+++ b/ts_web/elements/00group-dataview/dees-dataview-codebox/index.ts
@@ -0,0 +1 @@
+export * from './dees-dataview-codebox.js';
diff --git a/ts_web/elements/dees-dataview-statusobject/dees-dataview-statusobject.demo.ts b/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.demo.ts
similarity index 100%
rename from ts_web/elements/dees-dataview-statusobject/dees-dataview-statusobject.demo.ts
rename to ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.demo.ts
diff --git a/ts_web/elements/dees-dataview-statusobject/dees-dataview-statusobject.ts b/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts
similarity index 97%
rename from ts_web/elements/dees-dataview-statusobject/dees-dataview-statusobject.ts
rename to ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts
index 1cb0476..6265997 100644
--- a/ts_web/elements/dees-dataview-statusobject/dees-dataview-statusobject.ts
+++ b/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts
@@ -1,5 +1,5 @@
-import * as colors from '../00colors.js';
-import * as plugins from '../00plugins.js';
+import * as colors from '../../00colors.js';
+import * as plugins from '../../00plugins.js';
import { demoFunc } from './dees-dataview-statusobject.demo.js';
import {
@@ -15,7 +15,7 @@ import {
} from '@design.estate/dees-element';
import * as tsclass from '@tsclass/tsclass';
-import { DeesContextmenu } from '../dees-contextmenu/dees-contextmenu.js';
+import { DeesContextmenu } from '../../dees-contextmenu/dees-contextmenu.js';
declare global {
interface HTMLElementTagNameMap {
diff --git a/ts_web/elements/00group-dataview/dees-dataview-statusobject/index.ts b/ts_web/elements/00group-dataview/dees-dataview-statusobject/index.ts
new file mode 100644
index 0000000..814245d
--- /dev/null
+++ b/ts_web/elements/00group-dataview/dees-dataview-statusobject/index.ts
@@ -0,0 +1 @@
+export * from './dees-dataview-statusobject.js';
diff --git a/ts_web/elements/00group-dataview/index.ts b/ts_web/elements/00group-dataview/index.ts
new file mode 100644
index 0000000..03dd1ac
--- /dev/null
+++ b/ts_web/elements/00group-dataview/index.ts
@@ -0,0 +1,3 @@
+// Data View Components
+export * from './dees-dataview-codebox/index.js';
+export * from './dees-dataview-statusobject/index.js';
diff --git a/ts_web/elements/dees-editor-markdown/dees-editor-markdown.ts b/ts_web/elements/00group-editor/dees-editor-markdown/dees-editor-markdown.ts
similarity index 100%
rename from ts_web/elements/dees-editor-markdown/dees-editor-markdown.ts
rename to ts_web/elements/00group-editor/dees-editor-markdown/dees-editor-markdown.ts
diff --git a/ts_web/elements/00group-editor/dees-editor-markdown/index.ts b/ts_web/elements/00group-editor/dees-editor-markdown/index.ts
new file mode 100644
index 0000000..65454dc
--- /dev/null
+++ b/ts_web/elements/00group-editor/dees-editor-markdown/index.ts
@@ -0,0 +1 @@
+export * from './dees-editor-markdown.js';
diff --git a/ts_web/elements/dees-editor-markdownoutlet/dees-editor-markdownoutlet.ts b/ts_web/elements/00group-editor/dees-editor-markdownoutlet/dees-editor-markdownoutlet.ts
similarity index 100%
rename from ts_web/elements/dees-editor-markdownoutlet/dees-editor-markdownoutlet.ts
rename to ts_web/elements/00group-editor/dees-editor-markdownoutlet/dees-editor-markdownoutlet.ts
diff --git a/ts_web/elements/00group-editor/dees-editor-markdownoutlet/index.ts b/ts_web/elements/00group-editor/dees-editor-markdownoutlet/index.ts
new file mode 100644
index 0000000..7d15930
--- /dev/null
+++ b/ts_web/elements/00group-editor/dees-editor-markdownoutlet/index.ts
@@ -0,0 +1 @@
+export * from './dees-editor-markdownoutlet.js';
diff --git a/ts_web/elements/dees-editor/dees-editor.ts b/ts_web/elements/00group-editor/dees-editor/dees-editor.ts
similarity index 100%
rename from ts_web/elements/dees-editor/dees-editor.ts
rename to ts_web/elements/00group-editor/dees-editor/dees-editor.ts
diff --git a/ts_web/elements/dees-editor/index.ts b/ts_web/elements/00group-editor/dees-editor/index.ts
similarity index 53%
rename from ts_web/elements/dees-editor/index.ts
rename to ts_web/elements/00group-editor/dees-editor/index.ts
index aefb6b4..91af439 100644
--- a/ts_web/elements/dees-editor/index.ts
+++ b/ts_web/elements/00group-editor/dees-editor/index.ts
@@ -1,2 +1 @@
export * from './dees-editor.js';
-export * from './version.js';
diff --git a/ts_web/elements/dees-editor/version.ts b/ts_web/elements/00group-editor/dees-editor/version.ts
similarity index 100%
rename from ts_web/elements/dees-editor/version.ts
rename to ts_web/elements/00group-editor/dees-editor/version.ts
diff --git a/ts_web/elements/00group-editor/index.ts b/ts_web/elements/00group-editor/index.ts
new file mode 100644
index 0000000..86c7202
--- /dev/null
+++ b/ts_web/elements/00group-editor/index.ts
@@ -0,0 +1,4 @@
+// Editor Components
+export * from './dees-editor/index.js';
+export * from './dees-editor-markdown/index.js';
+export * from './dees-editor-markdownoutlet/index.js';
diff --git a/ts_web/elements/dees-form-submit/dees-form-submit.demo.ts b/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.demo.ts
similarity index 100%
rename from ts_web/elements/dees-form-submit/dees-form-submit.demo.ts
rename to ts_web/elements/00group-form/dees-form-submit/dees-form-submit.demo.ts
diff --git a/ts_web/elements/dees-form-submit/dees-form-submit.ts b/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts
similarity index 100%
rename from ts_web/elements/dees-form-submit/dees-form-submit.ts
rename to ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts
diff --git a/ts_web/elements/00group-form/dees-form-submit/index.ts b/ts_web/elements/00group-form/dees-form-submit/index.ts
new file mode 100644
index 0000000..0afb479
--- /dev/null
+++ b/ts_web/elements/00group-form/dees-form-submit/index.ts
@@ -0,0 +1 @@
+export * from './dees-form-submit.js';
diff --git a/ts_web/elements/dees-form/dees-form.demo.ts b/ts_web/elements/00group-form/dees-form/dees-form.demo.ts
similarity index 99%
rename from ts_web/elements/dees-form/dees-form.demo.ts
rename to ts_web/elements/00group-form/dees-form/dees-form.demo.ts
index f6e01ac..ff5b788 100644
--- a/ts_web/elements/dees-form/dees-form.demo.ts
+++ b/ts_web/elements/00group-form/dees-form/dees-form.demo.ts
@@ -1,5 +1,5 @@
import { html, css, domtools, cssManager } from '@design.estate/dees-element';
-import type { DeesForm } from '../dees-form/dees-form.js';
+import type { DeesForm } from './dees-form.js';
import '@design.estate/dees-wcctools/demotools';
export const demoFunc = () => html`
diff --git a/ts_web/elements/dees-form/dees-form.ts b/ts_web/elements/00group-form/dees-form/dees-form.ts
similarity index 85%
rename from ts_web/elements/dees-form/dees-form.ts
rename to ts_web/elements/00group-form/dees-form/dees-form.ts
index f1cb716..ad842d4 100644
--- a/ts_web/elements/dees-form/dees-form.ts
+++ b/ts_web/elements/00group-form/dees-form/dees-form.ts
@@ -8,19 +8,19 @@ import {
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
-import { DeesInputCheckbox } from '../dees-input-checkbox/dees-input-checkbox.js';
-import { DeesInputDatepicker } from '../dees-input-datepicker/index.js';
-import { DeesInputText } from '../dees-input-text/dees-input-text.js';
-import { DeesInputQuantitySelector } from '../dees-input-quantityselector/dees-input-quantityselector.js';
-import { DeesInputRadiogroup } from '../dees-input-radiogroup/dees-input-radiogroup.js';
-import { DeesInputDropdown } from '../dees-input-dropdown/dees-input-dropdown.js';
-import { DeesInputFileupload } from '../dees-input-fileupload/index.js';
-import { DeesInputIban } from '../dees-input-iban/dees-input-iban.js';
-import { DeesInputMultitoggle } from '../dees-input-multitoggle/dees-input-multitoggle.js';
-import { DeesInputPhone } from '../dees-input-phone/dees-input-phone.js';
-import { DeesInputTypelist } from '../dees-input-typelist/dees-input-typelist.js';
+import { DeesInputCheckbox } from '../../00group-input/dees-input-checkbox/dees-input-checkbox.js';
+import { DeesInputDatepicker } from '../../00group-input/dees-input-datepicker/index.js';
+import { DeesInputText } from '../../00group-input/dees-input-text/dees-input-text.js';
+import { DeesInputQuantitySelector } from '../../00group-input/dees-input-quantityselector/dees-input-quantityselector.js';
+import { DeesInputRadiogroup } from '../../00group-input/dees-input-radiogroup/dees-input-radiogroup.js';
+import { DeesInputDropdown } from '../../00group-input/dees-input-dropdown/dees-input-dropdown.js';
+import { DeesInputFileupload } from '../../00group-input/dees-input-fileupload/index.js';
+import { DeesInputIban } from '../../00group-input/dees-input-iban/dees-input-iban.js';
+import { DeesInputMultitoggle } from '../../00group-input/dees-input-multitoggle/dees-input-multitoggle.js';
+import { DeesInputPhone } from '../../00group-input/dees-input-phone/dees-input-phone.js';
+import { DeesInputTypelist } from '../../00group-input/dees-input-typelist/dees-input-typelist.js';
import { DeesFormSubmit } from '../dees-form-submit/dees-form-submit.js';
-import { DeesTable } from '../dees-table/index.js';
+import { DeesTable } from '../../dees-table/index.js';
import { demoFunc } from './dees-form.demo.js';
// Unified set for form input types
diff --git a/ts_web/elements/00group-form/dees-form/index.ts b/ts_web/elements/00group-form/dees-form/index.ts
new file mode 100644
index 0000000..5a74d38
--- /dev/null
+++ b/ts_web/elements/00group-form/dees-form/index.ts
@@ -0,0 +1 @@
+export * from './dees-form.js';
diff --git a/ts_web/elements/00group-form/index.ts b/ts_web/elements/00group-form/index.ts
new file mode 100644
index 0000000..853269b
--- /dev/null
+++ b/ts_web/elements/00group-form/index.ts
@@ -0,0 +1,3 @@
+// Form Components
+export * from './dees-form/index.js';
+export * from './dees-form-submit/index.js';
diff --git a/ts_web/elements/dees-input-base/dees-input-base.ts b/ts_web/elements/00group-input/dees-input-base/dees-input-base.ts
similarity index 100%
rename from ts_web/elements/dees-input-base/dees-input-base.ts
rename to ts_web/elements/00group-input/dees-input-base/dees-input-base.ts
diff --git a/ts_web/elements/00group-input/dees-input-base/index.ts b/ts_web/elements/00group-input/dees-input-base/index.ts
new file mode 100644
index 0000000..bf2380d
--- /dev/null
+++ b/ts_web/elements/00group-input/dees-input-base/index.ts
@@ -0,0 +1 @@
+export * from './dees-input-base.js';
diff --git a/ts_web/elements/dees-input-checkbox/dees-input-checkbox.demo.ts b/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.demo.ts
similarity index 99%
rename from ts_web/elements/dees-input-checkbox/dees-input-checkbox.demo.ts
rename to ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.demo.ts
index 2f18f70..50a1ed7 100644
--- a/ts_web/elements/dees-input-checkbox/dees-input-checkbox.demo.ts
+++ b/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.demo.ts
@@ -1,8 +1,8 @@
import { html, css, cssManager } from '@design.estate/dees-element';
import '@design.estate/dees-wcctools/demotools';
-import '../dees-panel/dees-panel.js';
+import '../../dees-panel/dees-panel.js';
import type { DeesInputCheckbox } from '../dees-input-checkbox/dees-input-checkbox.js';
-import '../dees-button/dees-button.js';
+import '../../00group-button/dees-button/dees-button.js';
export const demoFunc = () => html`
{
diff --git a/ts_web/elements/dees-input-checkbox/dees-input-checkbox.ts b/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts
similarity index 99%
rename from ts_web/elements/dees-input-checkbox/dees-input-checkbox.ts
rename to ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts
index 2085b58..715ac0e 100644
--- a/ts_web/elements/dees-input-checkbox/dees-input-checkbox.ts
+++ b/ts_web/elements/00group-input/dees-input-checkbox/dees-input-checkbox.ts
@@ -8,7 +8,7 @@ import {
} from '@design.estate/dees-element';
import { DeesInputBase } from '../dees-input-base/dees-input-base.js';
import { demoFunc } from './dees-input-checkbox.demo.js';
-import { cssGeistFontFamily } from '../00fonts.js';
+import { cssGeistFontFamily } from '../../00fonts.js';
declare global {
interface HTMLElementTagNameMap {
diff --git a/ts_web/elements/00group-input/dees-input-checkbox/index.ts b/ts_web/elements/00group-input/dees-input-checkbox/index.ts
new file mode 100644
index 0000000..cf4e9a2
--- /dev/null
+++ b/ts_web/elements/00group-input/dees-input-checkbox/index.ts
@@ -0,0 +1 @@
+export * from './dees-input-checkbox.js';
diff --git a/ts_web/elements/dees-input-datepicker/component.ts b/ts_web/elements/00group-input/dees-input-datepicker/component.ts
similarity index 99%
rename from ts_web/elements/dees-input-datepicker/component.ts
rename to ts_web/elements/00group-input/dees-input-datepicker/component.ts
index 4f01143..5cdd4a9 100644
--- a/ts_web/elements/dees-input-datepicker/component.ts
+++ b/ts_web/elements/00group-input/dees-input-datepicker/component.ts
@@ -9,8 +9,8 @@ import { demoFunc } from './demo.js';
import { datepickerStyles } from './styles.js';
import { renderDatepicker } from './template.js';
import type { IDateEvent } from './types.js';
-import '../dees-icon/dees-icon.js';
-import '../dees-label/dees-label.js';
+import '../../dees-icon/dees-icon.js';
+import '../../dees-label/dees-label.js';
declare global {
diff --git a/ts_web/elements/dees-input-datepicker/demo.ts b/ts_web/elements/00group-input/dees-input-datepicker/demo.ts
similarity index 99%
rename from ts_web/elements/dees-input-datepicker/demo.ts
rename to ts_web/elements/00group-input/dees-input-datepicker/demo.ts
index 8bfdded..8f5ccf9 100644
--- a/ts_web/elements/dees-input-datepicker/demo.ts
+++ b/ts_web/elements/00group-input/dees-input-datepicker/demo.ts
@@ -1,6 +1,6 @@
import { html, css } from '@design.estate/dees-element';
import '@design.estate/dees-wcctools/demotools';
-import '../dees-panel/dees-panel.js';
+import '../../dees-panel/dees-panel.js';
import './component.js';
import type { DeesInputDatepicker } from './component.js';
diff --git a/ts_web/elements/00group-input/dees-input-datepicker/index.ts b/ts_web/elements/00group-input/dees-input-datepicker/index.ts
new file mode 100644
index 0000000..16900c4
--- /dev/null
+++ b/ts_web/elements/00group-input/dees-input-datepicker/index.ts
@@ -0,0 +1 @@
+export * from './component.js';
diff --git a/ts_web/elements/dees-input-datepicker/styles.ts b/ts_web/elements/00group-input/dees-input-datepicker/styles.ts
similarity index 100%
rename from ts_web/elements/dees-input-datepicker/styles.ts
rename to ts_web/elements/00group-input/dees-input-datepicker/styles.ts
diff --git a/ts_web/elements/dees-input-datepicker/template.ts b/ts_web/elements/00group-input/dees-input-datepicker/template.ts
similarity index 100%
rename from ts_web/elements/dees-input-datepicker/template.ts
rename to ts_web/elements/00group-input/dees-input-datepicker/template.ts
diff --git a/ts_web/elements/dees-input-datepicker/types.ts b/ts_web/elements/00group-input/dees-input-datepicker/types.ts
similarity index 100%
rename from ts_web/elements/dees-input-datepicker/types.ts
rename to ts_web/elements/00group-input/dees-input-datepicker/types.ts
diff --git a/ts_web/elements/dees-input-dropdown/dees-input-dropdown.demo.ts b/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts
similarity index 98%
rename from ts_web/elements/dees-input-dropdown/dees-input-dropdown.demo.ts
rename to ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts
index cabdf64..1f2b4ae 100644
--- a/ts_web/elements/dees-input-dropdown/dees-input-dropdown.demo.ts
+++ b/ts_web/elements/00group-input/dees-input-dropdown/dees-input-dropdown.demo.ts
@@ -1,8 +1,8 @@
import { html, css } from '@design.estate/dees-element';
import '@design.estate/dees-wcctools/demotools';
-import '../dees-panel/dees-panel.js';
-import '../dees-form/dees-form.js';
-import '../dees-form-submit/dees-form-submit.js';
+import '../../dees-panel/dees-panel.js';
+import '../../00group-form/dees-form/dees-form.js';
+import '../../00group-form/dees-form-submit/dees-form-submit.js';
export const demoFunc = () => html`