@fastnd/components 1.0.8 → 1.0.9

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.
@@ -1,80 +1,80 @@
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
- return s;
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)}}._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))}._dashboard_10t3c_4{width:100%;display:grid;grid-template-columns:35% 65%;gap:1.5rem}@media(max-width:1024px){._dashboard_10t3c_4{grid-template-columns:1fr}}._dashboard-card_10t3c_17{background-color:hsl(var(--card));border-radius:var(--radius);box-shadow:var(--shadow-card);border:1px solid hsl(var(--border));padding:1.5rem 2.5%;display:flex;flex-direction:column}._dashboard-card__header_10t3c_27{margin-bottom:1.5rem}._dashboard-card__title_10t3c_31{font-family:var(--font-clash);font-size:1.5rem;font-weight:500;color:hsl(var(--foreground));margin:0}._status-legend_10t3c_39{display:flex;flex-direction:column;gap:.75rem}._project-filters_10t3c_45{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}._project-filters__search_10t3c_54{padding:.5rem 1rem;border:1px solid hsl(var(--border));border-radius:var(--radius);background-color:hsl(var(--input));font-family:var(--font-inter);font-size:.875rem;color:hsl(var(--foreground));width:250px;transition:border-color .2s,box-shadow .2s}._project-filters__search_10t3c_54:focus{outline:none;border-color:hsl(var(--primary));box-shadow:0 0 0 2px hsl(var(--primary) / .2)}._task-item_1ekm1_4{display:grid;grid-template-columns:55% 15% 30%;align-items:center;gap:0;padding:.75rem 5%;border-bottom:1px solid hsl(var(--border));transition:background-color .2s ease;cursor:pointer;font-family:var(--font-inter)}._task-item_1ekm1_4:last-child{border-bottom:none}._task-item_1ekm1_4:hover{background-color:hsl(var(--muted) / .5)}._task-item__content_1ekm1_25{display:flex;flex-direction:column;gap:.375rem;min-width:0}._task-item__title-group_1ekm1_32{display:flex;align-items:center;gap:.375rem;min-width:0}._task-item__title_1ekm1_32{color:hsl(var(--foreground));margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.875rem;font-weight:500;line-height:1.25rem;font-family:var(--font-inter)}._task-item__meta_1ekm1_52{display:flex;align-items:center;gap:1.25rem;color:hsl(var(--muted-foreground));font-size:.625rem;line-height:.875rem;font-family:var(--font-inter);min-width:0}._meta-user_1ekm1_64{display:flex;align-items:center;flex-shrink:0}._meta-project_1ekm1_70{display:flex;align-items:center;gap:.375rem;color:hsl(var(--muted-foreground));font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.75rem;flex:0 1 auto}._meta-project_1ekm1_70 ._icon-sm_1ekm1_83{flex-shrink:0}._task-item__deadline_1ekm1_88{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right;font-family:var(--font-grotesk);font-size:.75rem;line-height:1rem}._deadline-urgent_1ekm1_97{color:hsl(var(--score-low));font-weight:500}._deadline-normal_1ekm1_102{color:hsl(var(--muted-foreground))}._task-item__actions_1ekm1_107{display:flex;align-items:center;gap:.5rem;justify-content:flex-end}._icon_1ekm1_83{width:1rem;height:1rem;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}._icon-sm_1ekm1_83{width:.875rem;height:.875rem;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}@media(max-width:640px){._task-item_1ekm1_4{grid-template-columns:1fr auto;grid-template-rows:auto auto;grid-template-areas:"content actions" "deadline actions";gap:.25rem .75rem}._task-item__content_1ekm1_25{grid-area:content}._task-item__deadline_1ekm1_88{grid-area:deadline;text-align:left}._task-item__actions_1ekm1_107{grid-area:actions;align-self:center}}._modal-overlay_sth7y_4{position:fixed;inset:0;background-color:#0f172a66;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:50;opacity:0;pointer-events:none;transition:opacity .2s ease-out;padding:1rem}._modal-overlay_sth7y_4._is-active_sth7y_19{opacity:1;pointer-events:all}._modal-content_sth7y_25{background-color:hsl(var(--popover));color:hsl(var(--popover-foreground));font-family:var(--font-inter);border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;max-width:600px;max-height:90vh;display:flex;flex-direction:column;transform:scale(.95) translateY(10px);transition:transform .2s ease-out;overflow:hidden}._modal-overlay_sth7y_4._is-active_sth7y_19 ._modal-content_sth7y_25{transform:scale(1) translateY(0)}._modal-header_sth7y_46{padding:1.25rem 1.5rem;border-bottom:1px solid hsl(var(--border));display:flex;align-items:center;justify-content:space-between;flex-shrink:0}._modal-header-title_sth7y_56{margin:0;font-family:var(--font-clash);font-weight:500;font-size:1.25rem;line-height:1.75rem;color:hsl(var(--foreground))}._modal-body_sth7y_66{padding:1.5rem;overflow-y:auto;display:flex;flex-direction:column;gap:1.5rem;scrollbar-width:thin;scrollbar-color:hsl(var(--border)) transparent}._modal-body_sth7y_66::-webkit-scrollbar{width:4px}._modal-body_sth7y_66::-webkit-scrollbar-thumb{background-color:hsl(var(--border));border-radius:2px}._modal-footer_sth7y_85{padding:1rem 1.5rem;border-top:1px solid hsl(var(--border));display:flex;justify-content:flex-end;gap:.5rem;background:hsl(var(--muted) / .3);flex-shrink:0}._view-group_sth7y_96{display:flex;flex-direction:column;gap:.375rem}._view-label_sth7y_103{font-size:.625rem;line-height:.875rem;color:hsl(var(--muted-foreground));text-transform:uppercase;letter-spacing:.08em;font-weight:600;font-family:var(--font-inter)}._view-badge-row_sth7y_113{display:flex;flex-wrap:wrap;gap:1.5rem;align-items:flex-start}._view-task-title_sth7y_121{margin:0;font-family:var(--font-clash);font-weight:600;font-size:1.25rem;line-height:1.4;color:hsl(var(--foreground))}._view-value-strong_sth7y_131{font-family:var(--font-grotesk);font-weight:500;font-size:.9375rem;color:hsl(var(--foreground))}._view-description_sth7y_139{font-size:.875rem;line-height:1.6;margin:0;color:hsl(var(--foreground));font-family:var(--font-inter)}._text-muted_sth7y_147{color:hsl(var(--muted-foreground));font-style:italic}._form-group_sth7y_153{display:flex;flex-direction:column;gap:.5rem}._form-row_sth7y_159{display:grid;grid-template-columns:1fr 1fr;gap:1rem}._form-label_sth7y_165{font-size:.625rem;line-height:.875rem;font-weight:600;color:hsl(var(--muted-foreground));text-transform:uppercase;letter-spacing:.08em;font-family:var(--font-inter)}._form-control_sth7y_175{width:100%;padding:.625rem .75rem;border:1px solid hsl(var(--border));border-radius:calc(var(--radius) - 2px);background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-inter);font-size:.875rem;line-height:1.25rem;transition:border-color .2s,box-shadow .2s;box-sizing:border-box;appearance:auto}._form-control_sth7y_175:focus{outline:none;border-color:hsl(var(--primary));box-shadow:0 0 0 3px hsl(var(--primary) / .12)}._textarea_sth7y_196{resize:vertical;min-height:80px}._icon_sth7y_203{width:1.25rem;height:1.25rem;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}._icon-pencil_sth7y_214{width:.875rem;height:.875rem;fill:currentColor}@media(max-width:640px){._form-row_sth7y_159{grid-template-columns:1fr}}: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}._widget-card_1fdjp_4{background-color:hsl(var(--card));color:hsl(var(--card-foreground));border:1px solid hsl(var(--border));border-radius:var(--radius);box-shadow:var(--shadow-card);display:flex;flex-direction:column;height:100%;max-width:520px;overflow:hidden;font-family:var(--font-inter);animation:_fadeIn_1fdjp_1 .4s ease-out}._widget-header_1fdjp_20{display:flex;justify-content:space-between;align-items:center;padding:1rem 5%;border-bottom:1px solid hsl(var(--border));background:hsl(var(--card));flex-shrink:0}._widget-header__title_1fdjp_30{margin:0;font-family:var(--font-clash);font-size:1.25rem;font-weight:500;line-height:1.3;color:hsl(var(--foreground));letter-spacing:-.02em}._task-list_1fdjp_41{display:flex;flex-direction:column;overflow-y:auto;flex:1 1 0;scrollbar-width:thin;scrollbar-color:hsl(var(--border)) transparent}._task-list_1fdjp_41::-webkit-scrollbar{width:4px}._task-list_1fdjp_41::-webkit-scrollbar-track{background:transparent}._task-list_1fdjp_41::-webkit-scrollbar-thumb{background-color:hsl(var(--border));border-radius:2px}._icon_1fdjp_65{width:1rem;height:1rem;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}._icon-sm_1fdjp_75{width:.875rem;height:.875rem}@keyframes _fadeIn_1fdjp_1{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}')),document.head.appendChild(r)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2
+ import { jsx as e, jsxs as n } from "react/jsx-runtime";
3
+ import w, { useState as I, useRef as oe, useEffect as z, useMemo as F } from "react";
4
+ function X(a) {
5
+ var l, r, o = "";
6
+ if (typeof a == "string" || typeof a == "number") o += a;
7
+ else if (typeof a == "object") if (Array.isArray(a)) {
8
+ var i = a.length;
9
+ for (l = 0; l < i; l++) a[l] && (r = X(a[l])) && (o && (o += " "), o += r);
10
+ } else for (r in a) a[r] && (o && (o += " "), o += r);
11
+ return o;
12
12
  }
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
- return s;
13
+ function v() {
14
+ for (var a, l, r = 0, o = "", i = arguments.length; r < i; r++) (a = arguments[r]) && (l = X(a)) && (o && (o += " "), o += l);
15
+ return o;
16
16
  }
17
- const L = {
17
+ const Q = {
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
- }, W = {
24
+ }, ce = {
25
25
  neu: "Neu",
26
26
  offen: "Offen",
27
27
  "in-prufung": "In Prüfung",
28
28
  validierung: "Validierung",
29
29
  abgeschlossen: "Abgeschlossen"
30
- }, T = g.forwardRef(
31
- ({ status: e, color: t, backgroundColor: r, className: s, style: n, ...l }, c) => {
32
- const b = {
33
- ...n,
34
- "--custom-color": t,
30
+ }, ee = w.forwardRef(
31
+ ({ status: a, color: l, backgroundColor: r, className: o, style: i, ..._ }, u) => {
32
+ const f = {
33
+ ...i,
34
+ "--custom-color": l,
35
35
  "--custom-bg": r
36
36
  };
37
- return /* @__PURE__ */ a(
37
+ return /* @__PURE__ */ e(
38
38
  "span",
39
39
  {
40
- ref: c,
41
- className: d(L["status-badge"], L[`status-badge--${e}`], s),
42
- style: b,
43
- ...l,
44
- children: W[e]
40
+ ref: u,
41
+ className: v(Q["status-badge"], Q[`status-badge--${a}`], o),
42
+ style: f,
43
+ ..._,
44
+ children: ce[a]
45
45
  }
46
46
  );
47
47
  }
48
48
  );
49
- T.displayName = "StatusBadge";
50
- const B = {
49
+ ee.displayName = "StatusBadge";
50
+ const Z = {
51
51
  "favorite-btn": "_favorite-btn_1f4wz_3",
52
52
  "favorite-btn--active": "_favorite-btn--active_1f4wz_23"
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
- "--custom-color": s,
58
- "--custom-active-color": n
59
- }, N = e ? `Von Favoriten entfernen: ${t}` : `Zu Favoriten hinzufügen: ${t}`;
60
- return /* @__PURE__ */ a(
53
+ }, te = w.forwardRef(
54
+ ({ pressed: a, projectName: l, onToggle: r, color: o, activeColor: i, className: _, style: u, onClick: f, ...m }, g) => {
55
+ const t = {
56
+ ...u,
57
+ "--custom-color": o,
58
+ "--custom-active-color": i
59
+ }, b = a ? `Von Favoriten entfernen: ${l}` : `Zu Favoriten hinzufügen: ${l}`;
60
+ return /* @__PURE__ */ e(
61
61
  "button",
62
62
  {
63
- ref: i,
63
+ ref: g,
64
64
  type: "button",
65
- className: d(
66
- B["favorite-btn"],
67
- { [B["favorite-btn--active"]]: e },
68
- l
65
+ className: v(
66
+ Z["favorite-btn"],
67
+ { [Z["favorite-btn--active"]]: a },
68
+ _
69
69
  ),
70
- style: u,
71
- "aria-pressed": e,
72
- "aria-label": N,
70
+ style: t,
71
+ "aria-pressed": a,
72
+ "aria-label": b,
73
73
  onClick: (j) => {
74
- r?.(!e), b?.(j);
74
+ r?.(!a), f?.(j);
75
75
  },
76
- ...o,
77
- children: /* @__PURE__ */ a(
76
+ ...m,
77
+ children: /* @__PURE__ */ e(
78
78
  "svg",
79
79
  {
80
80
  viewBox: "0 0 24 24",
@@ -83,15 +83,15 @@ const B = {
83
83
  strokeWidth: "2",
84
84
  strokeLinecap: "round",
85
85
  strokeLinejoin: "round",
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" })
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" })
87
87
  }
88
88
  )
89
89
  }
90
90
  );
91
91
  }
92
92
  );
93
- z.displayName = "FavoriteButton";
94
- const k = {
93
+ te.displayName = "FavoriteButton";
94
+ const D = {
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 k = {
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
- }, 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
- "--custom-color": n
107
+ }, ae = w.forwardRef(
108
+ ({ status: a, label: l, count: r, active: o = !1, color: i, className: _, style: u, ...f }, m) => {
109
+ const g = {
110
+ ...u,
111
+ "--custom-color": i
112
112
  };
113
- return /* @__PURE__ */ m(
113
+ return /* @__PURE__ */ n(
114
114
  "button",
115
115
  {
116
- ref: o,
116
+ ref: m,
117
117
  type: "button",
118
118
  role: "option",
119
- "aria-selected": s,
120
- className: d(
121
- k["status-legend__item"],
122
- { [k["status-legend__item--active"]]: s },
123
- l
119
+ "aria-selected": o,
120
+ className: v(
121
+ D["status-legend__item"],
122
+ { [D["status-legend__item--active"]]: o },
123
+ _
124
124
  ),
125
- style: i,
126
- ...b,
125
+ style: g,
126
+ ...f,
127
127
  children: [
128
- /* @__PURE__ */ m("div", { className: k["status-legend__label-wrap"], children: [
129
- /* @__PURE__ */ a(
128
+ /* @__PURE__ */ n("div", { className: D["status-legend__label-wrap"], children: [
129
+ /* @__PURE__ */ e(
130
130
  "span",
131
131
  {
132
- className: d(k["status-legend__color"], k[`color-${e}`]),
132
+ className: v(D["status-legend__color"], D[`color-${a}`]),
133
133
  "aria-hidden": "true"
134
134
  }
135
135
  ),
136
- /* @__PURE__ */ a("span", { className: k["status-legend__label"], children: t })
136
+ /* @__PURE__ */ e("span", { className: D["status-legend__label"], children: l })
137
137
  ] }),
138
- /* @__PURE__ */ a("span", { className: k["status-legend__count"], children: r })
138
+ /* @__PURE__ */ e("span", { className: D["status-legend__count"], children: r })
139
139
  ]
140
140
  }
141
141
  );
142
142
  }
143
143
  );
144
- F.displayName = "StatusLegendItem";
145
- const v = {
144
+ ae.displayName = "StatusLegendItem";
145
+ const L = {
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 v = {
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
- }, 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(
154
+ }, se = w.forwardRef(
155
+ ({ data: a, totalLabel: l = "Gesamt", onSegmentClick: r, className: o, ...i }, _) => {
156
+ const [u, f] = I(null), m = a.reduce((y, c) => y + c.value, 0), g = 240, t = g / 2, b = 100, j = 40, k = b - j / 2, p = k * 2 * Math.PI;
157
+ return /* @__PURE__ */ n(
158
158
  "div",
159
159
  {
160
- ref: l,
161
- className: d(v["status-overview__chart-container"], s),
162
- ...n,
160
+ ref: _,
161
+ className: v(L["status-overview__chart-container"], o),
162
+ ...i,
163
163
  children: [
164
- /* @__PURE__ */ a(
164
+ /* @__PURE__ */ e(
165
165
  "svg",
166
166
  {
167
- viewBox: `0 0 ${i} ${i}`,
168
- className: v["status-chart-svg"],
167
+ viewBox: `0 0 ${g} ${g}`,
168
+ className: L["status-chart-svg"],
169
169
  role: "img",
170
170
  "aria-label": "Kreisdiagramm der Projektstatus-Verteilung",
171
171
  overflow: "visible",
172
- children: o === 0 ? /* @__PURE__ */ a(
172
+ children: m === 0 ? /* @__PURE__ */ e(
173
173
  "circle",
174
174
  {
175
- cx: u,
176
- cy: u,
177
- r: w,
175
+ cx: t,
176
+ cy: t,
177
+ r: k,
178
178
  fill: "none",
179
179
  stroke: "hsl(var(--border))",
180
180
  strokeWidth: j
181
181
  }
182
182
  ) : (() => {
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(
183
+ let y = 0;
184
+ return a.map((c) => {
185
+ if (c.value === 0) return null;
186
+ const N = c.value / m * 100, h = N / 100 * p, d = y / 100 * p;
187
+ return y += N, /* @__PURE__ */ e(
188
188
  "circle",
189
189
  {
190
- cx: u,
191
- cy: u,
192
- r: w,
190
+ cx: t,
191
+ cy: t,
192
+ r: k,
193
193
  fill: "none",
194
- stroke: h.color,
194
+ stroke: c.color,
195
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
196
+ strokeDasharray: `${h} ${p}`,
197
+ strokeDashoffset: -d,
198
+ transform: `rotate(-90 ${t} ${t})`,
199
+ className: v(L["status-chart__segment"], {
200
+ [L["status-chart__segment--hovered"]]: u === c.status,
201
+ [L["status-chart__segment--dimmed"]]: u && u !== c.status
202
202
  }),
203
- onClick: () => r?.(h.status),
204
- onMouseEnter: () => b(h.status),
205
- onMouseLeave: () => b(null),
203
+ onClick: () => r?.(c.status),
204
+ onMouseEnter: () => f(c.status),
205
+ onMouseLeave: () => f(null),
206
206
  style: { cursor: r ? "pointer" : "default" },
207
- children: /* @__PURE__ */ a("title", { children: `${h.label}: ${h.value}` })
207
+ children: /* @__PURE__ */ e("title", { children: `${c.label}: ${c.value}` })
208
208
  },
209
- h.status
209
+ c.status
210
210
  );
211
211
  });
212
212
  })()
213
213
  }
214
214
  ),
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 })
215
+ /* @__PURE__ */ n("div", { className: L["status-chart__hole"], children: [
216
+ /* @__PURE__ */ e("span", { className: L["status-chart__total-value"], children: m }),
217
+ /* @__PURE__ */ e("span", { className: L["status-chart__total-label"], children: l })
218
218
  ] })
219
219
  ]
220
220
  }
221
221
  );
222
222
  }
223
223
  );
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
- if (n === 0) return "Heute";
230
- if (n === 1) return "Gestern";
231
- if (n < 7) return `vor ${n} Tagen`;
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`;
224
+ se.displayName = "StatusChart";
225
+ function J(a) {
226
+ const l = new Date(a);
227
+ if (isNaN(l.getTime())) return "Ungültiges Datum";
228
+ const o = (/* @__PURE__ */ new Date()).getTime() - l.getTime(), i = Math.floor(o / (1e3 * 60 * 60 * 24));
229
+ if (i === 0) return "Heute";
230
+ if (i === 1) return "Gestern";
231
+ if (i < 7) return `vor ${i} Tagen`;
232
+ const _ = Math.floor(i / 7);
233
+ if (_ < 4)
234
+ return _ === 1 ? "vor einer Woche" : `vor ${_} Wochen`;
235
+ const u = Math.floor(i / 30);
236
+ if (u < 12)
237
+ return u === 1 ? "vor einem Monat" : `vor ${u} Monaten`;
238
+ const f = Math.floor(i / 365);
239
+ return f === 1 ? "vor einem Jahr" : `vor ${f} Jahren`;
240
240
  }
241
- const f = {
241
+ const A = {
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,234 +251,234 @@ const f = {
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
- }, V = g.forwardRef(
255
- ({ rows: e, onToggleFavorite: t, className: r, ...s }, n) => /* @__PURE__ */ a(
254
+ }, le = w.forwardRef(
255
+ ({ rows: a, onToggleFavorite: l, className: r, ...o }, i) => /* @__PURE__ */ e(
256
256
  "div",
257
257
  {
258
- ref: n,
259
- className: d(f["table-container"], r),
258
+ ref: i,
259
+ className: v(A["table-container"], r),
260
260
  tabIndex: 0,
261
- ...s,
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" })
261
+ ...o,
262
+ children: /* @__PURE__ */ n("table", { className: A["project-table"], children: [
263
+ /* @__PURE__ */ e("thead", { className: A["project-table__head"], children: /* @__PURE__ */ n("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" })
268
268
  ] }) }),
269
- /* @__PURE__ */ a("tbody", { className: f["project-table__body"], children: e.map((l) => /* @__PURE__ */ m(
269
+ /* @__PURE__ */ e("tbody", { className: A["project-table__body"], children: a.map((_) => /* @__PURE__ */ n(
270
270
  "tr",
271
271
  {
272
- className: f["project-table__row"],
273
- "data-status": l.status,
272
+ className: A["project-table__row"],
273
+ "data-status": _.status,
274
274
  children: [
275
- /* @__PURE__ */ a("td", { children: /* @__PURE__ */ m("div", { className: f["project-table__name-cell"], children: [
276
- /* @__PURE__ */ a(
277
- z,
275
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ n("div", { className: A["project-table__name-cell"], children: [
276
+ /* @__PURE__ */ e(
277
+ te,
278
278
  {
279
- pressed: l.favorite,
280
- projectName: l.name,
281
- onToggle: (c) => t?.(l.id, c),
282
- className: f["project-table__favorite"]
279
+ pressed: _.favorite,
280
+ projectName: _.name,
281
+ onToggle: (u) => l?.(_.id, u),
282
+ className: A["project-table__favorite"]
283
283
  }
284
284
  ),
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 })
285
+ /* @__PURE__ */ n("div", { className: A["project-table__name-wrapper"], title: `${_.name}
286
+ ${_.app}`, children: [
287
+ /* @__PURE__ */ e("div", { className: A["project-table__name"], children: _.name }),
288
+ /* @__PURE__ */ e("div", { className: A["project-table__app"], children: _.app })
289
289
  ] })
290
290
  ] }) }),
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: [
291
+ /* @__PURE__ */ e("td", { title: _.client, children: /* @__PURE__ */ e("span", { className: A["project-table__client"], children: _.client }) }),
292
+ /* @__PURE__ */ e("td", { children: /* @__PURE__ */ e(ee, { status: _.status }) }),
293
+ /* @__PURE__ */ n("td", { title: `Geändert: ${J(_.updatedAt)}
294
+ Erstellt: ${_.createdAt}`, children: [
295
+ /* @__PURE__ */ e("div", { className: A["project-table__date-main"], children: J(_.updatedAt) }),
296
+ /* @__PURE__ */ n("div", { className: A["project-table__date-secondary"], children: [
297
297
  "Erstellt: ",
298
- l.createdAt
298
+ _.createdAt
299
299
  ] })
300
300
  ] })
301
301
  ]
302
302
  },
303
- l.id
303
+ _.id
304
304
  )) })
305
305
  ] })
306
306
  }
307
307
  )
308
308
  );
309
- V.displayName = "ProjectTable";
310
- const H = "_avatar_1ml48_3", R = {
311
- avatar: H,
309
+ le.displayName = "ProjectTable";
310
+ const de = "_avatar_1ml48_3", V = {
311
+ avatar: de,
312
312
  "avatar-group": "_avatar-group_1ml48_18",
313
313
  "group-member": "_group-member_1ml48_23"
314
- }, J = g.forwardRef(
315
- ({ initials: e, name: t, className: r, ...s }, n) => /* @__PURE__ */ a(
314
+ }, B = w.forwardRef(
315
+ ({ initials: a, name: l, className: r, ...o }, i) => /* @__PURE__ */ e(
316
316
  "div",
317
317
  {
318
- ref: n,
319
- className: d(R.avatar, r),
320
- title: t,
321
- "aria-label": t,
322
- ...s,
323
- children: e
318
+ ref: i,
319
+ className: v(V.avatar, r),
320
+ title: l,
321
+ "aria-label": l,
322
+ ...o,
323
+ children: a
324
324
  }
325
325
  )
326
326
  );
327
- J.displayName = "Avatar";
328
- const K = g.forwardRef(
329
- ({ children: e, className: t, ...r }, s) => /* @__PURE__ */ a(
327
+ B.displayName = "Avatar";
328
+ const H = w.forwardRef(
329
+ ({ children: a, className: l, ...r }, o) => /* @__PURE__ */ e(
330
330
  "div",
331
331
  {
332
- ref: s,
333
- className: d(R["avatar-group"], t),
332
+ ref: o,
333
+ className: v(V["avatar-group"], l),
334
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)
335
+ children: w.Children.map(a, (i) => w.isValidElement(i) ? w.cloneElement(i, {
336
+ className: v(i.props.className, V["group-member"])
337
+ }) : i)
338
338
  }
339
339
  )
340
340
  );
341
- K.displayName = "AvatarGroup";
342
- const U = "_btn_lw4l4_3", x = {
343
- btn: U,
341
+ H.displayName = "AvatarGroup";
342
+ const _e = "_btn_lw4l4_3", E = {
343
+ btn: _e,
344
344
  "btn--primary": "_btn--primary_lw4l4_27",
345
345
  "btn--outline": "_btn--outline_lw4l4_39",
346
346
  "btn--ghost": "_btn--ghost_lw4l4_52",
347
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(
348
+ }, P = w.forwardRef(
349
+ ({ variant: a, size: l = "md", className: r, children: o, ...i }, _) => /* @__PURE__ */ e(
350
350
  "button",
351
351
  {
352
- ref: l,
353
- className: d(
354
- x.btn,
352
+ ref: _,
353
+ className: v(
354
+ E.btn,
355
355
  {
356
- [x[`btn--${e}`]]: e,
357
- [x[`btn--${t}`]]: t && t !== "md"
356
+ [E[`btn--${a}`]]: a,
357
+ [E[`btn--${l}`]]: l && l !== "md"
358
358
  },
359
359
  r
360
360
  ),
361
- ...n,
362
- children: s
361
+ ...i,
362
+ children: o
363
363
  }
364
364
  )
365
365
  );
366
- E.displayName = "Button";
367
- const Y = "_badge_144f0_3", A = {
368
- badge: Y,
366
+ P.displayName = "Button";
367
+ const ue = "_badge_144f0_3", O = {
368
+ badge: ue,
369
369
  "badge--high": "_badge--high_144f0_12",
370
370
  "badge--medium": "_badge--medium_144f0_18",
371
371
  "badge--low": "_badge--low_144f0_24",
372
372
  "badge--size-small": "_badge--size-small_144f0_30",
373
373
  "badge--size-large": "_badge--size-large_144f0_37"
374
- }, Z = {
374
+ }, me = {
375
375
  high: "!!",
376
376
  medium: "!",
377
377
  low: "-"
378
- }, Q = {
378
+ }, he = {
379
379
  high: "Hohe Priorität",
380
380
  medium: "Mittlere Priorität",
381
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(
382
+ }, K = w.forwardRef(
383
+ ({ level: a, size: l = "small", className: r, "aria-label": o, ...i }, _) => {
384
+ const u = he[a];
385
+ return /* @__PURE__ */ e(
386
386
  "span",
387
387
  {
388
- ref: l,
389
- className: d(
390
- A.badge,
391
- A[`badge--${e}`],
392
- A[`badge--size-${t}`],
388
+ ref: _,
389
+ className: v(
390
+ O.badge,
391
+ O[`badge--${a}`],
392
+ O[`badge--size-${l}`],
393
393
  r
394
394
  ),
395
- "aria-label": s || c,
396
- ...n,
397
- children: Z[e]
395
+ "aria-label": o || u,
396
+ ...i,
397
+ children: me[a]
398
398
  }
399
399
  );
400
400
  }
401
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(
402
+ K.displayName = "PriorityBadge";
403
+ const ge = "_badge_1ru08_3", pe = {
404
+ badge: ge
405
+ }, G = w.forwardRef(
406
+ ({ className: a, children: l, ...r }, o) => /* @__PURE__ */ e(
407
407
  "span",
408
408
  {
409
- ref: s,
410
- className: d(te.badge, e),
409
+ ref: o,
410
+ className: v(pe.badge, a),
411
411
  ...r,
412
- children: t
412
+ children: l
413
413
  }
414
414
  )
415
415
  );
416
- ae.displayName = "Badge";
417
- const se = "_icon_1t4xn_56", y = {
416
+ G.displayName = "Badge";
417
+ const fe = "_icon_1t4xn_56", $ = {
418
418
  "status-dropdown": "_status-dropdown_1t4xn_3",
419
419
  "status-trigger": "_status-trigger_1t4xn_9",
420
420
  "status-menu": "_status-menu_1t4xn_14",
421
421
  "is-open": "_is-open_1t4xn_31",
422
422
  "status-menu-item": "_status-menu-item_1t4xn_35",
423
423
  "is-active": "_is-active_1t4xn_52",
424
- icon: se,
424
+ icon: fe,
425
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);
426
+ }, ne = w.forwardRef(
427
+ ({ value: a, onChange: l, options: r, className: o, "aria-label": i, ..._ }, u) => {
428
+ const [f, m] = I(!1), g = oe(null), t = (p) => {
429
+ typeof u == "function" ? u(p) : u && (u.current = p), g.current = p;
430
+ }, b = r.find((p) => p.value === a) || r[0];
431
+ z(() => {
432
+ const p = (y) => {
433
+ g.current && !g.current.contains(y.target) && m(!1);
434
434
  };
435
- return document.addEventListener("mousedown", _), () => document.removeEventListener("mousedown", _);
435
+ return document.addEventListener("mousedown", p), () => document.removeEventListener("mousedown", p);
436
436
  }, []);
437
- const j = (_) => {
438
- _.stopPropagation(), o(!b);
439
- }, w = (_, p) => {
440
- _.stopPropagation(), t && t(p.value), o(!1);
437
+ const j = (p) => {
438
+ p.stopPropagation(), m(!f);
439
+ }, k = (p, y) => {
440
+ p.stopPropagation(), l && l(y.value), m(!1);
441
441
  };
442
- return /* @__PURE__ */ m(
442
+ return /* @__PURE__ */ n(
443
443
  "div",
444
444
  {
445
- ref: u,
446
- className: d(y["status-dropdown"], s),
447
- ...l,
445
+ ref: t,
446
+ className: v($["status-dropdown"], o),
447
+ ..._,
448
448
  children: [
449
- /* @__PURE__ */ m(
450
- E,
449
+ /* @__PURE__ */ n(
450
+ P,
451
451
  {
452
452
  variant: "outline",
453
453
  size: "sm",
454
- className: y["status-trigger"],
454
+ className: $["status-trigger"],
455
455
  onClick: j,
456
456
  "aria-haspopup": "listbox",
457
- "aria-expanded": b,
458
- "aria-label": n,
457
+ "aria-expanded": f,
458
+ "aria-label": i,
459
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" }) })
460
+ b?.label,
461
+ /* @__PURE__ */ e("svg", { className: v($.icon, $["icon-sm"]), viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: /* @__PURE__ */ e("path", { d: "m6 9 6 6 6-6" }) })
462
462
  ]
463
463
  }
464
464
  ),
465
- /* @__PURE__ */ a(
465
+ /* @__PURE__ */ e(
466
466
  "div",
467
467
  {
468
- className: d(y["status-menu"], { [y["is-open"]]: b }),
468
+ className: v($["status-menu"], { [$["is-open"]]: f }),
469
469
  role: "listbox",
470
- children: r.map((_) => /* @__PURE__ */ a(
470
+ children: r.map((p) => /* @__PURE__ */ e(
471
471
  "button",
472
472
  {
473
- className: d(y["status-menu-item"], {
474
- [y["is-active"]]: _.value === N?.value
473
+ className: v($["status-menu-item"], {
474
+ [$["is-active"]]: p.value === b?.value
475
475
  }),
476
476
  role: "option",
477
- "aria-selected": _.value === N?.value,
478
- onClick: (p) => w(p, _),
479
- children: _.label
477
+ "aria-selected": p.value === b?.value,
478
+ onClick: (y) => k(y, p),
479
+ children: p.label
480
480
  },
481
- _.value
481
+ p.value
482
482
  ))
483
483
  }
484
484
  )
@@ -487,64 +487,636 @@ const se = "_icon_1t4xn_56", y = {
487
487
  );
488
488
  }
489
489
  );
490
- re.displayName = "StatusDropdown";
491
- const ne = "_checklist_ylbeh_3", $ = {
492
- checklist: ne,
490
+ ne.displayName = "StatusDropdown";
491
+ const ve = "_checklist_ylbeh_3", M = {
492
+ checklist: ve,
493
493
  "check-item": "_check-item_ylbeh_9",
494
494
  "is-done": "_is-done_ylbeh_27",
495
495
  "checklist--readonly": "_checklist--readonly_ylbeh_32",
496
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));
497
+ }, W = w.forwardRef(
498
+ ({ items: a, onChange: l, editable: r = !1, className: o, ...i }, _) => {
499
+ const u = (m, g) => {
500
+ l && l(a.map((t) => t.id === m ? { ...t, checked: g } : t));
501
+ }, f = (m, g) => {
502
+ l && l(a.map((t) => t.id === m ? { ...t, text: g } : t));
503
503
  };
504
- return /* @__PURE__ */ a(
504
+ return /* @__PURE__ */ e(
505
505
  "div",
506
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(
507
+ ref: _,
508
+ className: v(M.checklist, { [M["checklist--readonly"]]: !r }, o),
509
+ ...i,
510
+ children: a.map((m) => /* @__PURE__ */ n("div", { className: v(M["check-item"], { [M["is-done"]]: m.checked }), children: [
511
+ /* @__PURE__ */ e(
512
512
  "input",
513
513
  {
514
514
  type: "checkbox",
515
- id: o.id,
516
- checked: o.checked,
517
- onChange: (i) => c(o.id, i.target.checked)
515
+ id: m.id,
516
+ checked: m.checked,
517
+ onChange: (g) => u(m.id, g.target.checked)
518
518
  }
519
519
  ),
520
- r ? /* @__PURE__ */ a(
520
+ r ? /* @__PURE__ */ e(
521
521
  "input",
522
522
  {
523
523
  type: "text",
524
- className: $["form-control"],
525
- value: o.text,
526
- onChange: (i) => b(o.id, i.target.value),
524
+ className: M["form-control"],
525
+ value: m.text,
526
+ onChange: (g) => f(m.id, g.target.value),
527
527
  placeholder: "Was ist zu tun?",
528
528
  "aria-label": "Aufgabenbeschreibung bearbeiten"
529
529
  }
530
- ) : /* @__PURE__ */ a("label", { htmlFor: o.id, children: o.text })
531
- ] }, o.id))
530
+ ) : /* @__PURE__ */ e("label", { htmlFor: m.id, children: m.text })
531
+ ] }, m.id))
532
+ }
533
+ );
534
+ }
535
+ );
536
+ W.displayName = "Checklist";
537
+ const be = "_dashboard_10t3c_4", C = {
538
+ dashboard: be,
539
+ "dashboard-card": "_dashboard-card_10t3c_17",
540
+ "dashboard-card__header": "_dashboard-card__header_10t3c_27",
541
+ "dashboard-card__title": "_dashboard-card__title_10t3c_31",
542
+ "status-legend": "_status-legend_10t3c_39",
543
+ "project-filters": "_project-filters_10t3c_45",
544
+ "project-filters__search": "_project-filters__search_10t3c_54"
545
+ }, Ne = [
546
+ { id: "1", name: "E-Commerce Relaunch", client: "Müller GmbH", app: "Shopify CMS", status: "neu", favorite: !1, createdAt: "12.02.2026", updatedAt: (/* @__PURE__ */ new Date()).toISOString() },
547
+ { id: "2", name: "CRM Integration MVP", client: "TechCorp Inc.", app: "Salesforce API", status: "offen", favorite: !0, createdAt: "15.01.2026", updatedAt: new Date(Date.now() - 2880 * 60 * 1e3).toISOString() },
548
+ { id: "3", name: "Data Analytics Dashboard", client: "DataViz AG", app: "React / Supabase", status: "in-prufung", favorite: !1, createdAt: "20.02.2026", updatedAt: new Date(Date.now() - 10080 * 60 * 1e3).toISOString() },
549
+ { id: "4", name: "Mobile App Onboarding", client: "FitHealth", app: "Flutter", status: "neu", favorite: !1, createdAt: "01.03.2026", updatedAt: new Date(Date.now() - 960 * 60 * 60 * 1e3).toISOString() },
550
+ { id: "5", name: "Payment Gateway Update", client: "FinTech Solutions", app: "Stripe API", status: "validierung", favorite: !1, createdAt: "10.02.2026", updatedAt: new Date(Date.now() - 2880 * 60 * 60 * 1e3).toISOString() },
551
+ { id: "6", name: "Legacy System Migration", client: "OldBank Corp.", app: "Node.js / PostgreSQL", status: "abgeschlossen", favorite: !0, createdAt: "01.12.2025", updatedAt: new Date(Date.now() - 366 * 24 * 60 * 60 * 1e3).toISOString() },
552
+ {
553
+ id: "7",
554
+ name: "Extrem langer Projektname der wahrscheinlich das Layout sprengt oder zumindest sehr viel Platz einnimmt um das Verhalten zu testen",
555
+ client: "International Dynamics Worldwide Global Solutions Holding GmbH & Co. KG",
556
+ app: "Enterprise Resource Planning & Cloud Service Integration Platform (v2.4.8-beta)",
557
+ status: "in-prufung",
558
+ favorite: !1,
559
+ createdAt: "01.01.2026",
560
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
561
+ },
562
+ {
563
+ id: "8",
564
+ name: "Short Title",
565
+ client: "Kunde mit einem Namen der so lang ist dass er in einer schmalen Spalte sicherlich umbrechen oder abgeschnitten werden muss um die Lesbarkeit des restlichen Layouts zu erhalten",
566
+ app: "App",
567
+ status: "validierung",
568
+ favorite: !1,
569
+ createdAt: "05.01.2026",
570
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
571
+ }
572
+ ], we = [
573
+ { status: "alle", label: "Alle" },
574
+ { status: "neu", label: "Neu" },
575
+ { status: "offen", label: "Offen" },
576
+ { status: "in-prufung", label: "In Prüfung" },
577
+ { status: "validierung", label: "Validierung" },
578
+ { status: "abgeschlossen", label: "Abgeschlossen" }
579
+ ], ye = {
580
+ neu: "Neu",
581
+ offen: "Offen",
582
+ "in-prufung": "In Prüfung",
583
+ validierung: "Validierung",
584
+ abgeschlossen: "Abgeschlossen"
585
+ }, ke = w.forwardRef(
586
+ ({ initialRows: a = Ne, className: l, ...r }, o) => {
587
+ const [i, _] = I(a), [u, f] = I("alle"), [m, g] = I(""), t = F(() => {
588
+ const c = {
589
+ alle: i.length,
590
+ neu: 0,
591
+ offen: 0,
592
+ "in-prufung": 0,
593
+ validierung: 0,
594
+ abgeschlossen: 0
595
+ };
596
+ return i.forEach((N) => {
597
+ c[N.status]++;
598
+ }), c;
599
+ }, [i]), b = F(() => {
600
+ let c = i;
601
+ if (u !== "alle" && (c = c.filter((N) => N.status === u)), m.trim() !== "") {
602
+ const N = m.toLowerCase().trim();
603
+ c = c.filter(
604
+ (h) => h.name.toLowerCase().includes(N) || h.client.toLowerCase().includes(N) || h.app.toLowerCase().includes(N)
605
+ );
606
+ }
607
+ return u === "alle" && (c = [...c].sort((N, h) => Number(h.favorite) - Number(N.favorite))), c;
608
+ }, [i, u, m]), j = u === "alle" ? "Alle Projekte" : `Projekte: ${ye[u]}`, k = (c, N) => {
609
+ _((h) => h.map((d) => d.id === c ? { ...d, favorite: N } : d));
610
+ }, p = F(() => [
611
+ { status: "neu", label: "Neu", value: t.neu, color: "hsl(var(--status-neu))" },
612
+ { status: "offen", label: "Offen", value: t.offen, color: "hsl(var(--status-offen))" },
613
+ { status: "in-prufung", label: "In Prüfung", value: t["in-prufung"], color: "hsl(var(--status-in-prufung))" },
614
+ { status: "validierung", label: "Validierung", value: t.validierung, color: "hsl(var(--status-validierung))" },
615
+ { status: "abgeschlossen", label: "Abgeschlossen", value: t.abgeschlossen, color: "hsl(var(--status-abgeschlossen))" }
616
+ ], [t]), y = (c) => {
617
+ f(c);
618
+ };
619
+ return /* @__PURE__ */ n(
620
+ "main",
621
+ {
622
+ ref: o,
623
+ className: v(C.dashboard, l),
624
+ ...r,
625
+ children: [
626
+ /* @__PURE__ */ n(
627
+ "section",
628
+ {
629
+ className: v(C["dashboard-card"], C["status-overview"]),
630
+ "aria-label": "Projektstatus Übersicht",
631
+ children: [
632
+ /* @__PURE__ */ e("header", { className: C["dashboard-card__header"], children: /* @__PURE__ */ e("h1", { className: C["dashboard-card__title"], children: "Projekte" }) }),
633
+ /* @__PURE__ */ e(
634
+ se,
635
+ {
636
+ data: p,
637
+ onSegmentClick: y
638
+ }
639
+ ),
640
+ /* @__PURE__ */ e(
641
+ "div",
642
+ {
643
+ className: C["status-legend"],
644
+ role: "listbox",
645
+ "aria-label": "Nach Status filtern",
646
+ children: we.map(({ status: c, label: N }) => /* @__PURE__ */ e(
647
+ ae,
648
+ {
649
+ status: c,
650
+ label: N,
651
+ count: t[c],
652
+ active: u === c,
653
+ onClick: () => f(c)
654
+ },
655
+ c
656
+ ))
657
+ }
658
+ )
659
+ ]
660
+ }
661
+ ),
662
+ /* @__PURE__ */ n(
663
+ "section",
664
+ {
665
+ className: v(C["dashboard-card"], C["project-list"]),
666
+ "aria-label": "Projektliste",
667
+ children: [
668
+ /* @__PURE__ */ n("div", { className: C["project-filters"], children: [
669
+ /* @__PURE__ */ e("h2", { className: C["dashboard-card__title"], children: j }),
670
+ /* @__PURE__ */ e(
671
+ "input",
672
+ {
673
+ type: "search",
674
+ className: C["project-filters__search"],
675
+ "aria-label": "Projekte durchsuchen",
676
+ placeholder: "Suchen...",
677
+ value: m,
678
+ onChange: (c) => g(c.target.value)
679
+ }
680
+ )
681
+ ] }),
682
+ /* @__PURE__ */ e(le, { rows: b, onToggleFavorite: k })
683
+ ]
684
+ }
685
+ )
686
+ ]
687
+ }
688
+ );
689
+ }
690
+ );
691
+ ke.displayName = "DashboardPage";
692
+ const je = "_icon_1ekm1_83", x = {
693
+ "task-item": "_task-item_1ekm1_4",
694
+ "task-item__content": "_task-item__content_1ekm1_25",
695
+ "task-item__title-group": "_task-item__title-group_1ekm1_32",
696
+ "task-item__title": "_task-item__title_1ekm1_32",
697
+ "task-item__meta": "_task-item__meta_1ekm1_52",
698
+ "meta-user": "_meta-user_1ekm1_64",
699
+ "meta-project": "_meta-project_1ekm1_70",
700
+ "icon-sm": "_icon-sm_1ekm1_83",
701
+ "task-item__deadline": "_task-item__deadline_1ekm1_88",
702
+ "deadline-urgent": "_deadline-urgent_1ekm1_97",
703
+ "deadline-normal": "_deadline-normal_1ekm1_102",
704
+ "task-item__actions": "_task-item__actions_1ekm1_107",
705
+ icon: je
706
+ }, Se = [
707
+ { value: "Offen", label: "Offen" },
708
+ { value: "In Arbeit", label: "In Arbeit" },
709
+ { value: "Erledigt", label: "Erledigt" }
710
+ ], re = w.forwardRef(
711
+ ({ title: a, project: l, projectLabel: r, status: o, deadline: i, deadlineType: _ = "normal", priority: u, assignees: f, description: m, onClick: g, onStatusChange: t, className: b, ...j }, k) => {
712
+ const p = (c) => {
713
+ (c.key === "Enter" || c.key === " ") && (c.preventDefault(), g?.());
714
+ }, y = (c) => {
715
+ c.stopPropagation();
716
+ };
717
+ return /* @__PURE__ */ n(
718
+ "article",
719
+ {
720
+ ref: k,
721
+ className: v(x["task-item"], b),
722
+ role: "listitem",
723
+ tabIndex: 0,
724
+ onClick: g,
725
+ onKeyDown: p,
726
+ ...j,
727
+ children: [
728
+ /* @__PURE__ */ n("div", { className: x["task-item__content"], children: [
729
+ /* @__PURE__ */ e("div", { className: x["task-item__title-group"], children: /* @__PURE__ */ e("h3", { className: x["task-item__title"], children: a }) }),
730
+ /* @__PURE__ */ n("div", { className: x["task-item__meta"], children: [
731
+ f.length > 0 && /* @__PURE__ */ e("div", { className: x["meta-user"], children: /* @__PURE__ */ e(H, { children: f.map((c, N) => /* @__PURE__ */ e(B, { initials: c.initials, name: c.name }, N)) }) }),
732
+ /* @__PURE__ */ n("div", { className: x["meta-project"], "aria-label": `Projekt: ${r || l}`, children: [
733
+ /* @__PURE__ */ e("svg", { className: x["icon-sm"], viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { d: "M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }) }),
734
+ r || l
735
+ ] }),
736
+ u && u !== "low" && /* @__PURE__ */ e(K, { level: u, size: "small" })
737
+ ] })
738
+ ] }),
739
+ /* @__PURE__ */ e("div", { className: v(x["task-item__deadline"], x[`deadline-${_}`]), children: i }),
740
+ /* @__PURE__ */ e("div", { className: x["task-item__actions"], onClick: y, children: /* @__PURE__ */ e(
741
+ ne,
742
+ {
743
+ options: Se,
744
+ value: o,
745
+ onChange: t
746
+ }
747
+ ) })
748
+ ]
749
+ }
750
+ );
751
+ }
752
+ );
753
+ re.displayName = "TaskItem";
754
+ const Ae = "_textarea_sth7y_196", Ce = "_icon_sth7y_203", s = {
755
+ "modal-overlay": "_modal-overlay_sth7y_4",
756
+ "is-active": "_is-active_sth7y_19",
757
+ "modal-content": "_modal-content_sth7y_25",
758
+ "modal-header": "_modal-header_sth7y_46",
759
+ "modal-header-title": "_modal-header-title_sth7y_56",
760
+ "modal-body": "_modal-body_sth7y_66",
761
+ "modal-footer": "_modal-footer_sth7y_85",
762
+ "view-group": "_view-group_sth7y_96",
763
+ "view-label": "_view-label_sth7y_103",
764
+ "view-badge-row": "_view-badge-row_sth7y_113",
765
+ "view-task-title": "_view-task-title_sth7y_121",
766
+ "view-value-strong": "_view-value-strong_sth7y_131",
767
+ "view-description": "_view-description_sth7y_139",
768
+ "text-muted": "_text-muted_sth7y_147",
769
+ "form-group": "_form-group_sth7y_153",
770
+ "form-row": "_form-row_sth7y_159",
771
+ "form-label": "_form-label_sth7y_165",
772
+ "form-control": "_form-control_sth7y_175",
773
+ textarea: Ae,
774
+ icon: Ce,
775
+ "icon-pencil": "_icon-pencil_sth7y_214"
776
+ }, U = [
777
+ { value: "Q1", label: "Q1 Roadmap" },
778
+ { value: "FR", label: "Frontend Relaunch" },
779
+ { value: "UR", label: "User Research" }
780
+ ], Y = [
781
+ { initials: "FV", name: "Fabian Venmann" },
782
+ { initials: "LV", name: "Luca Vitiello" },
783
+ { initials: "AS", name: "Anna Schmidt" }
784
+ ], ie = w.forwardRef(
785
+ ({ isOpen: a, onClose: l, task: r, onSave: o, initialMode: i = "view", className: _, ...u }, f) => {
786
+ const [m, g] = I(i), [t, b] = I(null);
787
+ if (z(() => {
788
+ a && r && (b({ ...r, checklist: [...r.checklist] }), g(i));
789
+ }, [a, r, i]), z(() => {
790
+ const d = (S) => {
791
+ S.key === "Escape" && a && l();
792
+ };
793
+ return document.addEventListener("keydown", d), () => document.removeEventListener("keydown", d);
794
+ }, [a, l]), !a || !r || !t) return null;
795
+ const j = () => {
796
+ o && o(t), g("view");
797
+ }, k = () => {
798
+ l();
799
+ }, p = (d) => {
800
+ b({ ...t, checklist: d });
801
+ }, y = (d) => {
802
+ const S = U.find((T) => T.value === d.target.value);
803
+ b({
804
+ ...t,
805
+ project: d.target.value,
806
+ projectLabel: S?.label || d.target.value
807
+ });
808
+ }, c = (d) => {
809
+ const S = Y.find((T) => T.initials.toLowerCase() === d.target.value);
810
+ S && b({ ...t, assignees: [S] });
811
+ }, N = () => {
812
+ const d = {
813
+ id: `check-${Date.now()}`,
814
+ text: "",
815
+ checked: !1
816
+ };
817
+ b({
818
+ ...t,
819
+ checklist: [...t.checklist, d]
820
+ });
821
+ }, h = (d) => {
822
+ d.target === d.currentTarget && k();
823
+ };
824
+ return /* @__PURE__ */ e(
825
+ "div",
826
+ {
827
+ ref: f,
828
+ className: v(s["modal-overlay"], { [s["is-active"]]: a }, _),
829
+ onClick: h,
830
+ role: "dialog",
831
+ "aria-modal": "true",
832
+ "aria-labelledby": "modalTitle",
833
+ ...u,
834
+ children: /* @__PURE__ */ n("div", { className: s["modal-content"], "data-mode": m, children: [
835
+ /* @__PURE__ */ n("header", { className: s["modal-header"], children: [
836
+ /* @__PURE__ */ e("h2", { className: s["modal-header-title"], id: "modalTitle", children: m === "edit" ? "Aufgabe bearbeiten" : "Aufgaben-Details" }),
837
+ /* @__PURE__ */ e(P, { variant: "ghost", onClick: k, "aria-label": "Schließen", children: /* @__PURE__ */ e("svg", { className: s.icon, viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { d: "M18 6 6 18M6 6l12 12" }) }) })
838
+ ] }),
839
+ m === "view" ? /* @__PURE__ */ n("div", { className: s["modal-body"], children: [
840
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
841
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Titel" }),
842
+ /* @__PURE__ */ e("h3", { className: s["view-task-title"], children: t.title })
843
+ ] }),
844
+ /* @__PURE__ */ n("div", { className: s["view-badge-row"], children: [
845
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
846
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Verantwortlich" }),
847
+ t.assignees.length > 0 ? /* @__PURE__ */ e(H, { children: t.assignees.map((d, S) => /* @__PURE__ */ e(B, { initials: d.initials, name: d.name }, S)) }) : /* @__PURE__ */ e(B, { initials: "?", name: "Nicht zugewiesen" })
848
+ ] }),
849
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
850
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Projekt" }),
851
+ /* @__PURE__ */ n(G, { children: [
852
+ /* @__PURE__ */ e("svg", { className: s["icon-sm"], viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { d: "M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }) }),
853
+ t.projectLabel || t.project
854
+ ] })
855
+ ] }),
856
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
857
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Priorität" }),
858
+ t.priority ? /* @__PURE__ */ e(K, { level: t.priority, size: "large" }) : /* @__PURE__ */ e("div", { className: s["text-muted"], children: "Keine" })
859
+ ] }),
860
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
861
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Status" }),
862
+ /* @__PURE__ */ e(G, { children: t.status })
863
+ ] }),
864
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
865
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Fälligkeit" }),
866
+ /* @__PURE__ */ e("div", { className: s["view-value-strong"], children: t.deadline })
867
+ ] })
868
+ ] }),
869
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
870
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "Beschreibung" }),
871
+ /* @__PURE__ */ e("p", { className: s["view-description"], children: t.description || /* @__PURE__ */ e("span", { className: s["text-muted"], children: "Keine Beschreibung vorhanden." }) })
872
+ ] }),
873
+ /* @__PURE__ */ n("div", { className: s["view-group"], children: [
874
+ /* @__PURE__ */ e("span", { className: s["view-label"], children: "To-Do Checkliste" }),
875
+ /* @__PURE__ */ e(W, { items: t.checklist, onChange: p, editable: !1 })
876
+ ] })
877
+ ] }) : /* @__PURE__ */ n("div", { className: s["modal-body"], children: [
878
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
879
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskTitle", children: "Titel" }),
880
+ /* @__PURE__ */ e(
881
+ "input",
882
+ {
883
+ type: "text",
884
+ id: "taskTitle",
885
+ className: s["form-control"],
886
+ value: t.title,
887
+ onChange: (d) => b({ ...t, title: d.target.value })
888
+ }
889
+ )
890
+ ] }),
891
+ /* @__PURE__ */ n("div", { className: s["form-row"], children: [
892
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
893
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskProject", children: "Projekt" }),
894
+ /* @__PURE__ */ e(
895
+ "select",
896
+ {
897
+ id: "taskProject",
898
+ className: s["form-control"],
899
+ value: t.project,
900
+ onChange: y,
901
+ children: U.map((d) => /* @__PURE__ */ e("option", { value: d.value, children: d.label }, d.value))
902
+ }
903
+ )
904
+ ] }),
905
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
906
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskStatus", children: "Status" }),
907
+ /* @__PURE__ */ n(
908
+ "select",
909
+ {
910
+ id: "taskStatus",
911
+ className: s["form-control"],
912
+ value: t.status,
913
+ onChange: (d) => b({ ...t, status: d.target.value }),
914
+ children: [
915
+ /* @__PURE__ */ e("option", { value: "Offen", children: "Offen" }),
916
+ /* @__PURE__ */ e("option", { value: "In Arbeit", children: "In Arbeit" }),
917
+ /* @__PURE__ */ e("option", { value: "Erledigt", children: "Erledigt" })
918
+ ]
919
+ }
920
+ )
921
+ ] })
922
+ ] }),
923
+ /* @__PURE__ */ n("div", { className: s["form-row"], children: [
924
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
925
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskDate", children: "Fälligkeitsdatum" }),
926
+ /* @__PURE__ */ e(
927
+ "input",
928
+ {
929
+ type: "text",
930
+ id: "taskDate",
931
+ className: s["form-control"],
932
+ value: t.deadline,
933
+ onChange: (d) => b({ ...t, deadline: d.target.value })
934
+ }
935
+ )
936
+ ] }),
937
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
938
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskPriority", children: "Priorität" }),
939
+ /* @__PURE__ */ n(
940
+ "select",
941
+ {
942
+ id: "taskPriority",
943
+ className: s["form-control"],
944
+ value: t.priority || "",
945
+ onChange: (d) => b({ ...t, priority: d.target.value || void 0 }),
946
+ children: [
947
+ /* @__PURE__ */ e("option", { value: "", children: "Keine" }),
948
+ /* @__PURE__ */ e("option", { value: "high", children: "Hoch (!!)" }),
949
+ /* @__PURE__ */ e("option", { value: "medium", children: "Medium (!)" }),
950
+ /* @__PURE__ */ e("option", { value: "low", children: "Niedrig" })
951
+ ]
952
+ }
953
+ )
954
+ ] })
955
+ ] }),
956
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
957
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskAssignee", children: "Verantwortlich" }),
958
+ /* @__PURE__ */ n("div", { style: { display: "flex", alignItems: "center", gap: "0.75rem" }, children: [
959
+ /* @__PURE__ */ e(B, { initials: t.assignees[0]?.initials || "?" }),
960
+ /* @__PURE__ */ e(
961
+ "select",
962
+ {
963
+ id: "taskAssignee",
964
+ className: s["form-control"],
965
+ style: { flex: 1 },
966
+ value: t.assignees[0]?.initials.toLowerCase() || "",
967
+ onChange: c,
968
+ children: Y.map((d) => /* @__PURE__ */ e("option", { value: d.initials.toLowerCase(), children: d.name }, d.initials))
969
+ }
970
+ )
971
+ ] })
972
+ ] }),
973
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
974
+ /* @__PURE__ */ e("label", { className: s["form-label"], htmlFor: "taskDescription", children: "Beschreibung" }),
975
+ /* @__PURE__ */ e(
976
+ "textarea",
977
+ {
978
+ id: "taskDescription",
979
+ className: v(s["form-control"], s.textarea),
980
+ placeholder: "Weitere Details zur Aufgabe...",
981
+ value: t.description || "",
982
+ onChange: (d) => b({ ...t, description: d.target.value })
983
+ }
984
+ )
985
+ ] }),
986
+ /* @__PURE__ */ n("div", { className: s["form-group"], children: [
987
+ /* @__PURE__ */ e("label", { className: s["form-label"], children: "To-Do Checkliste" }),
988
+ /* @__PURE__ */ e(W, { items: t.checklist, onChange: p, editable: !0 }),
989
+ /* @__PURE__ */ e(
990
+ P,
991
+ {
992
+ variant: "ghost",
993
+ onClick: N,
994
+ style: { alignSelf: "flex-start", marginTop: "0.25rem" },
995
+ children: "+ Neues Element"
996
+ }
997
+ )
998
+ ] })
999
+ ] }),
1000
+ m === "view" ? /* @__PURE__ */ n("footer", { className: s["modal-footer"], children: [
1001
+ /* @__PURE__ */ e(P, { variant: "outline", onClick: k, children: "Schließen" }),
1002
+ /* @__PURE__ */ n(P, { variant: "primary", onClick: () => g("edit"), children: [
1003
+ /* @__PURE__ */ e("svg", { className: s["icon-pencil"], viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { d: "M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z" }) }),
1004
+ "Bearbeiten"
1005
+ ] })
1006
+ ] }) : /* @__PURE__ */ n("footer", { className: s["modal-footer"], children: [
1007
+ /* @__PURE__ */ e(P, { variant: "outline", onClick: () => g("view"), children: "Abbrechen" }),
1008
+ /* @__PURE__ */ e(P, { variant: "primary", onClick: j, children: "Speichern" })
1009
+ ] })
1010
+ ] })
1011
+ }
1012
+ );
1013
+ }
1014
+ );
1015
+ ie.displayName = "TaskDetailModal";
1016
+ const xe = "_icon_1fdjp_65", R = {
1017
+ "widget-card": "_widget-card_1fdjp_4",
1018
+ "widget-header": "_widget-header_1fdjp_20",
1019
+ "widget-header__title": "_widget-header__title_1fdjp_30",
1020
+ "task-list": "_task-list_1fdjp_41",
1021
+ icon: xe,
1022
+ "icon-sm": "_icon-sm_1fdjp_75"
1023
+ }, Ie = w.forwardRef(
1024
+ ({ tasks: a, onTaskUpdate: l, onTaskAdd: r, className: o, ...i }, _) => {
1025
+ const [u, f] = I(a), [m, g] = I(!1), [t, b] = I(null), [j, k] = I("view"), p = (h) => {
1026
+ b(h), k("view"), g(!0);
1027
+ }, y = () => {
1028
+ const h = {
1029
+ id: `new-${Date.now()}`,
1030
+ title: "Neue Aufgabe",
1031
+ project: "Q1",
1032
+ projectLabel: "Q1 Roadmap",
1033
+ status: "Offen",
1034
+ deadline: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
1035
+ priority: "medium",
1036
+ assignees: [{ initials: "FV", name: "Fabian Venmann" }],
1037
+ description: "",
1038
+ checklist: []
1039
+ };
1040
+ b(h), k("edit"), g(!0);
1041
+ }, c = (h) => {
1042
+ if (u.some((S) => S.id === h.id)) {
1043
+ const S = u.map((T) => T.id === h.id ? h : T);
1044
+ f(S), l && l(h);
1045
+ } else
1046
+ f([...u, h]), r && r(h);
1047
+ b(h);
1048
+ }, N = (h, d) => {
1049
+ const S = u.map((T) => {
1050
+ if (T.id === h) {
1051
+ const q = { ...T, status: d };
1052
+ return l && l(q), q;
1053
+ }
1054
+ return T;
1055
+ });
1056
+ f(S);
1057
+ };
1058
+ return /* @__PURE__ */ n(
1059
+ "main",
1060
+ {
1061
+ ref: _,
1062
+ className: v(R["widget-card"], o),
1063
+ ...i,
1064
+ children: [
1065
+ /* @__PURE__ */ n("header", { className: R["widget-header"], children: [
1066
+ /* @__PURE__ */ e("h2", { className: R["widget-header__title"], children: "Aufgaben" }),
1067
+ /* @__PURE__ */ n(P, { variant: "primary", onClick: y, "aria-label": "Neue Aufgabe erstellen", children: [
1068
+ /* @__PURE__ */ e("svg", { className: v(R.icon, R["icon-sm"]), viewBox: "0 0 24 24", children: /* @__PURE__ */ e("path", { d: "M12 5v14M5 12h14" }) }),
1069
+ "Neu"
1070
+ ] })
1071
+ ] }),
1072
+ /* @__PURE__ */ e("div", { className: R["task-list"], role: "list", "aria-label": "Aufgabenliste", children: u.map((h) => /* @__PURE__ */ e(
1073
+ re,
1074
+ {
1075
+ title: h.title,
1076
+ project: h.project,
1077
+ projectLabel: h.projectLabel,
1078
+ status: h.status,
1079
+ deadline: h.deadline,
1080
+ deadlineType: h.deadlineType,
1081
+ priority: h.priority,
1082
+ assignees: h.assignees,
1083
+ description: h.description,
1084
+ onClick: () => p(h),
1085
+ onStatusChange: (d) => N(h.id, d)
1086
+ },
1087
+ h.id
1088
+ )) }),
1089
+ /* @__PURE__ */ e(
1090
+ ie,
1091
+ {
1092
+ isOpen: m,
1093
+ onClose: () => g(!1),
1094
+ task: t,
1095
+ initialMode: j,
1096
+ onSave: c
1097
+ }
1098
+ )
1099
+ ]
532
1100
  }
533
1101
  );
534
1102
  }
535
1103
  );
536
- le.displayName = "Checklist";
1104
+ Ie.displayName = "TaskWidget";
537
1105
  export {
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
1106
+ B as Avatar,
1107
+ H as AvatarGroup,
1108
+ G as Badge,
1109
+ P as Button,
1110
+ W as Checklist,
1111
+ ke as DashboardPage,
1112
+ te as FavoriteButton,
1113
+ K as PriorityBadge,
1114
+ le as ProjectTable,
1115
+ ee as StatusBadge,
1116
+ se as StatusChart,
1117
+ ne as StatusDropdown,
1118
+ ae as StatusLegendItem,
1119
+ ie as TaskDetailModal,
1120
+ re as TaskItem,
1121
+ Ie as TaskWidget
550
1122
  };