tc-dazzle-ui 1.10.13 → 1.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  React components and Web Components for the TeamConnect Design System.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/tc-dazzle-ui.svg)](https://www.npmjs.com/package/tc-dazzle-ui)
6
- [![license](https://img.shields.io/npm/l/tc-dazzle-ui.svg)](https://github.com/your-org/tc-dazzle-ui/blob/main/LICENSE)
6
+ [![license](https://img.shields.io/npm/l/tc-dazzle-ui.svg)](https://github.com/itsfinnynj/tc-dazzle-ui/blob/main/LICENSE)
7
7
 
8
8
  ## 📦 Installation
9
9
 
@@ -16,16 +16,38 @@ npm install tc-dazzle-ui
16
16
  ### React Components
17
17
 
18
18
  ```tsx
19
- import { Button, Input, ButtonGroup } from 'tc-dazzle-ui';
19
+ import {
20
+ Button,
21
+ Input,
22
+ MainHeader,
23
+ GlobalHeader,
24
+ Sidebar,
25
+ PageHeader,
26
+ Footer,
27
+ Layout
28
+ } from 'tc-dazzle-ui';
20
29
  import 'tc-dazzle-ui/dist/styles.css';
21
30
 
22
31
  function App() {
23
32
  return (
24
- <div>
25
- <Button label="Click Me" variant="primary" onClick={() => console.log('clicked')} />
26
- <Input label="Name" placeholder="Enter your name" />
27
- <ButtonGroup label="Actions" variant="secondary" />
28
- </div>
33
+ <Layout
34
+ header={
35
+ <>
36
+ <MainHeader onLogoClick={() => {}} />
37
+ <GlobalHeader tabs={[{ id: 'home', label: 'Home' }]} activeTabId="home" />
38
+ </>
39
+ }
40
+ sidebar={
41
+ <Sidebar
42
+ sections={[
43
+ { id: 'section1', title: 'Section 1', items: [{ id: 'item1', label: 'Item 1' }] }
44
+ ]}
45
+ activeItemId="item1"
46
+ onItemClick={(item) => console.log(item)}
47
+ />
48
+ }
49
+ main={<div>Your content here</div>}
50
+ />
29
51
  );
30
52
  }
31
53
  ```
@@ -111,17 +133,30 @@ npm test
111
133
 
112
134
  ```
113
135
  src/
114
- ├── components/ # Reusable UI components
115
- │ ├── Button/ # Button component with variants
116
- │ ├── Footer/ # Footer component
117
- │ ├── Header/ # Header with search and navigation
118
- │ ├── Layout/ # Main layout wrapper
119
- │ ├── MainContent/ # Page content area
120
- └── Sidebar/ # Navigation sidebar
121
- ├── assets/ # Static assets (images, icons)
122
- ├── styles/ # Global styles and CSS variables
123
- ├── types/ # TypeScript type definitions
124
- └── hooks/ # Custom React hooks
136
+ ├── components/
137
+ │ ├── Atoms/ # Basic UI elements
138
+ ├── Button/ # Button, ButtonGroup
139
+ ├── Input/ # Input fields
140
+ ├── Icons/ # Icon components
141
+ ├── Logo/ # Logo component
142
+ │ ├── IconButton/ # Icon buttons
143
+ │ │ ├── FilterDropdown/
144
+ │ │ ├── GlobalSearch/
145
+ │ │ └── Tab/
146
+ │ ├── Molecules/ # Composite components
147
+ │ │ ├── DropdownMenu/
148
+ │ │ ├── HeaderMenu/
149
+ │ │ └── Search/
150
+ │ ├── Organisms/ # Complex components
151
+ │ │ ├── MainHeader/ # Main application header
152
+ │ │ ├── GlobalHeader/# Secondary header with tabs
153
+ │ │ ├── Sidebar/ # Resizable navigation sidebar
154
+ │ │ ├── PageHeader/ # Page title and actions
155
+ │ │ └── Footer/ # Footer with Mitratech logo
156
+ │ └── Templates/
157
+ │ └── Layout/ # Main layout wrapper
158
+ ├── styles/ # Global styles and CSS variables
159
+ └── lib/ # Library exports
125
160
  ```
126
161
 
127
162
  ## � Web Components
@@ -172,37 +207,66 @@ After building the project, include the bundle in your HTML:
172
207
 
173
208
  After running `npm start`, visit `/web-components-demo.html` to see the web components in action.
174
209
 
175
- ## �🎯 Components
176
-
177
- ### Header
178
- - TeamConnect logo
179
- - Global search functionality
180
- - Help and settings navigation
181
- - Dropdown filters
182
-
183
- ### Sidebar
184
- - Hierarchical navigation structure
185
- - Active state indicators
186
- - Icon support
187
- - Scrollable content area
188
-
189
- ### Main Content
190
- - Page title display
191
- - Action buttons (Edit Page, Add Content)
192
- - Flexible content area
193
- - Responsive layout
194
-
195
- ### Footer
196
- - Version information
197
- - Copyright details
198
- - Privacy policy link
199
- - Mitratech branding
200
-
201
- ### Button
202
- - Multiple variants: primary, secondary, edit, add
203
- - Icon support
204
- - Disabled states
205
- - Consistent sizing
210
+ ## 🎯 Components
211
+
212
+ ### Atoms
213
+
214
+ | Component | Description |
215
+ |-----------|-------------|
216
+ | `Button` | Primary, secondary, text variants with icon support |
217
+ | `ButtonGroup` | Button with dropdown menu |
218
+ | `Input` | Text input with various states |
219
+ | `IconButton` | Icon-only buttons |
220
+ | `FilterDropdown` | Dropdown filter component |
221
+ | `GlobalSearch` | Search with suggestions |
222
+ | `Logo` | TeamConnect logo |
223
+ | `Tab` | Tab navigation item |
224
+ | `Icons` | InfoIcon, SearchIcon, ChevronDownIcon, etc. |
225
+
226
+ ### Molecules
227
+
228
+ | Component | Description |
229
+ |-----------|-------------|
230
+ | `DropdownMenu` | Dropdown menu with items |
231
+ | `HeaderMenu` | Header navigation menu |
232
+ | `Search` | Search input with filter |
233
+
234
+ ### Organisms
235
+
236
+ | Component | Description |
237
+ |-----------|-------------|
238
+ | `MainHeader` | Main application header with logo, search, and navigation |
239
+ | `GlobalHeader` | Secondary header with tabs and properties button |
240
+ | `Sidebar` | Resizable navigation sidebar with collapsible sections |
241
+ | `PageHeader` | Page title with breadcrumbs and action buttons |
242
+ | `Footer` | Footer with copyright, links, and Mitratech logo |
243
+
244
+ ### Templates
245
+
246
+ | Component | Description |
247
+ |-----------|-------------|
248
+ | `Layout` | Main layout wrapper with header, sidebar, content, and optional right panel |
249
+
250
+ ### Footer Component
251
+
252
+ ```tsx
253
+ import { Footer } from 'tc-dazzle-ui';
254
+
255
+ <Footer
256
+ copyrightText="Copyright © 2024 Mitratech Holdings, Inc. All Rights Reserved."
257
+ links={[
258
+ { id: 'terms', label: 'Terms of Service', href: '/terms' },
259
+ { id: 'privacy', label: 'Privacy Policy', href: '/privacy', variant: 'underline' },
260
+ ]}
261
+ showLogo={true}
262
+ />
263
+ ```
264
+
265
+ **Footer Props:**
266
+ - `copyrightText` - Copyright text (default: "Copyright © 2024 Mitratech Holdings, Inc. All Rights Reserved.")
267
+ - `links` - Array of FooterLink objects with `id`, `label`, `href`/`onClick`, and `variant` ('default' | 'bordered' | 'underline')
268
+ - `showLogo` - Show Mitratech logo (default: true)
269
+ - `className` - Additional CSS classes
206
270
 
207
271
  ## 🎨 Design Tokens
208
272
 
@@ -211,12 +275,12 @@ The design system uses CSS custom properties for consistent theming:
211
275
  ```css
212
276
  :root {
213
277
  --primary-dark: #001a35;
214
- --text-primary: #242a30;
278
+ --primary-main: #0067d2;
279
+ --text-primary: #212121;
215
280
  --text-secondary: #47535f;
216
- --border-primary: #c7d3df;
281
+ --border-primary: #e2e2e2;
217
282
  --background-light: #f9fafc;
218
- --font-family: 'Helvetica Neue', sans-serif;
219
- /* ... and more */
283
+ --font-family: 'Poppins', sans-serif;
220
284
  }
221
285
  ```
222
286
 
@@ -260,7 +324,7 @@ The layout is responsive and works across different screen sizes. The sidebar an
260
324
 
261
325
  ## 📄 License
262
326
 
263
- Copyright 1999-2024 TeamConnect. All Rights Reserved.
327
+ Copyright 1999-2025 Mitratech Holdings, Inc. All Rights Reserved.
264
328
 
265
329
  ## 🤝 Contributing
266
330
 
@@ -1,10 +1,11 @@
1
1
  import React from 'react';
2
2
  import './Button.css';
3
- export type ButtonVariant = 'primary' | 'secondary' | 'text';
4
- export type ButtonState = 'active' | 'hover' | 'disabled';
3
+ export type ButtonVariant = 'primary' | 'secondary' | 'tertiary';
4
+ export type ButtonColor = 'primary' | 'error' | 'warning' | 'info' | 'success' | 'inherit';
5
5
  export interface ButtonProps {
6
6
  label?: string;
7
7
  variant?: ButtonVariant;
8
+ color?: ButtonColor;
8
9
  disabled?: boolean;
9
10
  showStartIcon?: boolean;
10
11
  showEndIcon?: boolean;
@@ -14,16 +15,5 @@ export interface ButtonProps {
14
15
  onClick?: () => void;
15
16
  className?: string;
16
17
  }
17
- export interface ButtonGroupProps {
18
- label?: string;
19
- variant?: ButtonVariant;
20
- disabled?: boolean;
21
- showStartIcon?: boolean;
22
- startIcon?: React.ReactNode;
23
- onButtonClick?: () => void;
24
- onDropdownClick?: () => void;
25
- className?: string;
26
- }
27
18
  export declare const Button: React.FC<ButtonProps>;
28
- export declare const ButtonGroup: React.FC<ButtonGroupProps>;
29
19
  export default Button;
@@ -1,2 +1,2 @@
1
- export { Button, ButtonGroup } from './Button';
2
- export type { ButtonProps, ButtonGroupProps, ButtonVariant, ButtonState } from './Button';
1
+ export { Button } from './Button';
2
+ export type { ButtonProps, ButtonVariant, ButtonColor } from './Button';
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import type { ButtonVariant, ButtonColor } from '../Button';
3
+ import './ButtonGroup.css';
4
+ export type ButtonGroupVariant = ButtonVariant;
5
+ export type ButtonGroupColor = ButtonColor;
6
+ export interface ButtonGroupProps {
7
+ label?: string;
8
+ variant?: ButtonGroupVariant;
9
+ color?: ButtonGroupColor;
10
+ disabled?: boolean;
11
+ icon?: React.ReactNode;
12
+ startIcon?: React.ReactNode;
13
+ showStartIcon?: boolean;
14
+ onButtonClick?: () => void;
15
+ onIconClick?: () => void;
16
+ iconAriaLabel?: string;
17
+ className?: string;
18
+ }
19
+ export declare const ButtonGroup: React.FC<ButtonGroupProps>;
20
+ export default ButtonGroup;
@@ -0,0 +1,2 @@
1
+ export { ButtonGroup } from './ButtonGroup';
2
+ export type { ButtonGroupProps, ButtonGroupVariant, ButtonGroupColor } from './ButtonGroup';
@@ -1,13 +1,17 @@
1
1
  import React from 'react';
2
2
  import './IconButton.css';
3
3
  export type IconButtonSize = 'small' | 'medium' | 'large';
4
- export type IconButtonColor = 'default' | 'primary' | 'secondary';
4
+ export type IconButtonVariant = 'primary' | 'secondary' | 'tertiary';
5
+ export type IconButtonColor = 'primary' | 'error' | 'warning' | 'info' | 'success' | 'inherit';
5
6
  export type IconButtonState = 'enabled' | 'hover' | 'disabled';
6
7
  export interface IconButtonProps {
7
8
  icon?: React.ReactNode;
8
9
  size?: IconButtonSize;
10
+ variant?: IconButtonVariant;
9
11
  color?: IconButtonColor;
10
12
  disabled?: boolean;
13
+ showArrow?: boolean;
14
+ arrowIcon?: React.ReactNode;
11
15
  onClick?: () => void;
12
16
  ariaLabel?: string;
13
17
  className?: string;
@@ -1,2 +1,2 @@
1
1
  export { IconButton } from './IconButton';
2
- export type { IconButtonProps, IconButtonSize, IconButtonColor, IconButtonState } from './IconButton';
2
+ export type { IconButtonProps, IconButtonSize, IconButtonVariant, IconButtonColor, IconButtonState } from './IconButton';
@@ -1,5 +1,7 @@
1
- export { Button, ButtonGroup } from './Button';
2
- export type { ButtonProps, ButtonGroupProps, ButtonVariant, ButtonState } from './Button';
1
+ export { Button } from './Button';
2
+ export type { ButtonProps, ButtonVariant, ButtonColor } from './Button';
3
+ export { ButtonGroup } from './ButtonGroup';
4
+ export type { ButtonGroupProps, ButtonGroupVariant, ButtonGroupColor } from './ButtonGroup';
3
5
  export { Input } from './Input';
4
6
  export type { InputProps, InputType } from './Input';
5
7
  export { FilterDropdown } from './FilterDropdown';
@@ -7,7 +9,7 @@ export type { FilterDropdownProps, FilterDropdownOption, FilterDropdownSize, Fil
7
9
  export { GlobalSearch } from './GlobalSearch';
8
10
  export type { GlobalSearchProps, GlobalSearchOption } from './GlobalSearch';
9
11
  export { IconButton } from './IconButton';
10
- export type { IconButtonProps, IconButtonSize, IconButtonColor, IconButtonState } from './IconButton';
12
+ export type { IconButtonProps, IconButtonSize, IconButtonVariant, IconButtonColor, IconButtonState } from './IconButton';
11
13
  export { InfoIcon, SearchIcon, ChevronDownIcon, ChevronUpIcon, CaretDownIcon, CloseIcon, MenuIcon, CheckIcon, PlusIcon, MinusIcon, EditIcon, DeleteIcon, SettingsIcon, UserIcon, HomeIcon, ArrowLeftIcon, ArrowRightIcon, ArrowUpIcon, ArrowDownIcon, StarIcon, StarOutlineIcon, FilterIcon, SortIcon, RefreshIcon, DownloadIcon, UploadIcon, CopyIcon, CalendarIcon, ClockIcon, EmailIcon, PhoneIcon, LockIcon, UnlockIcon, EyeIcon, EyeOffIcon, NotificationIcon, WarningIcon, ErrorIcon, SuccessIcon, HelpIcon, LinkIcon, AttachmentIcon, FolderIcon, FileIcon, PrintIcon, ShareIcon, MoreVerticalIcon, MoreHorizontalIcon, ExpandIcon, CollapseIcon, FullscreenIcon, FullscreenExitIcon } from './Icons';
12
14
  export type { IconProps, IconSize } from './Icons';
13
15
  export { Logo } from './Logo';
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import './ColorPalette.css';
3
+ export interface ColorSwatch {
4
+ name: string;
5
+ hex: string;
6
+ }
7
+ export interface ColorSection {
8
+ title: string;
9
+ colors: ColorSwatch[];
10
+ }
11
+ export interface ColorPaletteProps {
12
+ sections: ColorSection[];
13
+ className?: string;
14
+ }
15
+ export declare const ColorPalette: React.FC<ColorPaletteProps>;
16
+ export default ColorPalette;
@@ -0,0 +1,2 @@
1
+ export { ColorPalette } from './ColorPalette';
2
+ export type { ColorPaletteProps, ColorSection, ColorSwatch } from './ColorPalette';
@@ -0,0 +1,2 @@
1
+ export { ColorPalette } from './ColorPalette';
2
+ export type { ColorPaletteProps, ColorSection, ColorSwatch } from './ColorPalette';
@@ -4,7 +4,7 @@ export interface PageHeaderAction {
4
4
  id: string;
5
5
  label: string;
6
6
  icon?: React.ReactNode;
7
- variant?: 'primary' | 'secondary' | 'text';
7
+ variant?: 'primary' | 'secondary' | 'tertiary';
8
8
  onClick?: () => void;
9
9
  }
10
10
  export interface PageHeaderBadge {
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import './RightPanel.css';
3
+ export interface RightPanelProps {
4
+ onWidthChange?: (width: number) => void;
5
+ onToggle?: (isOpen: boolean) => void;
6
+ defaultWidth?: number;
7
+ minWidth?: number;
8
+ maxWidth?: number;
9
+ defaultOpen?: boolean;
10
+ className?: string;
11
+ children?: React.ReactNode;
12
+ }
13
+ export declare const RightPanel: React.FC<RightPanelProps>;
14
+ export default RightPanel;
@@ -0,0 +1,2 @@
1
+ export { RightPanel } from './RightPanel';
2
+ export type { RightPanelProps } from './RightPanel';
@@ -8,3 +8,5 @@ export { PageHeader } from './PageHeader';
8
8
  export type { PageHeaderProps, PageHeaderAction, PageHeaderBadge } from './PageHeader';
9
9
  export { Footer } from './Footer';
10
10
  export type { FooterProps, FooterLink } from './Footer';
11
+ export { RightPanel } from './RightPanel';
12
+ export type { RightPanelProps } from './RightPanel';
package/dist/index.esm.js CHANGED
@@ -2,17 +2,26 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import o, { forwardRef, useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { createRoot } from 'react-dom/client';
4
4
 
5
- // Caret Down Icon SVG
6
- const CaretDownIcon$1 = ({ className }) => (jsx("svg", { className: className, viewBox: "0 0 10 6", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M5 6L0 0H10L5 6Z" }) }));
7
- // Single Button Component
8
- const Button = ({ label = 'Button', variant = 'primary', disabled = false, showStartIcon = true, showEndIcon = true, showLabel = true, startIcon, endIcon, onClick, className = '', }) => {
9
- const buttonClass = `tc-button tc-button--${variant} ${className}`.trim();
10
- return (jsxs("button", { className: `${buttonClass} tc-button-main`, disabled: disabled, onClick: onClick, type: "button", children: [showStartIcon && (jsx("span", { className: "tc-button__icon", children: startIcon || jsx(CaretDownIcon$1, {}) })), showLabel && (jsx("span", { className: "tc-button__label", children: label })), showEndIcon && (jsx("span", { className: "tc-button__caret", children: endIcon || jsx(CaretDownIcon$1, {}) }))] }));
11
- };
12
- // Button Group Component (Button with Dropdown)
13
- const ButtonGroup = ({ label = 'Button', variant = 'primary', disabled = false, showStartIcon = true, startIcon, onButtonClick, onDropdownClick, className = '', }) => {
14
- const buttonClass = `tc-button tc-button--${variant}`;
15
- return (jsxs("div", { className: `tc-button-group ${className}`.trim(), children: [jsxs("button", { className: `${buttonClass} tc-button-main`, disabled: disabled, onClick: onButtonClick, type: "button", children: [showStartIcon && (jsx("span", { className: "tc-button__icon", children: startIcon || jsx(CaretDownIcon$1, {}) })), jsx("span", { className: "tc-button__label", children: label })] }), jsx("div", { className: "tc-button-divider" }), jsx("button", { className: `${buttonClass} tc-button-dropdown`, disabled: disabled, onClick: onDropdownClick, type: "button", "aria-label": "Open dropdown menu", children: jsx("span", { className: "tc-button__caret", children: jsx(CaretDownIcon$1, {}) }) })] }));
5
+ const Button = ({ label = 'Button', variant = 'primary', color = 'primary', disabled = false, showStartIcon = false, showEndIcon = false, showLabel = true, startIcon, endIcon, onClick, className = '', }) => {
6
+ const buttonClass = [
7
+ 'tc-button',
8
+ `tc-button--${variant}`,
9
+ `tc-button--color-${color}`,
10
+ className,
11
+ ].filter(Boolean).join(' ').trim();
12
+ return (jsxs("button", { className: buttonClass, disabled: disabled, onClick: onClick, type: "button", children: [showStartIcon && startIcon && (jsx("span", { className: "tc-button__icon", children: startIcon })), showLabel && (jsx("span", { className: "tc-button__label", children: label })), showEndIcon && endIcon && (jsx("span", { className: "tc-button__icon", children: endIcon }))] }));
13
+ };
14
+
15
+ const IconButton = ({ icon, size = 'medium', variant = 'tertiary', color = 'primary', disabled = false, showArrow = false, arrowIcon, onClick, ariaLabel = 'Icon button', className = '', }) => {
16
+ const buttonClass = [
17
+ 'tc-icon-button',
18
+ `tc-icon-button--${size}`,
19
+ `tc-icon-button--${variant}`,
20
+ `tc-icon-button--color-${color}`,
21
+ showArrow ? 'tc-icon-button--with-arrow' : '',
22
+ className,
23
+ ].filter(Boolean).join(' ').trim();
24
+ return (jsxs("button", { type: "button", className: buttonClass, onClick: onClick, disabled: disabled, "aria-label": ariaLabel, children: [jsx("span", { className: "tc-icon-button__icon", children: icon }), showArrow && (jsx("span", { className: "tc-icon-button__arrow", children: arrowIcon || (jsx("svg", { viewBox: "0 0 10 6", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M1 1L5 5L9 1", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })) }))] }));
16
25
  };
17
26
 
18
27
  // Arrow Icon for Prefix/Suffix
@@ -135,7 +144,7 @@ const FilterDropdown = ({ value, defaultValue, options = [], placeholder = 'All'
135
144
  };
136
145
 
137
146
  // Search Icon SVG
138
- const SearchIcon$2 = ({ className }) => (jsx("svg", { className: className, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M15.5 14H14.71L14.43 13.73C15.41 12.59 16 11.11 16 9.5C16 5.91 13.09 3 9.5 3C5.91 3 3 5.91 3 9.5C3 13.09 5.91 16 9.5 16C11.11 16 12.59 15.41 13.73 14.43L14 14.71V15.5L19 20.49L20.49 19L15.5 14ZM9.5 14C7.01 14 5 11.99 5 9.5C5 7.01 7.01 5 9.5 5C11.99 5 14 7.01 14 9.5C14 11.99 11.99 14 9.5 14Z", fill: "currentColor" }) }));
147
+ const SearchIcon$1 = ({ className }) => (jsx("svg", { className: className, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M15.5 14H14.71L14.43 13.73C15.41 12.59 16 11.11 16 9.5C16 5.91 13.09 3 9.5 3C5.91 3 3 5.91 3 9.5C3 13.09 5.91 16 9.5 16C11.11 16 12.59 15.41 13.73 14.43L14 14.71V15.5L19 20.49L20.49 19L15.5 14ZM9.5 14C7.01 14 5 11.99 5 9.5C5 7.01 7.01 5 9.5 5C11.99 5 14 7.01 14 9.5C14 11.99 11.99 14 9.5 14Z", fill: "currentColor" }) }));
139
148
  // Chevron Down Icon SVG
140
149
  const ChevronDownIcon$1 = ({ className }) => (jsx("svg", { className: className, viewBox: "0 0 10 5", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M0 0L5 5L10 0H0Z" }) }));
141
150
  const GlobalSearch = ({ placeholder = 'Search', filterPlaceholder = 'All', filterOptions = [], filterValue: controlledFilterValue, searchValue: controlledSearchValue, disabled = false, onSearch, onFilterChange, onSubmit, className = '', }) => {
@@ -206,23 +215,7 @@ const GlobalSearch = ({ placeholder = 'Search', filterPlaceholder = 'All', filte
206
215
  classes.push(className);
207
216
  return classes.join(' ');
208
217
  };
209
- return (jsxs("div", { className: getContainerClasses(), children: [jsxs("div", { ref: filterRef, className: `tc-global-search__filter ${isFilterOpen ? 'tc-global-search__filter--open' : ''}`, children: [jsxs("button", { type: "button", className: "tc-global-search__filter-trigger", onClick: handleFilterToggle, disabled: disabled, "aria-expanded": isFilterOpen, "aria-haspopup": "listbox", children: [jsx("span", { className: "tc-global-search__filter-label", children: getFilterLabel() }), jsx("div", { className: "tc-global-search__filter-icon", children: jsx(ChevronDownIcon$1, {}) })] }), isFilterOpen && filterOptions.length > 0 && (jsx("div", { className: "tc-global-search__filter-menu", role: "listbox", children: filterOptions.map((option) => (jsx("div", { className: `tc-global-search__filter-option ${filterValue === option.value ? 'tc-global-search__filter-option--selected' : ''}`, role: "option", "aria-selected": filterValue === option.value, onClick: () => handleFilterSelect(option.value), children: option.label }, option.value))) }))] }), jsx("div", { className: "tc-global-search__input-wrapper", children: jsx("input", { ref: inputRef, type: "text", className: "tc-global-search__input", placeholder: placeholder, value: searchValue, onChange: handleSearchChange, onKeyDown: handleKeyDown, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), disabled: disabled }) }), jsx("button", { type: "button", className: "tc-global-search__button", onClick: handleSearchSubmit, disabled: disabled, "aria-label": "Search", children: jsx(SearchIcon$2, {}) })] }));
210
- };
211
-
212
- // Default Search Icon SVG
213
- const SearchIcon$1 = ({ className }) => (jsx("svg", { className: className, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M15.5 14H14.71L14.43 13.73C15.41 12.59 16 11.11 16 9.5C16 5.91 13.09 3 9.5 3C5.91 3 3 5.91 3 9.5C3 13.09 5.91 16 9.5 16C11.11 16 12.59 15.41 13.73 14.43L14 14.71V15.5L19 20.49L20.49 19L15.5 14ZM9.5 14C7.01 14 5 11.99 5 9.5C5 7.01 7.01 5 9.5 5C11.99 5 14 7.01 14 9.5C14 11.99 11.99 14 9.5 14Z", fill: "currentColor" }) }));
214
- const IconButton = ({ icon, size = 'medium', color = 'default', disabled = false, onClick, ariaLabel = 'Icon button', className = '', }) => {
215
- const getButtonClasses = () => {
216
- const classes = ['tc-icon-button'];
217
- classes.push(`tc-icon-button--${size}`);
218
- classes.push(`tc-icon-button--${color}`);
219
- if (disabled)
220
- classes.push('tc-icon-button--disabled');
221
- if (className)
222
- classes.push(className);
223
- return classes.join(' ');
224
- };
225
- return (jsx("button", { type: "button", className: getButtonClasses(), onClick: onClick, disabled: disabled, "aria-label": ariaLabel, children: jsx("span", { className: "tc-icon-button__icon", children: icon || jsx(SearchIcon$1, {}) }) }));
218
+ return (jsxs("div", { className: getContainerClasses(), children: [jsxs("div", { ref: filterRef, className: `tc-global-search__filter ${isFilterOpen ? 'tc-global-search__filter--open' : ''}`, children: [jsxs("button", { type: "button", className: "tc-global-search__filter-trigger", onClick: handleFilterToggle, disabled: disabled, "aria-expanded": isFilterOpen, "aria-haspopup": "listbox", children: [jsx("span", { className: "tc-global-search__filter-label", children: getFilterLabel() }), jsx("div", { className: "tc-global-search__filter-icon", children: jsx(ChevronDownIcon$1, {}) })] }), isFilterOpen && filterOptions.length > 0 && (jsx("div", { className: "tc-global-search__filter-menu", role: "listbox", children: filterOptions.map((option) => (jsx("div", { className: `tc-global-search__filter-option ${filterValue === option.value ? 'tc-global-search__filter-option--selected' : ''}`, role: "option", "aria-selected": filterValue === option.value, onClick: () => handleFilterSelect(option.value), children: option.label }, option.value))) }))] }), jsx("div", { className: "tc-global-search__input-wrapper", children: jsx("input", { ref: inputRef, type: "text", className: "tc-global-search__input", placeholder: placeholder, value: searchValue, onChange: handleSearchChange, onKeyDown: handleKeyDown, onFocus: () => setIsFocused(true), onBlur: () => setIsFocused(false), disabled: disabled }) }), jsx("button", { type: "button", className: "tc-global-search__button", onClick: handleSearchSubmit, disabled: disabled, "aria-label": "Search", children: jsx(SearchIcon$1, {}) })] }));
226
219
  };
227
220
 
228
221
  // Base Icon wrapper component
@@ -308,7 +301,7 @@ const Search = ({ placeholder = 'Search', filterPlaceholder = 'All', filterOptio
308
301
  const handleInfoClick = () => {
309
302
  onInfoClick === null || onInfoClick === void 0 ? void 0 : onInfoClick();
310
303
  };
311
- return (jsxs("div", { className: `tc-search ${className}`.trim(), children: [jsx(GlobalSearch, { placeholder: placeholder, filterPlaceholder: filterPlaceholder, filterOptions: filterOptions, filterValue: controlledFilterValue !== undefined ? controlledFilterValue : filterValue, searchValue: controlledSearchValue !== undefined ? controlledSearchValue : searchValue, disabled: disabled, onSearch: handleSearch, onFilterChange: handleFilterChange, onSubmit: handleSubmit }), showInfoIcon && (jsx(IconButton, { icon: jsx(InfoIcon, { size: "medium" }), size: "medium", color: "default", onClick: handleInfoClick, disabled: disabled, ariaLabel: "More information", className: "tc-search__info-button" }))] }));
304
+ return (jsxs("div", { className: `tc-search ${className}`.trim(), children: [jsx(GlobalSearch, { placeholder: placeholder, filterPlaceholder: filterPlaceholder, filterOptions: filterOptions, filterValue: controlledFilterValue !== undefined ? controlledFilterValue : filterValue, searchValue: controlledSearchValue !== undefined ? controlledSearchValue : searchValue, disabled: disabled, onSearch: handleSearch, onFilterChange: handleFilterChange, onSubmit: handleSubmit }), showInfoIcon && (jsx(IconButton, { icon: jsx(InfoIcon, { size: "medium" }), size: "medium", color: "inherit", onClick: handleInfoClick, disabled: disabled, ariaLabel: "More information", className: "tc-search__info-button" }))] }));
312
305
  };
313
306
 
314
307
  // Chevron Right Icon for submenu indicator
@@ -817,6 +810,7 @@ const TCButton = s(Button, {
817
810
  props: {
818
811
  label: 'string',
819
812
  variant: 'string',
813
+ color: 'string',
820
814
  disabled: 'boolean',
821
815
  showStartIcon: 'boolean',
822
816
  showEndIcon: 'boolean',
@@ -824,16 +818,6 @@ const TCButton = s(Button, {
824
818
  className: 'string',
825
819
  },
826
820
  });
827
- // Convert ButtonGroup to Web Component
828
- const TCButtonGroup = s(ButtonGroup, {
829
- props: {
830
- label: 'string',
831
- variant: 'string',
832
- disabled: 'boolean',
833
- showStartIcon: 'boolean',
834
- className: 'string',
835
- },
836
- });
837
821
  // Convert Input to Web Component
838
822
  const TCInput = s(Input, {
839
823
  props: {
@@ -856,9 +840,6 @@ function registerWebComponents() {
856
840
  if (!customElements.get('tc-button')) {
857
841
  customElements.define('tc-button', TCButton);
858
842
  }
859
- if (!customElements.get('tc-button-group')) {
860
- customElements.define('tc-button-group', TCButtonGroup);
861
- }
862
843
  if (!customElements.get('tc-input')) {
863
844
  customElements.define('tc-input', TCInput);
864
845
  }
@@ -867,5 +848,5 @@ function registerWebComponents() {
867
848
  // Auto-register when loaded in browser
868
849
  registerWebComponents();
869
850
 
870
- export { Button, ButtonGroup, CaretDownIcon, ChevronDownIcon, ChevronUpIcon, DropdownMenu, FilterDropdown, Footer, GlobalHeader, GlobalSearch, HeaderMenu, IconButton, InfoIcon, Input, Layout, Logo, MainHeader, PageHeader, SearchIcon, Sidebar, TCButton, TCButtonGroup, TCInput, Tab, defaultIcons, registerWebComponents };
851
+ export { Button, CaretDownIcon, ChevronDownIcon, ChevronUpIcon, DropdownMenu, FilterDropdown, Footer, GlobalHeader, GlobalSearch, HeaderMenu, IconButton, InfoIcon, Input, Layout, Logo, MainHeader, PageHeader, SearchIcon, Sidebar, TCButton, TCInput, Tab, defaultIcons, registerWebComponents };
871
852
  //# sourceMappingURL=index.esm.js.map