@fastnd/components 1.0.6 → 1.0.7

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.
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ export interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ initials: string;
4
+ name?: string;
5
+ className?: string;
6
+ }
7
+ export declare const Avatar: React.ForwardRefExoticComponent<AvatarProps & React.RefAttributes<HTMLDivElement>>;
8
+ export interface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {
9
+ children: React.ReactNode;
10
+ className?: string;
11
+ }
12
+ export declare const AvatarGroup: React.ForwardRefExoticComponent<AvatarGroupProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
3
+ className?: string;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
3
+ variant?: 'primary' | 'outline' | 'ghost';
4
+ size?: 'sm' | 'md';
5
+ className?: string;
6
+ children: React.ReactNode;
7
+ }
8
+ export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface ChecklistItemType {
3
+ id: string;
4
+ text: string;
5
+ checked: boolean;
6
+ }
7
+ export interface ChecklistProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
8
+ items: ChecklistItemType[];
9
+ onChange?: (items: ChecklistItemType[]) => void;
10
+ editable?: boolean;
11
+ className?: string;
12
+ }
13
+ export declare const Checklist: React.ForwardRefExoticComponent<ChecklistProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export type PriorityLevel = 'high' | 'medium' | 'low';
3
+ export type PrioritySize = 'small' | 'large';
4
+ export interface PriorityBadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
5
+ level: PriorityLevel;
6
+ size?: PrioritySize;
7
+ className?: string;
8
+ }
9
+ export declare const PriorityBadge: React.ForwardRefExoticComponent<PriorityBadgeProps & React.RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface StatusOption {
3
+ value: string;
4
+ label: string;
5
+ }
6
+ export interface StatusDropdownProps {
7
+ value?: string;
8
+ onChange?: (value: string) => void;
9
+ options: StatusOption[];
10
+ className?: string;
11
+ 'aria-label'?: string;
12
+ }
13
+ export declare const StatusDropdown: React.ForwardRefExoticComponent<StatusDropdownProps & React.RefAttributes<HTMLDivElement>>;
@@ -8,3 +8,15 @@ export { StatusChart } from './StatusChart/StatusChart';
8
8
  export type { StatusChartProps } from './StatusChart/StatusChart';
9
9
  export { ProjectTable } from './ProjectTable/ProjectTable';
10
10
  export type { ProjectTableProps, ProjectRow } from './ProjectTable/ProjectTable';
11
+ export { Avatar, AvatarGroup } from './Avatar/Avatar';
12
+ export type { AvatarProps, AvatarGroupProps } from './Avatar/Avatar';
13
+ export { Button } from './Button/Button';
14
+ export type { ButtonProps } from './Button/Button';
15
+ export { PriorityBadge } from './PriorityBadge/PriorityBadge';
16
+ export type { PriorityBadgeProps, PriorityLevel, PrioritySize } from './PriorityBadge/PriorityBadge';
17
+ export { Badge } from './Badge/Badge';
18
+ export type { BadgeProps } from './Badge/Badge';
19
+ export { StatusDropdown } from './StatusDropdown/StatusDropdown';
20
+ export type { StatusDropdownProps, StatusOption } from './StatusDropdown/StatusDropdown';
21
+ export { Checklist } from './Checklist/Checklist';
22
+ export type { ChecklistProps, ChecklistItemType } from './Checklist/Checklist';
@@ -1,80 +1,80 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('._status-badge_1vytb_3{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .625rem;border-radius:1rem;font-size:.75rem;font-weight:500;line-height:1;color:var(--custom-color, var(--current-color));background-color:var(--custom-bg, var(--current-bg));white-space:nowrap}._status-badge_1vytb_3:before{content:"";display:block;width:6px;height:6px;border-radius:50%;background-color:var(--custom-color, var(--current-color))}._status-badge--neu_1vytb_26{--current-color: hsl(var(--status-neu));--current-bg: hsl(var(--status-neu) / .1)}._status-badge--offen_1vytb_31{--current-color: hsl(var(--status-offen));--current-bg: hsl(var(--status-offen) / .1)}._status-badge--in-prufung_1vytb_36{--current-color: hsl(var(--status-in-prufung));--current-bg: hsl(var(--status-in-prufung) / .1)}._status-badge--validierung_1vytb_41{--current-color: hsl(var(--status-validierung));--current-bg: hsl(var(--status-validierung) / .1)}._status-badge--abgeschlossen_1vytb_46{--current-color: hsl(var(--status-abgeschlossen));--current-bg: hsl(var(--status-abgeschlossen) / .1)}._favorite-btn_1f4wz_3{background:none;border:none;color:var(--custom-color, hsl(var(--muted-foreground) / .5));cursor:pointer;display:flex;align-items:center;justify-content:center;padding:.375rem;border-radius:var(--radius);transition:all .2s ease}._favorite-btn_1f4wz_3:hover,._favorite-btn_1f4wz_3:focus-visible{background-color:hsl(var(--muted));color:var(--custom-active-color, hsl(var(--score-medium)));outline:none}._favorite-btn--active_1f4wz_23{color:var(--custom-active-color, hsl(var(--score-medium)))}._favorite-btn_1f4wz_3 svg{width:18px;height:18px;fill:currentColor}._status-legend__item_1935r_3{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-radius:calc(var(--radius) - 2px);cursor:pointer;transition:background-color .2s ease;border:1px solid transparent;background:none;width:100%}._status-legend__item_1935r_3:hover,._status-legend__item_1935r_3:focus-visible{background-color:hsl(var(--muted));outline:none}._status-legend__item--active_1935r_22{background-color:hsl(var(--muted));border-color:hsl(var(--border))}._status-legend__label-wrap_1935r_27{display:flex;align-items:center;gap:.5rem}._status-legend__color_1935r_33{width:12px;height:12px;border-radius:50%;flex-shrink:0;background-color:var(--custom-color, var(--current-color))}._status-legend__label_1935r_27{font-size:.875rem;color:hsl(var(--foreground));font-weight:500}._status-legend__count_1935r_47{font-family:var(--font-grotesk);font-size:.875rem;color:hsl(var(--muted-foreground));font-weight:600;background-color:hsl(var(--secondary));padding:.125rem .5rem;border-radius:1rem}._color-neu_1935r_57{--current-color: hsl(var(--status-neu))}._color-offen_1935r_61{--current-color: hsl(var(--status-offen))}._color-in-prufung_1935r_65{--current-color: hsl(var(--status-in-prufung))}._color-validierung_1935r_69{--current-color: hsl(var(--status-validierung))}._color-abgeschlossen_1935r_73{--current-color: hsl(var(--status-abgeschlossen))}._color-alle_1935r_77{--current-color: hsl(var(--status-alle))}._status-overview__chart-container_1f9eq_3{position:relative;width:200px;height:200px;margin:1rem auto 2rem;display:flex;align-items:center;justify-content:center}._status-chart-svg_1f9eq_13{width:100%;height:100%;position:absolute;top:0;left:0;filter:drop-shadow(var(--shadow-sm));pointer-events:none}._status-chart__segment_1f9eq_23{transition:all .3s cubic-bezier(.4,0,.2,1);stroke-linecap:butt;pointer-events:stroke}._status-chart__segment_1f9eq_23:hover,._status-chart__segment--hovered_1f9eq_30{stroke-width:48px;filter:brightness(1.1)}._status-chart__segment--dimmed_1f9eq_35{opacity:.6;filter:grayscale(.2)}._status-chart__hole_1f9eq_40{width:120px;height:120px;background-color:hsl(var(--card));border-radius:50%;position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:inset var(--shadow-sm);clip-path:circle(50%)}._status-chart__total-value_1f9eq_55{font-family:var(--font-clash);font-size:2rem;font-weight:600;line-height:1;color:hsl(var(--foreground))}._status-chart__total-label_1f9eq_63{font-size:.75rem;color:hsl(var(--muted-foreground));text-transform:uppercase;letter-spacing:.05em;margin-top:.25rem}:root{--primary: 209 100% 56%;--primary-hover: 207 82% 42%;--accent: 207 82% 42%;--background: 0 0% 100%;--foreground: 215 25% 15%;--muted: 210 15% 93%;--muted-foreground: 215 15% 45%;--secondary: 210 12% 94%;--border: 210 20% 90%;--input: 210 15% 92%;--card: 0 0% 100%;--card-foreground: 215 25% 15%;--popover: 0 0% 100%;--popover-foreground: 215 25% 15%;--destructive: 0 72% 51%;--score-high: 165 70% 42%;--score-medium: 45 90% 50%;--score-low: 35 85% 55%;--sidebar-background: 0 0% 100%;--sidebar-foreground: 215 20% 25%;--sidebar-primary: 209 100% 56%;--sidebar-accent: 210 20% 96%;--sidebar-border: 210 15% 92%;--radius: .5rem;--shadow-sm: 0 1px 2px 0 hsl(215 25% 15% / .04);--shadow-md: 0 4px 6px -1px hsl(215 25% 15% / .08);--shadow-lg: 0 10px 15px -3px hsl(215 25% 15% / .1);--shadow-card: 0 2px 8px hsl(215 25% 15% / .06);--gradient-primary: linear-gradient(135deg, hsl(209 100% 56%), hsl(207 82% 42%));--status-alle: 215 16% 47%;--status-neu: 210 95% 63%;--status-offen: 38 92% 50%;--status-in-prufung: 350 89% 60%;--status-validierung: 82 84% 44%;--status-abgeschlossen: 142 76% 36%;--font-inter: "Inter", sans-serif;--font-clash: "Clash Grotesk", sans-serif;--font-grotesk: "Space Grotesk", sans-serif}._table-container_fgnrg_3{overflow-x:auto}._project-table_fgnrg_7{width:100%;border-collapse:separate;border-spacing:0;text-align:left;table-layout:fixed}._project-table__head_fgnrg_15 th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:hsl(var(--muted-foreground));padding:.75rem 1rem;border-bottom:1px solid hsl(var(--border));font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._project-table__head_fgnrg_15 th:nth-child(1){width:auto}._project-table__head_fgnrg_15 th:nth-child(2){width:20%}._project-table__head_fgnrg_15 th:nth-child(3){width:150px}._project-table__head_fgnrg_15 th:nth-child(4){width:160px}._project-table__row_fgnrg_33{transition:background-color .15s ease;cursor:default}._project-table__row_fgnrg_33:hover{background-color:hsl(var(--muted) / .5)}._project-table__row_fgnrg_33 td{padding:1rem;border-bottom:1px solid hsl(var(--border));font-size:.875rem;color:hsl(var(--foreground));vertical-align:middle}._project-table__row_fgnrg_33 td:nth-child(1),._project-table__row_fgnrg_33 td:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__row_fgnrg_33 td:nth-child(3),._project-table__row_fgnrg_33 td:nth-child(4){overflow:visible}._project-table__row_fgnrg_33:last-child td{border-bottom:none}._project-table__name-cell_fgnrg_66{display:flex;align-items:center;gap:.5rem}._project-table__favorite_fgnrg_72{margin-left:-.5rem}._project-table__name-wrapper_fgnrg_76{display:flex;flex-direction:column;overflow:hidden;min-width:0}._project-table__name_fgnrg_66{font-weight:500;color:hsl(var(--foreground));line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__app_fgnrg_92,._project-table__date-secondary_fgnrg_93{font-size:.75rem;color:hsl(var(--muted-foreground));margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__client_fgnrg_102,._project-table__date-main_fgnrg_103{color:hsl(var(--muted-foreground));font-size:.8125rem;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__date-main_fgnrg_103{color:hsl(var(--foreground));font-weight:500}')),document.head.appendChild(e)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
2
- import { jsx as e, jsxs as u } from "react/jsx-runtime";
3
- import v, { useState as q } from "react";
4
- function w(t) {
5
- var r, l, s = "";
6
- if (typeof t == "string" || typeof t == "number") s += t;
7
- else if (typeof t == "object") if (Array.isArray(t)) {
8
- var n = t.length;
9
- for (r = 0; r < n; r++) t[r] && (l = w(t[r])) && (s && (s += " "), s += l);
10
- } else for (l in t) t[l] && (s && (s += " "), s += l);
1
+ (function(){"use strict";try{if(typeof document<"u"){var r=document.createElement("style");r.appendChild(document.createTextNode('._status-badge_1vytb_3{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .625rem;border-radius:1rem;font-size:.75rem;font-weight:500;line-height:1;color:var(--custom-color, var(--current-color));background-color:var(--custom-bg, var(--current-bg));white-space:nowrap}._status-badge_1vytb_3:before{content:"";display:block;width:6px;height:6px;border-radius:50%;background-color:var(--custom-color, var(--current-color))}._status-badge--neu_1vytb_26{--current-color: hsl(var(--status-neu));--current-bg: hsl(var(--status-neu) / .1)}._status-badge--offen_1vytb_31{--current-color: hsl(var(--status-offen));--current-bg: hsl(var(--status-offen) / .1)}._status-badge--in-prufung_1vytb_36{--current-color: hsl(var(--status-in-prufung));--current-bg: hsl(var(--status-in-prufung) / .1)}._status-badge--validierung_1vytb_41{--current-color: hsl(var(--status-validierung));--current-bg: hsl(var(--status-validierung) / .1)}._status-badge--abgeschlossen_1vytb_46{--current-color: hsl(var(--status-abgeschlossen));--current-bg: hsl(var(--status-abgeschlossen) / .1)}._favorite-btn_1f4wz_3{background:none;border:none;color:var(--custom-color, hsl(var(--muted-foreground) / .5));cursor:pointer;display:flex;align-items:center;justify-content:center;padding:.375rem;border-radius:var(--radius);transition:all .2s ease}._favorite-btn_1f4wz_3:hover,._favorite-btn_1f4wz_3:focus-visible{background-color:hsl(var(--muted));color:var(--custom-active-color, hsl(var(--score-medium)));outline:none}._favorite-btn--active_1f4wz_23{color:var(--custom-active-color, hsl(var(--score-medium)))}._favorite-btn_1f4wz_3 svg{width:18px;height:18px;fill:currentColor}._status-legend__item_1935r_3{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;border-radius:calc(var(--radius) - 2px);cursor:pointer;transition:background-color .2s ease;border:1px solid transparent;background:none;width:100%}._status-legend__item_1935r_3:hover,._status-legend__item_1935r_3:focus-visible{background-color:hsl(var(--muted));outline:none}._status-legend__item--active_1935r_22{background-color:hsl(var(--muted));border-color:hsl(var(--border))}._status-legend__label-wrap_1935r_27{display:flex;align-items:center;gap:.5rem}._status-legend__color_1935r_33{width:12px;height:12px;border-radius:50%;flex-shrink:0;background-color:var(--custom-color, var(--current-color))}._status-legend__label_1935r_27{font-size:.875rem;color:hsl(var(--foreground));font-weight:500}._status-legend__count_1935r_47{font-family:var(--font-grotesk);font-size:.875rem;color:hsl(var(--muted-foreground));font-weight:600;background-color:hsl(var(--secondary));padding:.125rem .5rem;border-radius:1rem}._color-neu_1935r_57{--current-color: hsl(var(--status-neu))}._color-offen_1935r_61{--current-color: hsl(var(--status-offen))}._color-in-prufung_1935r_65{--current-color: hsl(var(--status-in-prufung))}._color-validierung_1935r_69{--current-color: hsl(var(--status-validierung))}._color-abgeschlossen_1935r_73{--current-color: hsl(var(--status-abgeschlossen))}._color-alle_1935r_77{--current-color: hsl(var(--status-alle))}._status-overview__chart-container_1f9eq_3{position:relative;width:200px;height:200px;margin:1rem auto 2rem;display:flex;align-items:center;justify-content:center}._status-chart-svg_1f9eq_13{width:100%;height:100%;position:absolute;top:0;left:0;filter:drop-shadow(var(--shadow-sm));pointer-events:none}._status-chart__segment_1f9eq_23{transition:all .3s cubic-bezier(.4,0,.2,1);stroke-linecap:butt;pointer-events:stroke}._status-chart__segment_1f9eq_23:hover,._status-chart__segment--hovered_1f9eq_30{stroke-width:48px;filter:brightness(1.1)}._status-chart__segment--dimmed_1f9eq_35{opacity:.6;filter:grayscale(.2)}._status-chart__hole_1f9eq_40{width:120px;height:120px;background-color:hsl(var(--card));border-radius:50%;position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:inset var(--shadow-sm);clip-path:circle(50%)}._status-chart__total-value_1f9eq_55{font-family:var(--font-clash);font-size:2rem;font-weight:600;line-height:1;color:hsl(var(--foreground))}._status-chart__total-label_1f9eq_63{font-size:.75rem;color:hsl(var(--muted-foreground));text-transform:uppercase;letter-spacing:.05em;margin-top:.25rem}._table-container_fgnrg_3{overflow-x:auto}._project-table_fgnrg_7{width:100%;border-collapse:separate;border-spacing:0;text-align:left;table-layout:fixed}._project-table__head_fgnrg_15 th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:hsl(var(--muted-foreground));padding:.75rem 1rem;border-bottom:1px solid hsl(var(--border));font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._project-table__head_fgnrg_15 th:nth-child(1){width:auto}._project-table__head_fgnrg_15 th:nth-child(2){width:20%}._project-table__head_fgnrg_15 th:nth-child(3){width:150px}._project-table__head_fgnrg_15 th:nth-child(4){width:160px}._project-table__row_fgnrg_33{transition:background-color .15s ease;cursor:default}._project-table__row_fgnrg_33:hover{background-color:hsl(var(--muted) / .5)}._project-table__row_fgnrg_33 td{padding:1rem;border-bottom:1px solid hsl(var(--border));font-size:.875rem;color:hsl(var(--foreground));vertical-align:middle}._project-table__row_fgnrg_33 td:nth-child(1),._project-table__row_fgnrg_33 td:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__row_fgnrg_33 td:nth-child(3),._project-table__row_fgnrg_33 td:nth-child(4){overflow:visible}._project-table__row_fgnrg_33:last-child td{border-bottom:none}._project-table__name-cell_fgnrg_66{display:flex;align-items:center;gap:.5rem}._project-table__favorite_fgnrg_72{margin-left:-.5rem}._project-table__name-wrapper_fgnrg_76{display:flex;flex-direction:column;overflow:hidden;min-width:0}._project-table__name_fgnrg_66{font-weight:500;color:hsl(var(--foreground));line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__app_fgnrg_92,._project-table__date-secondary_fgnrg_93{font-size:.75rem;color:hsl(var(--muted-foreground));margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__client_fgnrg_102,._project-table__date-main_fgnrg_103{color:hsl(var(--muted-foreground));font-size:.8125rem;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._project-table__date-main_fgnrg_103{color:hsl(var(--foreground));font-weight:500}._avatar_1ml48_3{width:1.5rem;height:1.5rem;border-radius:50%;background-color:hsl(var(--secondary));border:1px solid hsl(var(--border));display:flex;align-items:center;justify-content:center;font-size:.625rem;font-weight:600;color:hsl(var(--foreground));text-transform:uppercase}._avatar-group_1ml48_18{display:flex;align-items:center}._group-member_1ml48_23{margin-right:-.5rem;position:relative;z-index:1;border:2px solid hsl(var(--card))}._group-member_1ml48_23:hover{z-index:10}._btn_lw4l4_3{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;white-space:nowrap;border-radius:calc(var(--radius) - 2px);font-size:.875rem;font-weight:500;transition:all .2s cubic-bezier(.16,1,.3,1);cursor:pointer;border:1px solid transparent}._btn_lw4l4_3:focus-visible{outline:2px solid hsl(var(--primary));outline-offset:2px}._btn_lw4l4_3:active{transform:scale(.98)}._btn--primary_lw4l4_27{background:var(--gradient-header);color:#fff;padding:.5rem 1rem;box-shadow:var(--shadow-sm)}._btn--primary_lw4l4_27:hover{box-shadow:var(--shadow-md);opacity:.9}._btn--outline_lw4l4_39{background-color:transparent;border-color:hsl(var(--border));color:hsl(var(--foreground));padding:.375rem .75rem;min-width:110px}._btn--outline_lw4l4_39:hover{background-color:hsl(var(--secondary));color:hsl(var(--foreground))}._btn--ghost_lw4l4_52{background-color:transparent;color:hsl(var(--muted-foreground));padding:.375rem}._btn--ghost_lw4l4_52:hover{background-color:hsl(var(--secondary));color:hsl(var(--foreground))}._btn--sm_lw4l4_63{padding:.2rem .4rem;font-size:.75rem;min-width:auto!important}._badge_144f0_3{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-grotesk);font-weight:800}._badge--high_144f0_12{background-color:hsl(var(--destructive) / .1);color:hsl(var(--destructive));border:1px solid hsl(var(--destructive) / .2)}._badge--medium_144f0_18{background-color:hsl(var(--score-medium) / .1);color:hsl(var(--score-medium));border:1px solid hsl(var(--score-medium) / .2)}._badge--low_144f0_24{background-color:hsl(var(--secondary));color:hsl(var(--muted-foreground));border:1px solid hsl(var(--border))}._badge--size-small_144f0_30{width:1.5rem;height:1.5rem;border-radius:.375rem;font-size:.75rem}._badge--size-large_144f0_37{width:2.25rem;height:2.25rem;border-radius:.5rem;font-size:1.125rem}._badge--size-large_144f0_37._badge--low_144f0_24{font-size:.875rem}._badge_1ru08_3{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .75rem;background-color:hsl(var(--secondary));border-radius:2rem;font-size:.8125rem;font-weight:500}._status-dropdown_1t4xn_3{position:relative;display:inline-block;width:88px}._status-trigger_1t4xn_9{width:100%!important;justify-content:space-between!important}._status-menu_1t4xn_14{position:absolute;top:100%;right:0;margin-top:.25rem;background-color:hsl(var(--popover));border:1px solid hsl(var(--border));border-radius:calc(var(--radius) - 2px);box-shadow:var(--shadow-lg);z-index:100;width:100%;min-width:88px;display:none;padding:.25rem;animation:_fadeIn_1t4xn_1 .15s ease-out}._status-menu_1t4xn_14._is-open_1t4xn_31{display:block}._status-menu-item_1t4xn_35{width:100%;padding:.5rem .75rem;font-size:.8125rem;text-align:left;background:none;border:none;cursor:pointer;border-radius:calc(var(--radius) - 4px);color:hsl(var(--foreground));transition:background-color .1s}._status-menu-item_1t4xn_35:hover{background-color:hsl(var(--secondary))}._status-menu-item_1t4xn_35._is-active_1t4xn_52{font-weight:500}._icon_1t4xn_56{width:1rem;height:1rem;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}._icon-sm_1t4xn_65{width:.875rem;height:.875rem}@keyframes _fadeIn_1t4xn_1{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}:root{--primary: 209 100% 56%;--primary-hover: 207 82% 42%;--accent: 207 82% 42%;--background: 0 0% 100%;--foreground: 215 25% 15%;--muted: 210 15% 93%;--muted-foreground: 215 15% 45%;--secondary: 210 12% 94%;--border: 210 20% 90%;--input: 210 15% 92%;--card: 0 0% 100%;--card-foreground: 215 25% 15%;--popover: 0 0% 100%;--popover-foreground: 215 25% 15%;--destructive: 0 72% 51%;--score-high: 165 70% 42%;--score-medium: 45 90% 50%;--score-low: 35 85% 55%;--sidebar-background: 0 0% 100%;--sidebar-foreground: 215 20% 25%;--sidebar-primary: 209 100% 56%;--sidebar-accent: 210 20% 96%;--sidebar-border: 210 15% 92%;--radius: .5rem;--shadow-sm: 0 1px 2px 0 hsl(215 25% 15% / .04);--shadow-md: 0 4px 6px -1px hsl(215 25% 15% / .08);--shadow-lg: 0 10px 15px -3px hsl(215 25% 15% / .1);--shadow-card: 0 2px 8px hsl(215 25% 15% / .06);--gradient-primary: linear-gradient(135deg, hsl(209 100% 56%), hsl(207 82% 42%));--gradient-header: linear-gradient(135deg, hsl(207 82% 42%), hsl(209 100% 56%));--status-alle: 215 16% 47%;--status-neu: 210 95% 63%;--status-offen: 38 92% 50%;--status-in-prufung: 350 89% 60%;--status-validierung: 82 84% 44%;--status-abgeschlossen: 142 76% 36%;--font-inter: "Inter", sans-serif;--font-clash: "Clash Grotesk", sans-serif;--font-grotesk: "Space Grotesk", sans-serif}._checklist_ylbeh_3{display:flex;flex-direction:column;gap:.5rem}._check-item_ylbeh_9{display:flex;align-items:center;gap:.5rem;font-size:.875rem}._check-item_ylbeh_9 input[type=checkbox]{width:1rem;height:1rem;accent-color:hsl(var(--primary));cursor:pointer}._check-item_ylbeh_9 label{cursor:pointer}._check-item_ylbeh_9._is-done_ylbeh_27 label{text-decoration:line-through;color:hsl(var(--muted-foreground))}._checklist--readonly_ylbeh_32 ._check-item_ylbeh_9 label{cursor:pointer}._checklist--readonly_ylbeh_32 ._check-item_ylbeh_9 input[type=checkbox]{pointer-events:all}._form-control_ylbeh_40{width:100%;padding:.125rem;border:none;background:transparent;color:hsl(var(--foreground));font-family:inherit;font-size:.875rem;border-radius:calc(var(--radius) - 2px);transition:background-color .2s}._form-control_ylbeh_40:focus{outline:none;background-color:hsl(var(--background))}._is-done_ylbeh_27 ._form-control_ylbeh_40{text-decoration:line-through;color:hsl(var(--muted-foreground))}')),document.head.appendChild(r)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2
+ import { jsx as a, jsxs as m } from "react/jsx-runtime";
3
+ import g, { useState as I, useRef as q, useEffect as O } from "react";
4
+ function M(e) {
5
+ var t, r, s = "";
6
+ if (typeof e == "string" || typeof e == "number") s += e;
7
+ else if (typeof e == "object") if (Array.isArray(e)) {
8
+ var n = e.length;
9
+ for (t = 0; t < n; t++) e[t] && (r = M(e[t])) && (s && (s += " "), s += r);
10
+ } else for (r in e) e[r] && (s && (s += " "), s += r);
11
11
  return s;
12
12
  }
13
- function p() {
14
- for (var t, r, l = 0, s = "", n = arguments.length; l < n; l++) (t = arguments[l]) && (r = w(t)) && (s && (s += " "), s += r);
13
+ function d() {
14
+ for (var e, t, r = 0, s = "", n = arguments.length; r < n; r++) (e = arguments[r]) && (t = M(e)) && (s && (s += " "), s += t);
15
15
  return s;
16
16
  }
17
- const S = {
17
+ const L = {
18
18
  "status-badge": "_status-badge_1vytb_3",
19
19
  "status-badge--neu": "_status-badge--neu_1vytb_26",
20
20
  "status-badge--offen": "_status-badge--offen_1vytb_31",
21
21
  "status-badge--in-prufung": "_status-badge--in-prufung_1vytb_36",
22
22
  "status-badge--validierung": "_status-badge--validierung_1vytb_41",
23
23
  "status-badge--abgeschlossen": "_status-badge--abgeschlossen_1vytb_46"
24
- }, R = {
24
+ }, W = {
25
25
  neu: "Neu",
26
26
  offen: "Offen",
27
27
  "in-prufung": "In Prüfung",
28
28
  validierung: "Validierung",
29
29
  abgeschlossen: "Abgeschlossen"
30
- }, A = v.forwardRef(
31
- ({ status: t, color: r, backgroundColor: l, className: s, style: n, ...a }, o) => {
32
- const i = {
30
+ }, T = g.forwardRef(
31
+ ({ status: e, color: t, backgroundColor: r, className: s, style: n, ...l }, c) => {
32
+ const b = {
33
33
  ...n,
34
- "--custom-color": r,
35
- "--custom-bg": l
34
+ "--custom-color": t,
35
+ "--custom-bg": r
36
36
  };
37
- return /* @__PURE__ */ e(
37
+ return /* @__PURE__ */ a(
38
38
  "span",
39
39
  {
40
- ref: o,
41
- className: p(S["status-badge"], S[`status-badge--${t}`], s),
42
- style: i,
43
- ...a,
44
- children: R[t]
40
+ ref: c,
41
+ className: d(L["status-badge"], L[`status-badge--${e}`], s),
42
+ style: b,
43
+ ...l,
44
+ children: W[e]
45
45
  }
46
46
  );
47
47
  }
48
48
  );
49
- A.displayName = "StatusBadge";
50
- const L = {
49
+ T.displayName = "StatusBadge";
50
+ const B = {
51
51
  "favorite-btn": "_favorite-btn_1f4wz_3",
52
52
  "favorite-btn--active": "_favorite-btn--active_1f4wz_23"
53
- }, I = v.forwardRef(
54
- ({ pressed: t, projectName: r, onToggle: l, color: s, activeColor: n, className: a, style: o, onClick: i, ...g }, h) => {
55
- const d = {
56
- ...o,
53
+ }, z = g.forwardRef(
54
+ ({ pressed: e, projectName: t, onToggle: r, color: s, activeColor: n, className: l, style: c, onClick: b, ...o }, i) => {
55
+ const u = {
56
+ ...c,
57
57
  "--custom-color": s,
58
58
  "--custom-active-color": n
59
- }, y = t ? `Von Favoriten entfernen: ${r}` : `Zu Favoriten hinzufügen: ${r}`;
60
- return /* @__PURE__ */ e(
59
+ }, N = e ? `Von Favoriten entfernen: ${t}` : `Zu Favoriten hinzufügen: ${t}`;
60
+ return /* @__PURE__ */ a(
61
61
  "button",
62
62
  {
63
- ref: h,
63
+ ref: i,
64
64
  type: "button",
65
- className: p(
66
- L["favorite-btn"],
67
- { [L["favorite-btn--active"]]: t },
68
- a
65
+ className: d(
66
+ B["favorite-btn"],
67
+ { [B["favorite-btn--active"]]: e },
68
+ l
69
69
  ),
70
- style: d,
71
- "aria-pressed": t,
72
- "aria-label": y,
73
- onClick: (m) => {
74
- l?.(!t), i?.(m);
70
+ style: u,
71
+ "aria-pressed": e,
72
+ "aria-label": N,
73
+ onClick: (j) => {
74
+ r?.(!e), b?.(j);
75
75
  },
76
- ...g,
77
- children: /* @__PURE__ */ e(
76
+ ...o,
77
+ children: /* @__PURE__ */ a(
78
78
  "svg",
79
79
  {
80
80
  viewBox: "0 0 24 24",
@@ -83,15 +83,15 @@ const L = {
83
83
  strokeWidth: "2",
84
84
  strokeLinecap: "round",
85
85
  strokeLinejoin: "round",
86
- children: /* @__PURE__ */ e("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
86
+ children: /* @__PURE__ */ a("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" })
87
87
  }
88
88
  )
89
89
  }
90
90
  );
91
91
  }
92
92
  );
93
- I.displayName = "FavoriteButton";
94
- const b = {
93
+ z.displayName = "FavoriteButton";
94
+ const k = {
95
95
  "status-legend__item": "_status-legend__item_1935r_3",
96
96
  "status-legend__item--active": "_status-legend__item--active_1935r_22",
97
97
  "status-legend__label-wrap": "_status-legend__label-wrap_1935r_27",
@@ -104,45 +104,45 @@ const b = {
104
104
  "color-validierung": "_color-validierung_1935r_69",
105
105
  "color-abgeschlossen": "_color-abgeschlossen_1935r_73",
106
106
  "color-alle": "_color-alle_1935r_77"
107
- }, B = v.forwardRef(
108
- ({ status: t, label: r, count: l, active: s = !1, color: n, className: a, style: o, ...i }, g) => {
109
- const h = {
110
- ...o,
107
+ }, F = g.forwardRef(
108
+ ({ status: e, label: t, count: r, active: s = !1, color: n, className: l, style: c, ...b }, o) => {
109
+ const i = {
110
+ ...c,
111
111
  "--custom-color": n
112
112
  };
113
- return /* @__PURE__ */ u(
113
+ return /* @__PURE__ */ m(
114
114
  "button",
115
115
  {
116
- ref: g,
116
+ ref: o,
117
117
  type: "button",
118
118
  role: "option",
119
119
  "aria-selected": s,
120
- className: p(
121
- b["status-legend__item"],
122
- { [b["status-legend__item--active"]]: s },
123
- a
120
+ className: d(
121
+ k["status-legend__item"],
122
+ { [k["status-legend__item--active"]]: s },
123
+ l
124
124
  ),
125
- style: h,
126
- ...i,
125
+ style: i,
126
+ ...b,
127
127
  children: [
128
- /* @__PURE__ */ u("div", { className: b["status-legend__label-wrap"], children: [
129
- /* @__PURE__ */ e(
128
+ /* @__PURE__ */ m("div", { className: k["status-legend__label-wrap"], children: [
129
+ /* @__PURE__ */ a(
130
130
  "span",
131
131
  {
132
- className: p(b["status-legend__color"], b[`color-${t}`]),
132
+ className: d(k["status-legend__color"], k[`color-${e}`]),
133
133
  "aria-hidden": "true"
134
134
  }
135
135
  ),
136
- /* @__PURE__ */ e("span", { className: b["status-legend__label"], children: r })
136
+ /* @__PURE__ */ a("span", { className: k["status-legend__label"], children: t })
137
137
  ] }),
138
- /* @__PURE__ */ e("span", { className: b["status-legend__count"], children: l })
138
+ /* @__PURE__ */ a("span", { className: k["status-legend__count"], children: r })
139
139
  ]
140
140
  }
141
141
  );
142
142
  }
143
143
  );
144
- B.displayName = "StatusLegendItem";
145
- const f = {
144
+ F.displayName = "StatusLegendItem";
145
+ const v = {
146
146
  "status-overview__chart-container": "_status-overview__chart-container_1f9eq_3",
147
147
  "status-chart-svg": "_status-chart-svg_1f9eq_13",
148
148
  "status-chart__segment": "_status-chart__segment_1f9eq_23",
@@ -151,94 +151,94 @@ const f = {
151
151
  "status-chart__hole": "_status-chart__hole_1f9eq_40",
152
152
  "status-chart__total-value": "_status-chart__total-value_1f9eq_55",
153
153
  "status-chart__total-label": "_status-chart__total-label_1f9eq_63"
154
- }, D = v.forwardRef(
155
- ({ data: t, totalLabel: r = "Gesamt", onSegmentClick: l, className: s, ...n }, a) => {
156
- const [o, i] = q(null), g = t.reduce((j, c) => j + c.value, 0), h = 240, d = h / 2, y = 100, m = 40, N = y - m / 2, $ = N * 2 * Math.PI;
157
- return /* @__PURE__ */ u(
154
+ }, G = g.forwardRef(
155
+ ({ data: e, totalLabel: t = "Gesamt", onSegmentClick: r, className: s, ...n }, l) => {
156
+ const [c, b] = I(null), o = e.reduce((p, h) => p + h.value, 0), i = 240, u = i / 2, N = 100, j = 40, w = N - j / 2, _ = w * 2 * Math.PI;
157
+ return /* @__PURE__ */ m(
158
158
  "div",
159
159
  {
160
- ref: a,
161
- className: p(f["status-overview__chart-container"], s),
160
+ ref: l,
161
+ className: d(v["status-overview__chart-container"], s),
162
162
  ...n,
163
163
  children: [
164
- /* @__PURE__ */ e(
164
+ /* @__PURE__ */ a(
165
165
  "svg",
166
166
  {
167
- viewBox: `0 0 ${h} ${h}`,
168
- className: f["status-chart-svg"],
167
+ viewBox: `0 0 ${i} ${i}`,
168
+ className: v["status-chart-svg"],
169
169
  role: "img",
170
170
  "aria-label": "Kreisdiagramm der Projektstatus-Verteilung",
171
171
  overflow: "visible",
172
- children: g === 0 ? /* @__PURE__ */ e(
172
+ children: o === 0 ? /* @__PURE__ */ a(
173
173
  "circle",
174
174
  {
175
- cx: d,
176
- cy: d,
177
- r: N,
175
+ cx: u,
176
+ cy: u,
177
+ r: w,
178
178
  fill: "none",
179
179
  stroke: "hsl(var(--border))",
180
- strokeWidth: m
180
+ strokeWidth: j
181
181
  }
182
182
  ) : (() => {
183
- let j = 0;
184
- return t.map((c) => {
185
- if (c.value === 0) return null;
186
- const k = c.value / g * 100, x = k / 100 * $, T = j / 100 * $;
187
- return j += k, /* @__PURE__ */ e(
183
+ let p = 0;
184
+ return e.map((h) => {
185
+ if (h.value === 0) return null;
186
+ const S = h.value / o * 100, C = S / 100 * _, D = p / 100 * _;
187
+ return p += S, /* @__PURE__ */ a(
188
188
  "circle",
189
189
  {
190
- cx: d,
191
- cy: d,
192
- r: N,
190
+ cx: u,
191
+ cy: u,
192
+ r: w,
193
193
  fill: "none",
194
- stroke: c.color,
195
- strokeWidth: m,
196
- strokeDasharray: `${x} ${$}`,
197
- strokeDashoffset: -T,
198
- transform: `rotate(-90 ${d} ${d})`,
199
- className: p(f["status-chart__segment"], {
200
- [f["status-chart__segment--hovered"]]: o === c.status,
201
- [f["status-chart__segment--dimmed"]]: o && o !== c.status
194
+ stroke: h.color,
195
+ strokeWidth: j,
196
+ strokeDasharray: `${C} ${_}`,
197
+ strokeDashoffset: -D,
198
+ transform: `rotate(-90 ${u} ${u})`,
199
+ className: d(v["status-chart__segment"], {
200
+ [v["status-chart__segment--hovered"]]: c === h.status,
201
+ [v["status-chart__segment--dimmed"]]: c && c !== h.status
202
202
  }),
203
- onClick: () => l?.(c.status),
204
- onMouseEnter: () => i(c.status),
205
- onMouseLeave: () => i(null),
206
- style: { cursor: l ? "pointer" : "default" },
207
- children: /* @__PURE__ */ e("title", { children: `${c.label}: ${c.value}` })
203
+ onClick: () => r?.(h.status),
204
+ onMouseEnter: () => b(h.status),
205
+ onMouseLeave: () => b(null),
206
+ style: { cursor: r ? "pointer" : "default" },
207
+ children: /* @__PURE__ */ a("title", { children: `${h.label}: ${h.value}` })
208
208
  },
209
- c.status
209
+ h.status
210
210
  );
211
211
  });
212
212
  })()
213
213
  }
214
214
  ),
215
- /* @__PURE__ */ u("div", { className: f["status-chart__hole"], children: [
216
- /* @__PURE__ */ e("span", { className: f["status-chart__total-value"], children: g }),
217
- /* @__PURE__ */ e("span", { className: f["status-chart__total-label"], children: r })
215
+ /* @__PURE__ */ m("div", { className: v["status-chart__hole"], children: [
216
+ /* @__PURE__ */ a("span", { className: v["status-chart__total-value"], children: o }),
217
+ /* @__PURE__ */ a("span", { className: v["status-chart__total-label"], children: t })
218
218
  ] })
219
219
  ]
220
220
  }
221
221
  );
222
222
  }
223
223
  );
224
- D.displayName = "StatusChart";
225
- function M(t) {
226
- const r = new Date(t);
227
- if (isNaN(r.getTime())) return "Ungültiges Datum";
228
- const s = (/* @__PURE__ */ new Date()).getTime() - r.getTime(), n = Math.floor(s / (1e3 * 60 * 60 * 24));
224
+ G.displayName = "StatusChart";
225
+ function P(e) {
226
+ const t = new Date(e);
227
+ if (isNaN(t.getTime())) return "Ungültiges Datum";
228
+ const s = (/* @__PURE__ */ new Date()).getTime() - t.getTime(), n = Math.floor(s / (1e3 * 60 * 60 * 24));
229
229
  if (n === 0) return "Heute";
230
230
  if (n === 1) return "Gestern";
231
231
  if (n < 7) return `vor ${n} Tagen`;
232
- const a = Math.floor(n / 7);
233
- if (a < 4)
234
- return a === 1 ? "vor einer Woche" : `vor ${a} Wochen`;
235
- const o = Math.floor(n / 30);
236
- if (o < 12)
237
- return o === 1 ? "vor einem Monat" : `vor ${o} Monaten`;
238
- const i = Math.floor(n / 365);
239
- return i === 1 ? "vor einem Jahr" : `vor ${i} Jahren`;
232
+ const l = Math.floor(n / 7);
233
+ if (l < 4)
234
+ return l === 1 ? "vor einer Woche" : `vor ${l} Wochen`;
235
+ const c = Math.floor(n / 30);
236
+ if (c < 12)
237
+ return c === 1 ? "vor einem Monat" : `vor ${c} Monaten`;
238
+ const b = Math.floor(n / 365);
239
+ return b === 1 ? "vor einem Jahr" : `vor ${b} Jahren`;
240
240
  }
241
- const _ = {
241
+ const f = {
242
242
  "table-container": "_table-container_fgnrg_3",
243
243
  "project-table": "_project-table_fgnrg_7",
244
244
  "project-table__head": "_project-table__head_fgnrg_15",
@@ -251,66 +251,300 @@ const _ = {
251
251
  "project-table__date-secondary": "_project-table__date-secondary_fgnrg_93",
252
252
  "project-table__client": "_project-table__client_fgnrg_102",
253
253
  "project-table__date-main": "_project-table__date-main_fgnrg_103"
254
- }, P = v.forwardRef(
255
- ({ rows: t, onToggleFavorite: r, className: l, ...s }, n) => /* @__PURE__ */ e(
254
+ }, V = g.forwardRef(
255
+ ({ rows: e, onToggleFavorite: t, className: r, ...s }, n) => /* @__PURE__ */ a(
256
256
  "div",
257
257
  {
258
258
  ref: n,
259
- className: p(_["table-container"], l),
259
+ className: d(f["table-container"], r),
260
260
  tabIndex: 0,
261
261
  ...s,
262
- children: /* @__PURE__ */ u("table", { className: _["project-table"], children: [
263
- /* @__PURE__ */ e("thead", { className: _["project-table__head"], children: /* @__PURE__ */ u("tr", { children: [
264
- /* @__PURE__ */ e("th", { scope: "col", children: "Projekt / Applikation" }),
265
- /* @__PURE__ */ e("th", { scope: "col", children: "Kunde" }),
266
- /* @__PURE__ */ e("th", { scope: "col", children: "Status" }),
267
- /* @__PURE__ */ e("th", { scope: "col", children: "Aktivität" })
262
+ children: /* @__PURE__ */ m("table", { className: f["project-table"], children: [
263
+ /* @__PURE__ */ a("thead", { className: f["project-table__head"], children: /* @__PURE__ */ m("tr", { children: [
264
+ /* @__PURE__ */ a("th", { scope: "col", children: "Projekt / Applikation" }),
265
+ /* @__PURE__ */ a("th", { scope: "col", children: "Kunde" }),
266
+ /* @__PURE__ */ a("th", { scope: "col", children: "Status" }),
267
+ /* @__PURE__ */ a("th", { scope: "col", children: "Aktivität" })
268
268
  ] }) }),
269
- /* @__PURE__ */ e("tbody", { className: _["project-table__body"], children: t.map((a) => /* @__PURE__ */ u(
269
+ /* @__PURE__ */ a("tbody", { className: f["project-table__body"], children: e.map((l) => /* @__PURE__ */ m(
270
270
  "tr",
271
271
  {
272
- className: _["project-table__row"],
273
- "data-status": a.status,
272
+ className: f["project-table__row"],
273
+ "data-status": l.status,
274
274
  children: [
275
- /* @__PURE__ */ e("td", { children: /* @__PURE__ */ u("div", { className: _["project-table__name-cell"], children: [
276
- /* @__PURE__ */ e(
277
- I,
275
+ /* @__PURE__ */ a("td", { children: /* @__PURE__ */ m("div", { className: f["project-table__name-cell"], children: [
276
+ /* @__PURE__ */ a(
277
+ z,
278
278
  {
279
- pressed: a.favorite,
280
- projectName: a.name,
281
- onToggle: (o) => r?.(a.id, o),
282
- className: _["project-table__favorite"]
279
+ pressed: l.favorite,
280
+ projectName: l.name,
281
+ onToggle: (c) => t?.(l.id, c),
282
+ className: f["project-table__favorite"]
283
283
  }
284
284
  ),
285
- /* @__PURE__ */ u("div", { className: _["project-table__name-wrapper"], title: `${a.name}
286
- ${a.app}`, children: [
287
- /* @__PURE__ */ e("div", { className: _["project-table__name"], children: a.name }),
288
- /* @__PURE__ */ e("div", { className: _["project-table__app"], children: a.app })
285
+ /* @__PURE__ */ m("div", { className: f["project-table__name-wrapper"], title: `${l.name}
286
+ ${l.app}`, children: [
287
+ /* @__PURE__ */ a("div", { className: f["project-table__name"], children: l.name }),
288
+ /* @__PURE__ */ a("div", { className: f["project-table__app"], children: l.app })
289
289
  ] })
290
290
  ] }) }),
291
- /* @__PURE__ */ e("td", { title: a.client, children: /* @__PURE__ */ e("span", { className: _["project-table__client"], children: a.client }) }),
292
- /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e(A, { status: a.status }) }),
293
- /* @__PURE__ */ u("td", { title: `Geändert: ${M(a.updatedAt)}
294
- Erstellt: ${a.createdAt}`, children: [
295
- /* @__PURE__ */ e("div", { className: _["project-table__date-main"], children: M(a.updatedAt) }),
296
- /* @__PURE__ */ u("div", { className: _["project-table__date-secondary"], children: [
291
+ /* @__PURE__ */ a("td", { title: l.client, children: /* @__PURE__ */ a("span", { className: f["project-table__client"], children: l.client }) }),
292
+ /* @__PURE__ */ a("td", { children: /* @__PURE__ */ a(T, { status: l.status }) }),
293
+ /* @__PURE__ */ m("td", { title: `Geändert: ${P(l.updatedAt)}
294
+ Erstellt: ${l.createdAt}`, children: [
295
+ /* @__PURE__ */ a("div", { className: f["project-table__date-main"], children: P(l.updatedAt) }),
296
+ /* @__PURE__ */ m("div", { className: f["project-table__date-secondary"], children: [
297
297
  "Erstellt: ",
298
- a.createdAt
298
+ l.createdAt
299
299
  ] })
300
300
  ] })
301
301
  ]
302
302
  },
303
- a.id
303
+ l.id
304
304
  )) })
305
305
  ] })
306
306
  }
307
307
  )
308
308
  );
309
- P.displayName = "ProjectTable";
309
+ V.displayName = "ProjectTable";
310
+ const H = "_avatar_1ml48_3", R = {
311
+ avatar: H,
312
+ "avatar-group": "_avatar-group_1ml48_18",
313
+ "group-member": "_group-member_1ml48_23"
314
+ }, J = g.forwardRef(
315
+ ({ initials: e, name: t, className: r, ...s }, n) => /* @__PURE__ */ a(
316
+ "div",
317
+ {
318
+ ref: n,
319
+ className: d(R.avatar, r),
320
+ title: t,
321
+ "aria-label": t,
322
+ ...s,
323
+ children: e
324
+ }
325
+ )
326
+ );
327
+ J.displayName = "Avatar";
328
+ const K = g.forwardRef(
329
+ ({ children: e, className: t, ...r }, s) => /* @__PURE__ */ a(
330
+ "div",
331
+ {
332
+ ref: s,
333
+ className: d(R["avatar-group"], t),
334
+ ...r,
335
+ children: g.Children.map(e, (n) => g.isValidElement(n) ? g.cloneElement(n, {
336
+ className: d(n.props.className, R["group-member"])
337
+ }) : n)
338
+ }
339
+ )
340
+ );
341
+ K.displayName = "AvatarGroup";
342
+ const U = "_btn_lw4l4_3", x = {
343
+ btn: U,
344
+ "btn--primary": "_btn--primary_lw4l4_27",
345
+ "btn--outline": "_btn--outline_lw4l4_39",
346
+ "btn--ghost": "_btn--ghost_lw4l4_52",
347
+ "btn--sm": "_btn--sm_lw4l4_63"
348
+ }, E = g.forwardRef(
349
+ ({ variant: e, size: t = "md", className: r, children: s, ...n }, l) => /* @__PURE__ */ a(
350
+ "button",
351
+ {
352
+ ref: l,
353
+ className: d(
354
+ x.btn,
355
+ {
356
+ [x[`btn--${e}`]]: e,
357
+ [x[`btn--${t}`]]: t && t !== "md"
358
+ },
359
+ r
360
+ ),
361
+ ...n,
362
+ children: s
363
+ }
364
+ )
365
+ );
366
+ E.displayName = "Button";
367
+ const Y = "_badge_144f0_3", A = {
368
+ badge: Y,
369
+ "badge--high": "_badge--high_144f0_12",
370
+ "badge--medium": "_badge--medium_144f0_18",
371
+ "badge--low": "_badge--low_144f0_24",
372
+ "badge--size-small": "_badge--size-small_144f0_30",
373
+ "badge--size-large": "_badge--size-large_144f0_37"
374
+ }, Z = {
375
+ high: "!!",
376
+ medium: "!",
377
+ low: "-"
378
+ }, Q = {
379
+ high: "Hohe Priorität",
380
+ medium: "Mittlere Priorität",
381
+ low: "Niedrige Priorität"
382
+ }, X = g.forwardRef(
383
+ ({ level: e, size: t = "small", className: r, "aria-label": s, ...n }, l) => {
384
+ const c = Q[e];
385
+ return /* @__PURE__ */ a(
386
+ "span",
387
+ {
388
+ ref: l,
389
+ className: d(
390
+ A.badge,
391
+ A[`badge--${e}`],
392
+ A[`badge--size-${t}`],
393
+ r
394
+ ),
395
+ "aria-label": s || c,
396
+ ...n,
397
+ children: Z[e]
398
+ }
399
+ );
400
+ }
401
+ );
402
+ X.displayName = "PriorityBadge";
403
+ const ee = "_badge_1ru08_3", te = {
404
+ badge: ee
405
+ }, ae = g.forwardRef(
406
+ ({ className: e, children: t, ...r }, s) => /* @__PURE__ */ a(
407
+ "span",
408
+ {
409
+ ref: s,
410
+ className: d(te.badge, e),
411
+ ...r,
412
+ children: t
413
+ }
414
+ )
415
+ );
416
+ ae.displayName = "Badge";
417
+ const se = "_icon_1t4xn_56", y = {
418
+ "status-dropdown": "_status-dropdown_1t4xn_3",
419
+ "status-trigger": "_status-trigger_1t4xn_9",
420
+ "status-menu": "_status-menu_1t4xn_14",
421
+ "is-open": "_is-open_1t4xn_31",
422
+ "status-menu-item": "_status-menu-item_1t4xn_35",
423
+ "is-active": "_is-active_1t4xn_52",
424
+ icon: se,
425
+ "icon-sm": "_icon-sm_1t4xn_65"
426
+ }, re = g.forwardRef(
427
+ ({ value: e, onChange: t, options: r, className: s, "aria-label": n, ...l }, c) => {
428
+ const [b, o] = I(!1), i = q(null), u = (_) => {
429
+ typeof c == "function" ? c(_) : c && (c.current = _), i.current = _;
430
+ }, N = r.find((_) => _.value === e) || r[0];
431
+ O(() => {
432
+ const _ = (p) => {
433
+ i.current && !i.current.contains(p.target) && o(!1);
434
+ };
435
+ return document.addEventListener("mousedown", _), () => document.removeEventListener("mousedown", _);
436
+ }, []);
437
+ const j = (_) => {
438
+ _.stopPropagation(), o(!b);
439
+ }, w = (_, p) => {
440
+ _.stopPropagation(), t && t(p.value), o(!1);
441
+ };
442
+ return /* @__PURE__ */ m(
443
+ "div",
444
+ {
445
+ ref: u,
446
+ className: d(y["status-dropdown"], s),
447
+ ...l,
448
+ children: [
449
+ /* @__PURE__ */ m(
450
+ E,
451
+ {
452
+ variant: "outline",
453
+ size: "sm",
454
+ className: y["status-trigger"],
455
+ onClick: j,
456
+ "aria-haspopup": "listbox",
457
+ "aria-expanded": b,
458
+ "aria-label": n,
459
+ children: [
460
+ N?.label,
461
+ /* @__PURE__ */ a("svg", { className: d(y.icon, y["icon-sm"]), viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: /* @__PURE__ */ a("path", { d: "m6 9 6 6 6-6" }) })
462
+ ]
463
+ }
464
+ ),
465
+ /* @__PURE__ */ a(
466
+ "div",
467
+ {
468
+ className: d(y["status-menu"], { [y["is-open"]]: b }),
469
+ role: "listbox",
470
+ children: r.map((_) => /* @__PURE__ */ a(
471
+ "button",
472
+ {
473
+ className: d(y["status-menu-item"], {
474
+ [y["is-active"]]: _.value === N?.value
475
+ }),
476
+ role: "option",
477
+ "aria-selected": _.value === N?.value,
478
+ onClick: (p) => w(p, _),
479
+ children: _.label
480
+ },
481
+ _.value
482
+ ))
483
+ }
484
+ )
485
+ ]
486
+ }
487
+ );
488
+ }
489
+ );
490
+ re.displayName = "StatusDropdown";
491
+ const ne = "_checklist_ylbeh_3", $ = {
492
+ checklist: ne,
493
+ "check-item": "_check-item_ylbeh_9",
494
+ "is-done": "_is-done_ylbeh_27",
495
+ "checklist--readonly": "_checklist--readonly_ylbeh_32",
496
+ "form-control": "_form-control_ylbeh_40"
497
+ }, le = g.forwardRef(
498
+ ({ items: e, onChange: t, editable: r = !1, className: s, ...n }, l) => {
499
+ const c = (o, i) => {
500
+ t && t(e.map((u) => u.id === o ? { ...u, checked: i } : u));
501
+ }, b = (o, i) => {
502
+ t && t(e.map((u) => u.id === o ? { ...u, text: i } : u));
503
+ };
504
+ return /* @__PURE__ */ a(
505
+ "div",
506
+ {
507
+ ref: l,
508
+ className: d($.checklist, { [$["checklist--readonly"]]: !r }, s),
509
+ ...n,
510
+ children: e.map((o) => /* @__PURE__ */ m("div", { className: d($["check-item"], { [$["is-done"]]: o.checked }), children: [
511
+ /* @__PURE__ */ a(
512
+ "input",
513
+ {
514
+ type: "checkbox",
515
+ id: o.id,
516
+ checked: o.checked,
517
+ onChange: (i) => c(o.id, i.target.checked)
518
+ }
519
+ ),
520
+ r ? /* @__PURE__ */ a(
521
+ "input",
522
+ {
523
+ type: "text",
524
+ className: $["form-control"],
525
+ value: o.text,
526
+ onChange: (i) => b(o.id, i.target.value),
527
+ placeholder: "Was ist zu tun?",
528
+ "aria-label": "Aufgabenbeschreibung bearbeiten"
529
+ }
530
+ ) : /* @__PURE__ */ a("label", { htmlFor: o.id, children: o.text })
531
+ ] }, o.id))
532
+ }
533
+ );
534
+ }
535
+ );
536
+ le.displayName = "Checklist";
310
537
  export {
311
- I as FavoriteButton,
312
- P as ProjectTable,
313
- A as StatusBadge,
314
- D as StatusChart,
315
- B as StatusLegendItem
538
+ J as Avatar,
539
+ K as AvatarGroup,
540
+ ae as Badge,
541
+ E as Button,
542
+ le as Checklist,
543
+ z as FavoriteButton,
544
+ X as PriorityBadge,
545
+ V as ProjectTable,
546
+ T as StatusBadge,
547
+ G as StatusChart,
548
+ re as StatusDropdown,
549
+ F as StatusLegendItem
316
550
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fastnd/components",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "type": "module",
5
5
  "main": "./dist/components.js",
6
6
  "types": "./dist/index.d.ts",