@activecollab/components 2.0.366 → 2.0.368
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/StepSequence/StepSequence.js +64 -0
- package/dist/cjs/components/StepSequence/StepSequence.js.map +1 -0
- package/dist/cjs/components/StepSequence/Styles.js +22 -0
- package/dist/cjs/components/StepSequence/Styles.js.map +1 -0
- package/dist/cjs/components/StepSequence/index.js +17 -0
- package/dist/cjs/components/StepSequence/index.js.map +1 -0
- package/dist/cjs/components/index.js +11 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/presentation/listView/columns.js +135 -60
- package/dist/cjs/presentation/listView/columns.js.map +1 -1
- package/dist/cjs/presentation/shared/SourceCodeSection.js +17 -37
- package/dist/cjs/presentation/shared/SourceCodeSection.js.map +1 -1
- package/dist/esm/components/StepSequence/StepSequence.d.ts +22 -0
- package/dist/esm/components/StepSequence/StepSequence.d.ts.map +1 -0
- package/dist/esm/components/StepSequence/StepSequence.js +54 -0
- package/dist/esm/components/StepSequence/StepSequence.js.map +1 -0
- package/dist/esm/components/StepSequence/Styles.d.ts +3 -0
- package/dist/esm/components/StepSequence/Styles.d.ts.map +1 -0
- package/dist/esm/components/StepSequence/Styles.js +15 -0
- package/dist/esm/components/StepSequence/Styles.js.map +1 -0
- package/dist/esm/components/StepSequence/index.d.ts +2 -0
- package/dist/esm/components/StepSequence/index.d.ts.map +1 -0
- package/dist/esm/components/StepSequence/index.js +2 -0
- package/dist/esm/components/StepSequence/index.js.map +1 -0
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/presentation/listView/columns.d.ts +14 -0
- package/dist/esm/presentation/listView/columns.d.ts.map +1 -1
- package/dist/esm/presentation/listView/columns.js +130 -59
- package/dist/esm/presentation/listView/columns.js.map +1 -1
- package/dist/esm/presentation/shared/SourceCodeSection.d.ts.map +1 -1
- package/dist/esm/presentation/shared/SourceCodeSection.js +15 -35
- package/dist/esm/presentation/shared/SourceCodeSection.js.map +1 -1
- package/dist/index.js +64 -0
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns.js","names":["React","createContext","forwardRef","useCallback","useContext","useMemo","useState","moment","styled","css","Button","Checkbox","Chip","DatePicker","Dot","CalendarIcon","ClockAddIcon","CollapseExpandSingleIcon","InputHours","Label","Modal","ProgressPie","Select","SelectTrigger","Textarea","SlideFromTop","Body2","Caption1","Caption2","Header3","formatHours","SANS","CooltipStyle","ListButtonBase","_ref","ref","open","className","children","rest","_objectWithoutPropertiesLoose","_excluded","createElement","_extends","type","variant","active","displayName","StyledListButton","withConfig","componentId","INITIAL_LABELS","id","name","color","textColor","NEW_LABEL_COLORS","LabelsContext","labels","labelsById","addLabel","LabelsProvider","_ref2","_useState","setLabels","trimmed","trim","toUpperCase","toLowerCase","replace","prev","some","label","palette","length","value","reduce","acc","Provider","useTaskLabels","StyledLabelPlaceholder","span","StyledLabelItems","MAX_SHOWN_LABELS","LabelItems","_ref3","showAsDot","shown","restCount","Math","min","slice","map","key","size","backgroundColor","style","maxWidth","typographyProps","weight","LabelTrigger","_ref4","_excluded2","LabelCell","_ref5","labelIds","_ref5$completed","completed","_useTaskLabels","catalog","_useState2","selected","setSelected","selectedLabels","filter","Boolean","sort","a","b","localeCompare","options","handleChange","Array","isArray","String","handleAddNew","includes","StyledReadOnlyCell","onChange","emptyValue","emptyAction","autoHeightMax","position","target","DATE_FORMAT","todayUnix","utc","startOf","unix","dayOffset","offset","add","formatDateRange","from","to","undefined","start","due","withoutYear","withoutYearAndMonth","format","year","month","formatDateLong","isOverdue","dueOn","StyledDateValue","div","StyledPickerCell","DateTrigger","_ref6","tooltip","overdue","_excluded3","DateCell","_ref7","_dates$from","_dates$to2","startOn","_ref7$completed","_useState3","dates","setDates","_useState4","pickerMounted","setPickerMounted","_useMemo","_dates$to","formatted","hint","handleSave","range","Number","handleClear","handleCalendarToggle","next","onClick","mode","instant","maxRange","firstDayOfWeek","onSave","onClear","onCalendarToggle","timeToEstimatePercentage","tracked","estimated","round","formatTrackedAndEstimated","progressColor","percent","StyledTimeValue","TimeValue","_ref8","radius","progress","TimeTrigger","_ref9","hasTime","TimeCell","_ref0","taskName","_ref0$tracked","_ref0$estimated","users","currentUserId","_ref0$completed","_useState5","setOpen","_useState6","_users$find$name","_users$find","date","userId","userName","find","user","jobType","hours","billable","records","setRecords","total","sum","record","handleAdd","TimeRecordDialog","onSubmit","onClose","JOB_TYPES","StyledTimeRecordPaper","_ref1","_useState7","setValue","_useState8","setDate","_useState9","setUserId","_useState0","jobTypeId","setJobTypeId","_useState1","setBillable","_useState10","showDescription","setShowDescription","_useState11","description","setDescription","_useState12","showRecords","setShowRecords","item","_trimmed$split","split","h","m","handleSubmit","_user$name","_jobType$name","in","role","required","autoFocus","allowEmptyValue","placeholder","forceCloseMenu","checked","htmlFor","event","disabled","tabularNums"],"sources":["../../../../src/presentation/listView/columns.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\n\nimport moment from \"moment-timezone\";\nimport styled, { css } from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { Chip } from \"../../components/Chip\";\nimport { DatePicker, TimestampDateRange } from \"../../components/DatePicker\";\nimport { Dot } from \"../../components/Dot\";\nimport {\n CalendarIcon,\n ClockAddIcon,\n CollapseExpandSingleIcon,\n} from \"../../components/Icons\";\nimport { InputHours } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { Modal } from \"../../components/Modal\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Textarea } from \"../../components/Textarea\";\nimport { SlideFromTop } from \"../../components/Transitions\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header3,\n} from \"../../components/Typography\";\nimport { formatHours } from \"../../utils\";\n\n/**\n * Interactive list-view column cells for the `Presentation/List view` story —\n * the Label, Date and Time cells with their editors, mirroring\n * `new-activecollab-front/src/components/ListView/columns/*`:\n *\n * - **Label** (`columns/Label.js` + `LabelTrigger`/`LabelItems`): chips for 1–2\n * labels, dots from 3 up, `+N` past 8, and a DS `Select` picker (search,\n * colored dot + label name in the label's own colour, checkbox, \"+ Add new\").\n * - **Date** (`columns/Date.js`): a range trigger that formats like the app\n * (`formatDateRange`), turns red when overdue, and opens the DS `DatePicker`\n * in atomic mode so it gets the Save / ✕ / Clear footer.\n * - **Time** (`columns/Time.js`): `ProgressPie` + `tracked/estimated`, coloured\n * by how much of the estimate is used, opening the \"Add Time Record\" dialog.\n *\n * Everything is local state — there is no store, so edits live as long as the\n * story is mounted.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Inter\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/**\n * CSS-only tooltip, mirroring the app's `.c-cooltip.c-cooltip--top` (see\n * `styles/c_cooltip.less`). The list renders hundreds of these, and the DS\n * `Tooltip` mounts a Portal + Popper per instance — far too heavy per cell — so\n * the cells use `data-tooltip` exactly like the real list view does.\n */\nconst CooltipStyle = css`\n &[data-tooltip],\n [data-tooltip] {\n position: relative;\n }\n\n &[data-tooltip]::after,\n [data-tooltip]::after {\n pointer-events: none;\n content: attr(data-tooltip);\n position: absolute;\n bottom: calc(100% + 0.5rem);\n left: 50%;\n transform: scale(0.85) translateX(-50%);\n transform-origin: 0;\n opacity: 0;\n max-width: 12.5rem;\n padding: 0.25rem 0.625rem;\n border-radius: 0.5rem;\n background-color: rgba(0, 0, 0, 0.9);\n color: #fff;\n font-family: ${SANS};\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.3;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @media (hover: hover) {\n &[data-tooltip]:not(:focus):hover::after,\n [data-tooltip]:not(:focus):hover::after {\n transition: opacity 0.15s ease, transform 0.15s ease;\n transition-delay: 0.6s;\n transform: scale(1) translateX(-50%);\n opacity: 1;\n }\n }\n`;\n\n/* ================================================================== */\n/* Shared trigger button (mirrors ListView/ListButton.js) */\n/* ================================================================== */\n\ninterface ListButtonProps {\n /** injected by DS `Menu` when it clones the target */\n open?: boolean;\n className?: string;\n children?: ReactNode;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n disabled?: boolean;\n \"aria-label\"?: string;\n}\n\n/**\n * `Menu` clones its `target` and injects `open`, so — like the app's\n * `ListButton` — the trigger has to swallow that prop and turn it into the DS\n * `active` state plus an `.open` class the row CSS uses to keep the trigger\n * visible while its menu is open.\n */\nconst ListButtonBase = forwardRef<HTMLButtonElement, ListButtonProps>(\n ({ open, className, children, ...rest }, ref) => (\n <Button\n {...rest}\n ref={ref}\n type=\"button\"\n variant=\"text gray\"\n active={open}\n className={`list-button${className ? ` ${className}` : \"\"}${\n open ? \" open\" : \"\"\n }`}\n >\n {children}\n </Button>\n )\n);\n\nListButtonBase.displayName = \"ListButtonBase\";\n\n/*\n * The DS Button treats a single element child as \"icon only\" — inline-flex,\n * centered, a fixed 32px wide and `overflow: hidden`, which squashes a date or\n * a chip. `&&` doubles the specificity so these rules win over that block; the\n * button then hugs its content and the column's `justify-content: flex-end`\n * parks it against the right edge.\n */\nconst StyledListButton = styled(ListButtonBase)`\n && {\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n width: auto;\n min-width: 0;\n max-width: 100%;\n padding: 4px 8px;\n overflow: visible;\n text-align: right;\n }\n\n ${CooltipStyle}\n`;\n\n/* ================================================================== */\n/* Labels */\n/* ================================================================== */\n\nexport interface TaskLabel {\n id: string;\n name: string;\n /** chip background + dot colour (label colours are data, not theme) */\n color: string;\n /** the label's own text colour, used in the picker list */\n textColor: string;\n}\n\n/* The project's label catalogue. Names are uppercase, like in the app. */\nconst INITIAL_LABELS: TaskLabel[] = [\n {\n id: \"in-progress\",\n name: \"IN PROGRESS\",\n color: \"#CDE8F5\",\n textColor: \"#3D7F9E\",\n },\n {\n id: \"needs-review\",\n name: \"NEEDS REVIEW\",\n color: \"#F9E79F\",\n textColor: \"#A98A17\",\n },\n { id: \"approved\", name: \"APPROVED\", color: \"#A9DFBF\", textColor: \"#3D9A6A\" },\n { id: \"blocked\", name: \"BLOCKED\", color: \"#F1948A\", textColor: \"#B5544C\" },\n { id: \"on-hold\", name: \"ON HOLD\", color: \"#F5CBA7\", textColor: \"#B4713A\" },\n { id: \"idea\", name: \"IDEA\", color: \"#FAD7A0\", textColor: \"#B98A2B\" },\n { id: \"todo\", name: \"TODO\", color: \"#D6EAF8\", textColor: \"#4A87B5\" },\n { id: \"research\", name: \"RESEARCH\", color: \"#D7BDE2\", textColor: \"#8155A0\" },\n {\n id: \"accessibility\",\n name: \"ACCESSIBILITY\",\n color: \"#AED6F1\",\n textColor: \"#3E7CA6\",\n },\n { id: \"copy\", name: \"COPY\", color: \"#F5B7B1\", textColor: \"#B5544C\" },\n {\n id: \"design-debt\",\n name: \"DESIGN DEBT\",\n color: \"#E8DAEF\",\n textColor: \"#7D5A99\",\n },\n { id: \"qa\", name: \"QA\", color: \"#A3E4D7\", textColor: \"#34907C\" },\n {\n id: \"client-input\",\n name: \"CLIENT INPUT\",\n color: \"#FDEBD0\",\n textColor: \"#B08640\",\n },\n { id: \"mobile\", name: \"MOBILE\", color: \"#D1F2EB\", textColor: \"#2E8B7A\" },\n {\n id: \"performance\",\n name: \"PERFORMANCE\",\n color: \"#FCF3CF\",\n textColor: \"#A38B1E\",\n },\n { id: \"asset\", name: \"ASSET\", color: \"#D5D8DC\", textColor: \"#6B7378\" },\n];\n\n/* Colours handed out to labels created from the picker's \"+ Add new\" row. */\nconst NEW_LABEL_COLORS = [\n { color: \"#F9E0F2\", textColor: \"#A4569B\" },\n { color: \"#DDEBFB\", textColor: \"#4E7BA8\" },\n { color: \"#E4F6D8\", textColor: \"#5F9440\" },\n { color: \"#FDE2D5\", textColor: \"#B36A45\" },\n];\n\ninterface LabelsContextValue {\n labels: TaskLabel[];\n labelsById: Record<string, TaskLabel>;\n addLabel: (name: string) => string;\n}\n\nconst LabelsContext = createContext<LabelsContextValue>({\n labels: INITIAL_LABELS,\n labelsById: {},\n addLabel: () => \"\",\n});\n\n/**\n * Holds the label catalogue for the whole list, so a label created in one\n * task's picker shows up in every other picker too.\n */\nexport const LabelsProvider = ({\n children,\n}: {\n children: ReactNode;\n}): ReactElement => {\n const [labels, setLabels] = useState<TaskLabel[]>(INITIAL_LABELS);\n\n const addLabel = useCallback((name: string): string => {\n const trimmed = name.trim().toUpperCase();\n const id = `label-${trimmed.toLowerCase().replace(/[^a-z0-9]+/g, \"-\")}`;\n setLabels((prev) => {\n if (prev.some((label) => label.id === id)) {\n return prev;\n }\n const palette = NEW_LABEL_COLORS[prev.length % NEW_LABEL_COLORS.length];\n return [...prev, { id, name: trimmed, ...palette }];\n });\n return id;\n }, []);\n\n const value = useMemo(\n () => ({\n labels,\n labelsById: labels.reduce<Record<string, TaskLabel>>(\n (acc, label) => ({ ...acc, [label.id]: label }),\n {}\n ),\n addLabel,\n }),\n [addLabel, labels]\n );\n\n return (\n <LabelsContext.Provider value={value}>{children}</LabelsContext.Provider>\n );\n};\n\nconst useTaskLabels = (): LabelsContextValue => useContext(LabelsContext);\n\n/* Empty state pill (mirrors EntityLabel + .entity-label in list-view.less) */\nconst StyledLabelPlaceholder = styled.span`\n display: inline-flex;\n align-items: center;\n padding: 1px 6px;\n border: 1px solid var(--color-theme-700);\n border-radius: 4px;\n\n .list-button.open &,\n .list-button:hover & {\n border-color: var(--color-primary-700, var(--color-primary));\n }\n`;\n\nconst StyledLabelItems = styled.span`\n display: inline-flex;\n align-items: center;\n min-width: 0;\n\n /* 2px gap between chips/dots (mirrors tw-mr-0.5 last:tw-mr-0) */\n > *:not(:last-child) {\n margin-right: 2px;\n }\n\n .rest-count {\n margin-left: 2px;\n }\n\n ${CooltipStyle}\n`;\n\nconst MAX_SHOWN_LABELS = 8;\n\nconst LabelItems = ({ labels }: { labels: TaskLabel[] }): ReactElement => {\n const showAsDot = labels.length > 2;\n let shown = labels;\n let restCount = 0;\n\n if (labels.length > MAX_SHOWN_LABELS) {\n restCount = Math.min(labels.length - MAX_SHOWN_LABELS, 99);\n shown = labels.slice(0, MAX_SHOWN_LABELS - 1);\n }\n\n return (\n <StyledLabelItems>\n {shown.map((label) =>\n showAsDot ? (\n <Dot\n key={label.id}\n color={label.color}\n size={20}\n data-tooltip={label.name}\n />\n ) : (\n <Chip\n key={label.id}\n label={label.name}\n backgroundColor={label.color}\n color=\"#303037\"\n style={{ maxWidth: \"90px\" }}\n typographyProps={{ variant: \"Caption 2\", weight: \"bold\" }}\n data-tooltip={label.name}\n />\n )\n )}\n {restCount > 0 ? (\n <Body2 weight=\"bold\" className=\"rest-count\">\n +{restCount}\n </Body2>\n ) : null}\n </StyledLabelItems>\n );\n};\n\nconst LabelTrigger = forwardRef<\n HTMLButtonElement,\n ListButtonProps & { labels: TaskLabel[] }\n>(({ labels, ...rest }, ref) => {\n if (labels.length === 0) {\n return (\n <StyledListButton\n {...rest}\n ref={ref}\n className=\"show-on-hover\"\n aria-label=\"Add labels\"\n data-tooltip=\"Add Labels\"\n >\n <StyledLabelPlaceholder>\n <Caption2 weight=\"bold\" color=\"tertiary\">\n LABEL\n </Caption2>\n </StyledLabelPlaceholder>\n </StyledListButton>\n );\n }\n\n return (\n <StyledListButton {...rest} ref={ref} aria-label=\"Change labels\">\n <LabelItems labels={labels} />\n </StyledListButton>\n );\n});\n\nLabelTrigger.displayName = \"LabelTrigger\";\n\nexport const LabelCell = ({\n labelIds,\n completed = false,\n}: {\n labelIds?: string[];\n completed?: boolean;\n}): ReactElement => {\n const { labels: catalog, labelsById, addLabel } = useTaskLabels();\n const [selected, setSelected] = useState<string[]>(labelIds ?? []);\n\n /* alphabetical, like LabelTrigger sorts before rendering */\n const selectedLabels = useMemo(\n () =>\n selected\n .map((id) => labelsById[id])\n .filter((label): label is TaskLabel => Boolean(label))\n .sort((a, b) => a.name.localeCompare(b.name)),\n [labelsById, selected]\n );\n\n const options = useMemo(\n () =>\n catalog.map((label) => ({\n id: label.id,\n name: label.name,\n color: label.color,\n textColor: label.textColor,\n })),\n [catalog]\n );\n\n const handleChange = useCallback(\n (value: (string | number)[] | string | number) => {\n setSelected(\n Array.isArray(value)\n ? value.map(String)\n : [String(value)].filter(Boolean)\n );\n },\n []\n );\n\n const handleAddNew = useCallback(\n (name?: string) => {\n if (!name || !name.trim()) {\n return;\n }\n const id = addLabel(name);\n setSelected((prev) => (prev.includes(id) ? prev : [...prev, id]));\n },\n [addLabel]\n );\n\n /* Completed tasks show their labels read-only (mirrors Label.js) */\n if (completed) {\n return (\n <StyledReadOnlyCell className=\"col col-label\">\n {selectedLabels.length > 0 ? (\n <LabelItems labels={selectedLabels} />\n ) : null}\n </StyledReadOnlyCell>\n );\n }\n\n return (\n <div className=\"col col-label\">\n <Select\n type=\"multiple\"\n options={options}\n selected={selected}\n onChange={handleChange}\n emptyValue=\"Add new\"\n emptyAction={handleAddNew}\n autoHeightMax={278}\n position=\"bottom-end\"\n target={<LabelTrigger labels={selectedLabels} />}\n />\n </div>\n );\n};\n\n/* ================================================================== */\n/* Date */\n/* ================================================================== */\n\n/** The personalized date format the app defaults to (`MMM D. YYYY`). */\nconst DATE_FORMAT = \"MMM D. YYYY\";\n\n/** Midnight UTC today — the reference point for the mock data and overdue. */\nconst todayUnix = (): number => moment.utc().startOf(\"day\").unix();\n\n/** Build a mock timestamp N days from today (negative = in the past). */\nexport const dayOffset = (offset: number): number =>\n moment.utc().startOf(\"day\").add(offset, \"days\").unix();\n\n/** mirrors utils/date.js → formatDateRange (month-first format) */\nexport const formatDateRange = (\n from?: number,\n to?: number\n): string | undefined => {\n if (from === undefined || from === null) {\n return undefined;\n }\n const start = moment.unix(from).utc();\n const due = moment.unix(to ?? from).utc();\n const withoutYear = DATE_FORMAT.replace(/YYYY|,$/gi, \"\").trim();\n const withoutYearAndMonth = withoutYear.replace(/MMM|,$/gi, \"\").trim();\n\n if (from === to || to === undefined) {\n return start.format(withoutYear);\n }\n if (start.year() === due.year() && start.month() === due.month()) {\n return `${start.format(withoutYear)} - ${due.format(withoutYearAndMonth)}`;\n }\n return `${start.format(withoutYear)} - ${due.format(withoutYear)}`;\n};\n\n/** mirrors utils/date.js → formatDateSmart(…, long) */\nconst formatDateLong = (value?: number): string =>\n value ? moment.unix(value).utc().format(DATE_FORMAT) : \"\";\n\nexport const isOverdue = (dueOn?: number, completed?: boolean): boolean =>\n Boolean(dueOn && !completed && dueOn < todayUnix());\n\nconst StyledDateValue = styled.span`\n font-family: ${SANS};\n white-space: nowrap;\n`;\n\n/* completed rows render values without a trigger, so the cell itself hosts the\n CSS tooltip */\nconst StyledReadOnlyCell = styled.div`\n padding-right: 8px;\n\n ${CooltipStyle}\n`;\n\n/**\n * `DatePicker` wraps itself in a `width: 100%` inline-block, which would stretch\n * across the column and left-align the trigger the moment the picker mounts —\n * the value would visibly jump and the popper would anchor to the wrong spot.\n * Keeping that wrapper right-aligned makes the open state geometrically\n * identical to the closed one.\n */\nconst StyledPickerCell = styled.div`\n /* StyledDatePickerWrapper — DatePicker's unclassed outer div */\n > div {\n text-align: right;\n }\n`;\n\ninterface DateTriggerProps extends ListButtonProps {\n value?: string;\n tooltip: string;\n overdue?: boolean;\n}\n\nconst DateTrigger = forwardRef<HTMLButtonElement, DateTriggerProps>(\n ({ value, tooltip, overdue, ...rest }, ref) => (\n <StyledListButton\n {...rest}\n ref={ref}\n className={value ? \"show-on-hover has-value\" : \"show-on-hover\"}\n aria-label={value ? \"Change dates\" : \"Add date\"}\n data-tooltip={tooltip}\n >\n {value ? (\n <StyledDateValue>\n <Caption1 weight=\"bold\" color={overdue ? \"alert\" : \"secondary\"}>\n {value}\n </Caption1>\n </StyledDateValue>\n ) : (\n <CalendarIcon />\n )}\n </StyledListButton>\n )\n);\n\nDateTrigger.displayName = \"DateTrigger\";\n\nexport const DateCell = ({\n startOn,\n dueOn,\n completed = false,\n}: {\n startOn?: number;\n dueOn?: number;\n completed?: boolean;\n}): ReactElement => {\n const [dates, setDates] = useState<{ from?: number; to?: number }>({\n from: startOn,\n to: dueOn,\n });\n /**\n * The DS `DatePicker` does real work on mount (timezone guess, month grids,\n * key handlers) — with one per row that is the single most expensive thing on\n * this page. So the closed state is just the trigger; the picker is mounted\n * on first click, already open, and unmounted again when it closes.\n */\n const [pickerMounted, setPickerMounted] = useState(false);\n\n /* moment isn't cheap either; only reformat when the dates actually change */\n const { value, overdue, tooltip } = useMemo(() => {\n const formatted = formatDateRange(dates.from, dates.to);\n let hint = \"Add Date\";\n if (dates.from) {\n hint =\n !dates.to || dates.to === dates.from\n ? formatDateLong(dates.from)\n : `${formatDateLong(dates.from)} - ${formatDateLong(dates.to)}`;\n }\n return {\n value: formatted,\n overdue: isOverdue(dates.to ?? dates.from, completed),\n tooltip: hint,\n };\n }, [completed, dates.from, dates.to]);\n\n const handleSave = useCallback((range?: TimestampDateRange) => {\n if (!range || range.from === null || range.from === undefined) {\n setDates({});\n return;\n }\n setDates({\n from: Number(range.from),\n to: range.to ? Number(range.to) : Number(range.from),\n });\n }, []);\n\n const handleClear = useCallback(() => setDates({}), []);\n\n const handleCalendarToggle = useCallback((next: boolean) => {\n if (!next) {\n setPickerMounted(false);\n }\n }, []);\n\n /* Completed tasks show the date read-only (mirrors Date.js) */\n if (completed) {\n return (\n <StyledReadOnlyCell className=\"col col-date\">\n {value ? (\n <StyledDateValue data-tooltip={tooltip}>\n <Caption1 weight=\"bold\" color={overdue ? \"alert\" : \"secondary\"}>\n {value}\n </Caption1>\n </StyledDateValue>\n ) : null}\n </StyledReadOnlyCell>\n );\n }\n\n if (!pickerMounted) {\n return (\n <div className=\"col col-date\">\n <DateTrigger\n value={value}\n tooltip={tooltip}\n overdue={overdue}\n onClick={() => setPickerMounted(true)}\n />\n </div>\n );\n }\n\n return (\n <StyledPickerCell className=\"col col-date\">\n <DatePicker\n open\n mode=\"custom\"\n instant={false}\n maxRange={366}\n firstDayOfWeek={1}\n position=\"bottom-end\"\n selected={{ from: dates.from ?? null, to: dates.to ?? null }}\n onSave={handleSave}\n onClear={handleClear}\n onCalendarToggle={handleCalendarToggle}\n target={\n <DateTrigger value={value} tooltip={tooltip} overdue={overdue} />\n }\n />\n </StyledPickerCell>\n );\n};\n\n/* ================================================================== */\n/* Time */\n/* ================================================================== */\n\n/** mirrors utils/utils.jsx → calculateTimeToEstimatePercentage */\nconst timeToEstimatePercentage = (\n tracked: number,\n estimated: number\n): number | null => {\n if (estimated > 0) {\n return tracked > 0 ? Math.round((tracked / estimated) * 100) : 0;\n }\n return null;\n};\n\n/** mirrors utils/utils.jsx → formatTrackedAndEstimatedTime */\nconst formatTrackedAndEstimated = (\n tracked: number,\n estimated: number\n): string =>\n estimated > 0\n ? `${formatHours(tracked, false, false, \"short\")}/${formatHours(\n estimated,\n false,\n false,\n \"short\"\n )}`\n : formatHours(tracked, false, false, \"short\");\n\n/* mirrors Time.js → progressColor() */\nconst progressColor = (percent: number): string => {\n if (percent >= 100) {\n return \"var(--red-alert)\";\n }\n if (percent >= 75) {\n return \"var(--warning)\";\n }\n return \"var(--color-sucess-green)\";\n};\n\nconst StyledTimeValue = styled.span`\n display: inline-flex;\n align-items: center;\n font-family: ${SANS};\n white-space: nowrap;\n\n .c-progress-pie,\n svg {\n flex-shrink: 0;\n }\n\n .time-pie {\n margin-right: 8px;\n }\n`;\n\nconst TimeValue = ({\n tracked,\n estimated,\n}: {\n tracked: number;\n estimated: number;\n}): ReactElement => {\n const percent = timeToEstimatePercentage(tracked, estimated);\n\n return (\n <StyledTimeValue>\n {estimated > 0 ? (\n <ProgressPie\n className=\"time-pie\"\n radius={10}\n progress={percent ?? 0}\n progressColor={progressColor(percent ?? 0)}\n backgroundColor=\"var(--color-theme-300)\"\n />\n ) : null}\n <Caption1 weight=\"bold\">\n {formatTrackedAndEstimated(tracked, estimated)}\n </Caption1>\n </StyledTimeValue>\n );\n};\n\nconst TimeTrigger = ({\n tracked,\n estimated,\n onClick,\n}: {\n tracked: number;\n estimated: number;\n onClick: () => void;\n}): ReactElement => {\n const hasTime = tracked > 0 || estimated > 0;\n\n return (\n <StyledListButton\n onClick={onClick}\n className={hasTime ? \"show-on-hover open\" : \"show-on-hover\"}\n aria-label={hasTime ? \"Edit time\" : \"Add time\"}\n data-tooltip={hasTime ? \"Edit Time\" : \"Add Time\"}\n >\n {hasTime ? (\n <TimeValue tracked={tracked} estimated={estimated} />\n ) : (\n <ClockAddIcon />\n )}\n </StyledListButton>\n );\n};\n\nexport interface TimeRecord {\n id: number;\n date: number;\n userId: string;\n userName: string;\n jobType: string;\n hours: number;\n billable: boolean;\n description?: string;\n}\n\nexport interface TimeCellUser {\n id: string;\n name: string;\n}\n\nexport const TimeCell = ({\n taskName,\n tracked = 0,\n estimated = 0,\n users,\n currentUserId,\n completed = false,\n}: {\n taskName: string;\n tracked?: number;\n estimated?: number;\n users: TimeCellUser[];\n currentUserId: string;\n completed?: boolean;\n}): ReactElement => {\n const [open, setOpen] = useState(false);\n const [records, setRecords] = useState<TimeRecord[]>(() =>\n tracked > 0\n ? [\n {\n id: 1,\n date: dayOffset(-3),\n userId: currentUserId,\n userName:\n users.find((user) => user.id === currentUserId)?.name ?? \"You\",\n jobType: \"Design\",\n hours: tracked,\n billable: true,\n },\n ]\n : []\n );\n\n const total = useMemo(\n () => records.reduce((sum, record) => sum + record.hours, 0),\n [records]\n );\n\n const handleAdd = useCallback((record: Omit<TimeRecord, \"id\">) => {\n setRecords((prev) => [{ ...record, id: prev.length + 1 }, ...prev]);\n setOpen(false);\n }, []);\n\n /* Completed tasks show the value without the \"add\" affordance (mirrors\n Time.js passing hideIcon for completed tasks) */\n if (completed) {\n return (\n <StyledReadOnlyCell className=\"col col-time\">\n {total > 0 || estimated > 0 ? (\n <TimeValue tracked={total} estimated={estimated} />\n ) : null}\n </StyledReadOnlyCell>\n );\n }\n\n return (\n <div className=\"col col-time\">\n <TimeTrigger\n tracked={total}\n estimated={estimated}\n onClick={() => setOpen(true)}\n />\n {open ? (\n <TimeRecordDialog\n open={open}\n taskName={taskName}\n users={users}\n currentUserId={currentUserId}\n records={records}\n total={total}\n onSubmit={handleAdd}\n onClose={() => setOpen(false)}\n />\n ) : null}\n </div>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Add Time Record dialog (mirrors TimeRecordForm/*) */\n/* ------------------------------------------------------------------ */\n\nconst JOB_TYPES = [\n { id: \"design\", name: \"Design\" },\n { id: \"development\", name: \"Development\" },\n { id: \"devops\", name: \"Devops\" },\n { id: \"consulting\", name: \"Consulting\" },\n { id: \"qa\", name: \"QA\" },\n];\n\n/* The dialog paper — the app builds this one by hand rather than with DS\n `Dialog` because it is 770px wide (`.time_record_form_modal_wrapper`). */\nconst StyledTimeRecordPaper = styled.div`\n position: relative;\n width: 770px;\n max-width: 95vw;\n max-height: calc(100vh - 156px);\n margin: 126px auto 30px auto;\n padding: 20px 30px;\n overflow: auto;\n border-radius: 8px;\n background-color: var(--page-paper-main);\n color: var(--color-theme-900);\n box-shadow: var(--shadow-primary);\n box-sizing: border-box;\n font-family: ${SANS};\n\n * {\n box-sizing: border-box;\n }\n\n @media (max-width: 830px) {\n width: calc(100vw - 60px);\n }\n\n .trd-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .trd-title {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-right: 16px;\n font-size: 1rem;\n font-weight: 700;\n }\n\n /* SelectTrigger is a fixed 300px control — let the date hug its label. The\n DatePicker's own full-width wrapper is right-aligned for the same reason\n as in the list cells. */\n .trd-date button {\n width: auto;\n }\n\n .trd-date > div {\n text-align: right;\n }\n\n .trd-divider {\n margin: 20px 0 32px 0;\n border-bottom: 1px solid var(--border-primary);\n height: 1px;\n }\n\n .trd-body {\n display: flex;\n justify-content: space-between;\n position: relative;\n }\n\n .trd-form {\n width: 100%;\n }\n\n .trd-fields {\n display: flex;\n align-items: flex-end;\n }\n\n .trd-hours {\n width: 144px;\n margin-right: 16px;\n flex-shrink: 0;\n }\n\n .trd-hours .c-input-wrapper,\n .trd-hours input {\n width: 100%;\n }\n\n .trd-field {\n margin-right: 16px;\n }\n\n .trd-field:last-of-type {\n margin-right: 20px;\n }\n\n .trd-field .c-label {\n display: block;\n margin-bottom: 2px;\n }\n\n /* SelectTrigger defaults to 300px; the app's fields are 144px */\n .trd-field button {\n width: 144px;\n }\n\n .trd-billable {\n display: flex;\n align-items: center;\n margin-top: 24px;\n }\n\n .trd-billable .c-label {\n margin-left: 8px;\n cursor: pointer;\n }\n\n .trd-description-trigger {\n display: inline-flex;\n align-items: center;\n margin-top: 16px;\n color: var(--color-secondary);\n font-size: 14px;\n font-weight: 500;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n font-family: ${SANS};\n }\n\n .trd-description-trigger svg {\n margin-right: 4px;\n fill: var(--color-primary);\n transition: transform 200ms ease;\n }\n\n .trd-description-trigger.collapsed svg {\n transform: rotate(180deg);\n }\n\n .trd-textarea {\n width: 360px;\n max-width: 100%;\n margin-top: 8px;\n font-size: 12px;\n resize: none;\n }\n\n .trd-actions {\n display: flex;\n margin-top: 24px;\n }\n\n .trd-actions .c-button:first-child {\n margin-right: 12px;\n }\n\n /* the total sits bottom-right of the form column, like the app */\n .trd-total {\n position: absolute;\n right: 0;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n align-self: flex-end;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n }\n\n .trd-total svg {\n margin-right: 4px;\n fill: var(--color-primary);\n transition: transform 200ms ease;\n }\n\n .trd-total.collapsed svg {\n transform: rotate(180deg);\n }\n\n .trd-records {\n margin-top: 32px;\n border-top: 1px solid var(--border-primary);\n }\n\n .trd-record {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 36px;\n border-bottom: 1px solid var(--color-theme-300);\n }\n\n .trd-record-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n`;\n\nconst TimeRecordDialog = ({\n open,\n taskName,\n users,\n currentUserId,\n records,\n total,\n onSubmit,\n onClose,\n}: {\n open: boolean;\n taskName: string;\n users: TimeCellUser[];\n currentUserId: string;\n records: TimeRecord[];\n total: number;\n onSubmit: (record: Omit<TimeRecord, \"id\">) => void;\n onClose: () => void;\n}): ReactElement => {\n const [value, setValue] = useState(\"\");\n const [date, setDate] = useState<number>(todayUnix());\n const [userId, setUserId] = useState<string>(currentUserId);\n const [jobTypeId, setJobTypeId] = useState<string>(\"devops\");\n const [billable, setBillable] = useState(false);\n const [showDescription, setShowDescription] = useState(true);\n const [description, setDescription] = useState(\"\");\n const [showRecords, setShowRecords] = useState(false);\n\n const user = users.find((item) => item.id === userId);\n const jobType = JOB_TYPES.find((item) => item.id === jobTypeId);\n\n /** \"1:30\" / \"1.5\" → decimal hours */\n const hours = useMemo(() => {\n const trimmed = value.trim();\n if (!trimmed) {\n return 0;\n }\n if (trimmed.includes(\":\")) {\n const [h, m] = trimmed.split(\":\");\n return Number(h || 0) + Number(m || 0) / 60;\n }\n return Number(trimmed) || 0;\n }, [value]);\n\n const handleSubmit = useCallback(() => {\n onSubmit({\n date,\n userId,\n userName: user?.name ?? \"\",\n jobType: jobType?.name ?? \"\",\n hours,\n billable,\n description,\n });\n }, [billable, date, description, hours, jobType, onSubmit, user, userId]);\n\n return (\n <Modal open={open} onClose={onClose}>\n <SlideFromTop in={open}>\n <StyledTimeRecordPaper role=\"dialog\" aria-label=\"Add time record\">\n <div className=\"trd-header\">\n <span className=\"trd-title\">{taskName}</span>\n <span className=\"trd-date\">\n <DatePicker\n mode=\"daily\"\n required\n firstDayOfWeek={1}\n position=\"bottom-end\"\n selected={{ from: date, to: date }}\n onSave={(range) =>\n range?.from ? setDate(Number(range.from)) : undefined\n }\n target={\n <SelectTrigger>{formatDateRange(date, date)}</SelectTrigger>\n }\n />\n </span>\n </div>\n\n <div className=\"trd-divider\" />\n\n <div className=\"trd-body\">\n <div className=\"trd-form\">\n <div className=\"trd-fields\">\n <span className=\"trd-hours\">\n <InputHours\n autoFocus\n allowEmptyValue\n size=\"biggest\"\n placeholder=\"00:00\"\n value={value}\n onChange={setValue}\n />\n </span>\n\n <span className=\"trd-field\">\n <Label size=\"small\">User</Label>\n <Select\n options={users}\n selected={userId}\n forceCloseMenu\n onChange={(next) => setUserId(String(next))}\n target={\n <SelectTrigger id=\"trd-user\">{user?.name}</SelectTrigger>\n }\n />\n </span>\n\n <span className=\"trd-field\">\n <Label size=\"small\">Job Type</Label>\n <Select\n options={JOB_TYPES}\n selected={jobTypeId}\n forceCloseMenu\n onChange={(next) => setJobTypeId(String(next))}\n target={\n <SelectTrigger id=\"trd-job-type\">\n {jobType?.name}\n </SelectTrigger>\n }\n />\n </span>\n\n <span className=\"trd-billable\">\n <Checkbox\n id=\"trd-billable\"\n checked={billable}\n onChange={() => setBillable((prev) => !prev)}\n />\n <Label htmlFor=\"trd-billable\" weight=\"regular\">\n Billable\n </Label>\n </span>\n </div>\n\n <button\n type=\"button\"\n className={\n showDescription\n ? \"trd-description-trigger\"\n : \"trd-description-trigger collapsed\"\n }\n onClick={() => setShowDescription((prev) => !prev)}\n >\n <CollapseExpandSingleIcon />\n <span>Description</span>\n </button>\n\n {showDescription ? (\n <div>\n <Textarea\n className=\"trd-textarea\"\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n />\n </div>\n ) : null}\n\n <div className=\"trd-actions\">\n <Button\n variant=\"primary\"\n disabled={hours <= 0}\n onClick={handleSubmit}\n >\n Add Time Record\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </div>\n </div>\n\n {total > 0 ? (\n <button\n type=\"button\"\n className={showRecords ? \"trd-total\" : \"trd-total collapsed\"}\n onClick={() => setShowRecords((prev) => !prev)}\n >\n <CollapseExpandSingleIcon />\n <Header3 color=\"theme-secondary\" tabularNums>\n Total: {formatHours(total, false, true)}h\n </Header3>\n </button>\n ) : null}\n </div>\n\n {showRecords && records.length > 0 ? (\n <div className=\"trd-records\">\n {records.map((record) => (\n <div key={record.id} className=\"trd-record\">\n <span className=\"trd-record-left\">\n <Caption1 weight=\"bold\" color=\"secondary\">\n {formatDateRange(record.date, record.date)}\n </Caption1>\n <Body2>{record.userName}</Body2>\n <Caption1 color=\"secondary\">{record.jobType}</Caption1>\n </span>\n <Body2 weight=\"bold\" tabularNums>\n {formatHours(record.hours)}h\n </Body2>\n </div>\n ))}\n </div>\n ) : null}\n </StyledTimeRecordPaper>\n </SlideFromTop>\n </Modal>\n );\n};\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IACVC,aAAa,EACbC,UAAU,EAGVC,WAAW,EACXC,UAAU,EACVC,OAAO,EACPC,QAAQ,QACH,OAAO;AAEd,OAAOC,MAAM,MAAM,iBAAiB;AACpC,OAAOC,MAAM,IAAIC,GAAG,QAAQ,mBAAmB;AAE/C,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,IAAI,QAAQ,uBAAuB;AAC5C,SAASC,UAAU,QAA4B,6BAA6B;AAC5E,SAASC,GAAG,QAAQ,sBAAsB;AAC1C,SACEC,YAAY,EACZC,YAAY,EACZC,wBAAwB,QACnB,wBAAwB;AAC/B,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,KAAK,QAAQ,wBAAwB;AAC9C,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,MAAM,QAAQ,yBAAyB;AAChD,SAASC,aAAa,QAAQ,gCAAgC;AAC9D,SAASC,QAAQ,QAAQ,2BAA2B;AACpD,SAASC,YAAY,QAAQ,8BAA8B;AAC3D,SACEC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,OAAO,QACF,6BAA6B;AACpC,SAASC,WAAW,QAAQ,aAAa;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,IAAI,GACR,2FAA2F;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAGvB,GAAG,0uBAqBLsB,IAAI,CAmBtB;;AAED;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,cAAc,gBAAG/B,UAAU,CAC/B,CAAAgC,IAAA,EAAyCC,GAAG;EAAA,IAAzCC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAEC,SAAS,GAAAH,IAAA,CAATG,SAAS;IAAEC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;IAAKC,IAAI,GAAAC,6BAAA,CAAAN,IAAA,EAAAO,SAAA;EAAA,oBACnCzC,KAAA,CAAA0C,aAAA,CAAChC,MAAM,EAAAiC,QAAA,KACDJ,IAAI;IACRJ,GAAG,EAAEA,GAAI;IACTS,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAC,WAAW;IACnBC,MAAM,EAAEV,IAAK;IACbC,SAAS,mBAAgBA,SAAS,SAAOA,SAAS,GAAK,EAAE,KACvDD,IAAI,GAAG,OAAO,GAAG,EAAE;EAClB,IAEFE,QACK,CAAC;AAAA,CAEb,CAAC;AAEDL,cAAc,CAACc,WAAW,GAAG,gBAAgB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAGxC,MAAM,CAACyB,cAAc,CAAC,CAAAgB,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,yKAa3ClB,YAAY,CACf;;AAED;AACA;AACA;;AAWA;AACA,MAAMmB,cAA2B,GAAG,CAClC;EACEC,EAAE,EAAE,aAAa;EACjBC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,SAAS;EAChBC,SAAS,EAAE;AACb,CAAC,EACD;EACEH,EAAE,EAAE,cAAc;EAClBC,IAAI,EAAE,cAAc;EACpBC,KAAK,EAAE,SAAS;EAChBC,SAAS,EAAE;AACb,CAAC,EACD;EAAEH,EAAE,EAAE,UAAU;EAAEC,IAAI,EAAE,UAAU;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC5E;EAAEH,EAAE,EAAE,SAAS;EAAEC,IAAI,EAAE,SAAS;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC1E;EAAEH,EAAE,EAAE,SAAS;EAAEC,IAAI,EAAE,SAAS;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC1E;EAAEH,EAAE,EAAE,MAAM;EAAEC,IAAI,EAAE,MAAM;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EACpE;EAAEH,EAAE,EAAE,MAAM;EAAEC,IAAI,EAAE,MAAM;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EACpE;EAAEH,EAAE,EAAE,UAAU;EAAEC,IAAI,EAAE,UAAU;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC5E;EACEH,EAAE,EAAE,eAAe;EACnBC,IAAI,EAAE,eAAe;EACrBC,KAAK,EAAE,SAAS;EAChBC,SAAS,EAAE;AACb,CAAC,EACD;EAAEH,EAAE,EAAE,MAAM;EAAEC,IAAI,EAAE,MAAM;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EACpE;EACEH,EAAE,EAAE,aAAa;EACjBC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,SAAS;EAChBC,SAAS,EAAE;AACb,CAAC,EACD;EAAEH,EAAE,EAAE,IAAI;EAAEC,IAAI,EAAE,IAAI;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAChE;EACEH,EAAE,EAAE,cAAc;EAClBC,IAAI,EAAE,cAAc;EACpBC,KAAK,EAAE,SAAS;EAChBC,SAAS,EAAE;AACb,CAAC,EACD;EAAEH,EAAE,EAAE,QAAQ;EAAEC,IAAI,EAAE,QAAQ;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EACxE;EACEH,EAAE,EAAE,aAAa;EACjBC,IAAI,EAAE,aAAa;EACnBC,KAAK,EAAE,SAAS;EAChBC,SAAS,EAAE;AACb,CAAC,EACD;EAAEH,EAAE,EAAE,OAAO;EAAEC,IAAI,EAAE,OAAO;EAAEC,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,CACvE;;AAED;AACA,MAAMC,gBAAgB,GAAG,CACvB;EAAEF,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC1C;EAAED,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC1C;EAAED,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,EAC1C;EAAED,KAAK,EAAE,SAAS;EAAEC,SAAS,EAAE;AAAU,CAAC,CAC3C;AAQD,MAAME,aAAa,gBAAGxD,aAAa,CAAqB;EACtDyD,MAAM,EAAEP,cAAc;EACtBQ,UAAU,EAAE,CAAC,CAAC;EACdC,QAAQ,EAAEA,CAAA,KAAM;AAClB,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAGC,KAAA,IAIV;EAAA,IAHlBxB,QAAQ,GAAAwB,KAAA,CAARxB,QAAQ;EAIR,MAAAyB,SAAA,GAA4BzD,QAAQ,CAAc6C,cAAc,CAAC;IAA1DO,MAAM,GAAAK,SAAA;IAAEC,SAAS,GAAAD,SAAA;EAExB,MAAMH,QAAQ,GAAGzD,WAAW,CAAEkD,IAAY,IAAa;IACrD,MAAMY,OAAO,GAAGZ,IAAI,CAACa,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACzC,MAAMf,EAAE,cAAYa,OAAO,CAACG,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAG;IACvEL,SAAS,CAAEM,IAAI,IAAK;MAClB,IAAIA,IAAI,CAACC,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAACpB,EAAE,KAAKA,EAAE,CAAC,EAAE;QACzC,OAAOkB,IAAI;MACb;MACA,MAAMG,OAAO,GAAGjB,gBAAgB,CAACc,IAAI,CAACI,MAAM,GAAGlB,gBAAgB,CAACkB,MAAM,CAAC;MACvE,OAAO,CAAC,GAAGJ,IAAI,EAAA3B,QAAA;QAAIS,EAAE;QAAEC,IAAI,EAAEY;MAAO,GAAKQ,OAAO,EAAG;IACrD,CAAC,CAAC;IACF,OAAOrB,EAAE;EACX,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMuB,KAAK,GAAGtE,OAAO,CACnB,OAAO;IACLqD,MAAM;IACNC,UAAU,EAAED,MAAM,CAACkB,MAAM,CACvB,CAACC,GAAG,EAAEL,KAAK,KAAA7B,QAAA,KAAWkC,GAAG;MAAE,CAACL,KAAK,CAACpB,EAAE,GAAGoB;IAAK,EAAG,EAC/C,CAAC,CACH,CAAC;IACDZ;EACF,CAAC,CAAC,EACF,CAACA,QAAQ,EAAEF,MAAM,CACnB,CAAC;EAED,oBACE1D,KAAA,CAAA0C,aAAA,CAACe,aAAa,CAACqB,QAAQ;IAACH,KAAK,EAAEA;EAAM,GAAErC,QAAiC,CAAC;AAE7E,CAAC;AAED,MAAMyC,aAAa,GAAGA,CAAA,KAA0B3E,UAAU,CAACqD,aAAa,CAAC;;AAEzE;AACA,MAAMuB,sBAAsB,GAAGxE,MAAM,CAACyE,IAAI,CAAAhC,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,8NAWzC;AAED,MAAMgC,gBAAgB,GAAG1E,MAAM,CAACyE,IAAI,CAAAhC,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,oIAchClB,YAAY,CACf;AAED,MAAMmD,gBAAgB,GAAG,CAAC;AAE1B,MAAMC,UAAU,GAAGC,KAAA,IAAuD;EAAA,IAApD3B,MAAM,GAAA2B,KAAA,CAAN3B,MAAM;EAC1B,MAAM4B,SAAS,GAAG5B,MAAM,CAACgB,MAAM,GAAG,CAAC;EACnC,IAAIa,KAAK,GAAG7B,MAAM;EAClB,IAAI8B,SAAS,GAAG,CAAC;EAEjB,IAAI9B,MAAM,CAACgB,MAAM,GAAGS,gBAAgB,EAAE;IACpCK,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAChC,MAAM,CAACgB,MAAM,GAAGS,gBAAgB,EAAE,EAAE,CAAC;IAC1DI,KAAK,GAAG7B,MAAM,CAACiC,KAAK,CAAC,CAAC,EAAER,gBAAgB,GAAG,CAAC,CAAC;EAC/C;EAEA,oBACEnF,KAAA,CAAA0C,aAAA,CAACwC,gBAAgB,QACdK,KAAK,CAACK,GAAG,CAAEpB,KAAK,IACfc,SAAS,gBACPtF,KAAA,CAAA0C,aAAA,CAAC5B,GAAG;IACF+E,GAAG,EAAErB,KAAK,CAACpB,EAAG;IACdE,KAAK,EAAEkB,KAAK,CAAClB,KAAM;IACnBwC,IAAI,EAAE,EAAG;IACT,gBAActB,KAAK,CAACnB;EAAK,CAC1B,CAAC,gBAEFrD,KAAA,CAAA0C,aAAA,CAAC9B,IAAI;IACHiF,GAAG,EAAErB,KAAK,CAACpB,EAAG;IACdoB,KAAK,EAAEA,KAAK,CAACnB,IAAK;IAClB0C,eAAe,EAAEvB,KAAK,CAAClB,KAAM;IAC7BA,KAAK,EAAC,SAAS;IACf0C,KAAK,EAAE;MAAEC,QAAQ,EAAE;IAAO,CAAE;IAC5BC,eAAe,EAAE;MAAErD,OAAO,EAAE,WAAW;MAAEsD,MAAM,EAAE;IAAO,CAAE;IAC1D,gBAAc3B,KAAK,CAACnB;EAAK,CAC1B,CAEL,CAAC,EACAmC,SAAS,GAAG,CAAC,gBACZxF,KAAA,CAAA0C,aAAA,CAAChB,KAAK;IAACyE,MAAM,EAAC,MAAM;IAAC9D,SAAS,EAAC;EAAY,GAAC,GACzC,EAACmD,SACG,CAAC,GACN,IACY,CAAC;AAEvB,CAAC;AAED,MAAMY,YAAY,gBAAGlG,UAAU,CAG7B,CAAAmG,KAAA,EAAsBlE,GAAG,KAAK;EAAA,IAA3BuB,MAAM,GAAA2C,KAAA,CAAN3C,MAAM;IAAKnB,IAAI,GAAAC,6BAAA,CAAA6D,KAAA,EAAAC,UAAA;EAClB,IAAI5C,MAAM,CAACgB,MAAM,KAAK,CAAC,EAAE;IACvB,oBACE1E,KAAA,CAAA0C,aAAA,CAACM,gBAAgB,EAAAL,QAAA,KACXJ,IAAI;MACRJ,GAAG,EAAEA,GAAI;MACTE,SAAS,EAAC,eAAe;MACzB,cAAW,YAAY;MACvB,gBAAa;IAAY,iBAEzBrC,KAAA,CAAA0C,aAAA,CAACsC,sBAAsB,qBACrBhF,KAAA,CAAA0C,aAAA,CAACd,QAAQ;MAACuE,MAAM,EAAC,MAAM;MAAC7C,KAAK,EAAC;IAAU,GAAC,OAE/B,CACY,CACR,CAAC;EAEvB;EAEA,oBACEtD,KAAA,CAAA0C,aAAA,CAACM,gBAAgB,EAAAL,QAAA,KAAKJ,IAAI;IAAEJ,GAAG,EAAEA,GAAI;IAAC,cAAW;EAAe,iBAC9DnC,KAAA,CAAA0C,aAAA,CAAC0C,UAAU;IAAC1B,MAAM,EAAEA;EAAO,CAAE,CACb,CAAC;AAEvB,CAAC,CAAC;AAEF0C,YAAY,CAACrD,WAAW,GAAG,cAAc;AAEzC,OAAO,MAAMwD,SAAS,GAAGC,KAAA,IAML;EAAA,IALlBC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;IAAAC,eAAA,GAAAF,KAAA,CACRG,SAAS;IAATA,SAAS,GAAAD,eAAA,cAAG,KAAK,GAAAA,eAAA;EAKjB,MAAAE,cAAA,GAAkD7B,aAAa,CAAC,CAAC;IAAjD8B,OAAO,GAAAD,cAAA,CAAflD,MAAM;IAAWC,UAAU,GAAAiD,cAAA,CAAVjD,UAAU;IAAEC,QAAQ,GAAAgD,cAAA,CAARhD,QAAQ;EAC7C,MAAAkD,UAAA,GAAgCxG,QAAQ,CAAWmG,QAAQ,WAARA,QAAQ,GAAI,EAAE,CAAC;IAA3DM,QAAQ,GAAAD,UAAA;IAAEE,WAAW,GAAAF,UAAA;;EAE5B;EACA,MAAMG,cAAc,GAAG5G,OAAO,CAC5B,MACE0G,QAAQ,CACLnB,GAAG,CAAExC,EAAE,IAAKO,UAAU,CAACP,EAAE,CAAC,CAAC,CAC3B8D,MAAM,CAAE1C,KAAK,IAAyB2C,OAAO,CAAC3C,KAAK,CAAC,CAAC,CACrD4C,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAAChE,IAAI,CAACkE,aAAa,CAACD,CAAC,CAACjE,IAAI,CAAC,CAAC,EACjD,CAACM,UAAU,EAAEoD,QAAQ,CACvB,CAAC;EAED,MAAMS,OAAO,GAAGnH,OAAO,CACrB,MACEwG,OAAO,CAACjB,GAAG,CAAEpB,KAAK,KAAM;IACtBpB,EAAE,EAAEoB,KAAK,CAACpB,EAAE;IACZC,IAAI,EAAEmB,KAAK,CAACnB,IAAI;IAChBC,KAAK,EAAEkB,KAAK,CAAClB,KAAK;IAClBC,SAAS,EAAEiB,KAAK,CAACjB;EACnB,CAAC,CAAC,CAAC,EACL,CAACsD,OAAO,CACV,CAAC;EAED,MAAMY,YAAY,GAAGtH,WAAW,CAC7BwE,KAA4C,IAAK;IAChDqC,WAAW,CACTU,KAAK,CAACC,OAAO,CAAChD,KAAK,CAAC,GAChBA,KAAK,CAACiB,GAAG,CAACgC,MAAM,CAAC,GACjB,CAACA,MAAM,CAACjD,KAAK,CAAC,CAAC,CAACuC,MAAM,CAACC,OAAO,CACpC,CAAC;EACH,CAAC,EACD,EACF,CAAC;EAED,MAAMU,YAAY,GAAG1H,WAAW,CAC7BkD,IAAa,IAAK;IACjB,IAAI,CAACA,IAAI,IAAI,CAACA,IAAI,CAACa,IAAI,CAAC,CAAC,EAAE;MACzB;IACF;IACA,MAAMd,EAAE,GAAGQ,QAAQ,CAACP,IAAI,CAAC;IACzB2D,WAAW,CAAE1C,IAAI,IAAMA,IAAI,CAACwD,QAAQ,CAAC1E,EAAE,CAAC,GAAGkB,IAAI,GAAG,CAAC,GAAGA,IAAI,EAAElB,EAAE,CAAE,CAAC;EACnE,CAAC,EACD,CAACQ,QAAQ,CACX,CAAC;;EAED;EACA,IAAI+C,SAAS,EAAE;IACb,oBACE3G,KAAA,CAAA0C,aAAA,CAACqF,kBAAkB;MAAC1F,SAAS,EAAC;IAAe,GAC1C4E,cAAc,CAACvC,MAAM,GAAG,CAAC,gBACxB1E,KAAA,CAAA0C,aAAA,CAAC0C,UAAU;MAAC1B,MAAM,EAAEuD;IAAe,CAAE,CAAC,GACpC,IACc,CAAC;EAEzB;EAEA,oBACEjH,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAe,gBAC5BrC,KAAA,CAAA0C,aAAA,CAACpB,MAAM;IACLsB,IAAI,EAAC,UAAU;IACf4E,OAAO,EAAEA,OAAQ;IACjBT,QAAQ,EAAEA,QAAS;IACnBiB,QAAQ,EAAEP,YAAa;IACvBQ,UAAU,EAAC,SAAS;IACpBC,WAAW,EAAEL,YAAa;IAC1BM,aAAa,EAAE,GAAI;IACnBC,QAAQ,EAAC,YAAY;IACrBC,MAAM,eAAErI,KAAA,CAAA0C,aAAA,CAAC0D,YAAY;MAAC1C,MAAM,EAAEuD;IAAe,CAAE;EAAE,CAClD,CACE,CAAC;AAEV,CAAC;;AAED;AACA;AACA;;AAEA;AACA,MAAMqB,WAAW,GAAG,aAAa;;AAEjC;AACA,MAAMC,SAAS,GAAGA,CAAA,KAAchI,MAAM,CAACiI,GAAG,CAAC,CAAC,CAACC,OAAO,CAAC,KAAK,CAAC,CAACC,IAAI,CAAC,CAAC;;AAElE;AACA,OAAO,MAAMC,SAAS,GAAIC,MAAc,IACtCrI,MAAM,CAACiI,GAAG,CAAC,CAAC,CAACC,OAAO,CAAC,KAAK,CAAC,CAACI,GAAG,CAACD,MAAM,EAAE,MAAM,CAAC,CAACF,IAAI,CAAC,CAAC;;AAExD;AACA,OAAO,MAAMI,eAAe,GAAGA,CAC7BC,IAAa,EACbC,EAAW,KACY;EACvB,IAAID,IAAI,KAAKE,SAAS,IAAIF,IAAI,KAAK,IAAI,EAAE;IACvC,OAAOE,SAAS;EAClB;EACA,MAAMC,KAAK,GAAG3I,MAAM,CAACmI,IAAI,CAACK,IAAI,CAAC,CAACP,GAAG,CAAC,CAAC;EACrC,MAAMW,GAAG,GAAG5I,MAAM,CAACmI,IAAI,CAACM,EAAE,WAAFA,EAAE,GAAID,IAAI,CAAC,CAACP,GAAG,CAAC,CAAC;EACzC,MAAMY,WAAW,GAAGd,WAAW,CAACjE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAACH,IAAI,CAAC,CAAC;EAC/D,MAAMmF,mBAAmB,GAAGD,WAAW,CAAC/E,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAACH,IAAI,CAAC,CAAC;EAEtE,IAAI6E,IAAI,KAAKC,EAAE,IAAIA,EAAE,KAAKC,SAAS,EAAE;IACnC,OAAOC,KAAK,CAACI,MAAM,CAACF,WAAW,CAAC;EAClC;EACA,IAAIF,KAAK,CAACK,IAAI,CAAC,CAAC,KAAKJ,GAAG,CAACI,IAAI,CAAC,CAAC,IAAIL,KAAK,CAACM,KAAK,CAAC,CAAC,KAAKL,GAAG,CAACK,KAAK,CAAC,CAAC,EAAE;IAChE,OAAUN,KAAK,CAACI,MAAM,CAACF,WAAW,CAAC,WAAMD,GAAG,CAACG,MAAM,CAACD,mBAAmB,CAAC;EAC1E;EACA,OAAUH,KAAK,CAACI,MAAM,CAACF,WAAW,CAAC,WAAMD,GAAG,CAACG,MAAM,CAACF,WAAW,CAAC;AAClE,CAAC;;AAED;AACA,MAAMK,cAAc,GAAI9E,KAAc,IACpCA,KAAK,GAAGpE,MAAM,CAACmI,IAAI,CAAC/D,KAAK,CAAC,CAAC6D,GAAG,CAAC,CAAC,CAACc,MAAM,CAAChB,WAAW,CAAC,GAAG,EAAE;AAE3D,OAAO,MAAMoB,SAAS,GAAGA,CAACC,KAAc,EAAEhD,SAAmB,KAC3DQ,OAAO,CAACwC,KAAK,IAAI,CAAChD,SAAS,IAAIgD,KAAK,GAAGpB,SAAS,CAAC,CAAC,CAAC;AAErD,MAAMqB,eAAe,GAAGpJ,MAAM,CAACyE,IAAI,CAAAhC,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,6CAClBnB,IAAI,CAEpB;;AAED;AACA;AACA,MAAMgG,kBAAkB,GAAGvH,MAAM,CAACqJ,GAAG,CAAA5G,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,+BAGjClB,YAAY,CACf;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM8H,gBAAgB,GAAGtJ,MAAM,CAACqJ,GAAG,CAAA5G,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,gCAKlC;AAQD,MAAM6G,WAAW,gBAAG7J,UAAU,CAC5B,CAAA8J,KAAA,EAAuC7H,GAAG;EAAA,IAAvCwC,KAAK,GAAAqF,KAAA,CAALrF,KAAK;IAAEsF,OAAO,GAAAD,KAAA,CAAPC,OAAO;IAAEC,OAAO,GAAAF,KAAA,CAAPE,OAAO;IAAK3H,IAAI,GAAAC,6BAAA,CAAAwH,KAAA,EAAAG,UAAA;EAAA,oBACjCnK,KAAA,CAAA0C,aAAA,CAACM,gBAAgB,EAAAL,QAAA,KACXJ,IAAI;IACRJ,GAAG,EAAEA,GAAI;IACTE,SAAS,EAAEsC,KAAK,GAAG,yBAAyB,GAAG,eAAgB;IAC/D,cAAYA,KAAK,GAAG,cAAc,GAAG,UAAW;IAChD,gBAAcsF;EAAQ,IAErBtF,KAAK,gBACJ3E,KAAA,CAAA0C,aAAA,CAACkH,eAAe,qBACd5J,KAAA,CAAA0C,aAAA,CAACf,QAAQ;IAACwE,MAAM,EAAC,MAAM;IAAC7C,KAAK,EAAE4G,OAAO,GAAG,OAAO,GAAG;EAAY,GAC5DvF,KACO,CACK,CAAC,gBAElB3E,KAAA,CAAA0C,aAAA,CAAC3B,YAAY,MAAE,CAED,CAAC;AAAA,CAEvB,CAAC;AAEDgJ,WAAW,CAAChH,WAAW,GAAG,aAAa;AAEvC,OAAO,MAAMqH,QAAQ,GAAGC,KAAA,IAQJ;EAAA,IAAAC,WAAA,EAAAC,UAAA;EAAA,IAPlBC,OAAO,GAAAH,KAAA,CAAPG,OAAO;IACPb,KAAK,GAAAU,KAAA,CAALV,KAAK;IAAAc,eAAA,GAAAJ,KAAA,CACL1D,SAAS;IAATA,SAAS,GAAA8D,eAAA,cAAG,KAAK,GAAAA,eAAA;EAMjB,MAAAC,UAAA,GAA0BpK,QAAQ,CAAiC;MACjEyI,IAAI,EAAEyB,OAAO;MACbxB,EAAE,EAAEW;IACN,CAAC,CAAC;IAHKgB,KAAK,GAAAD,UAAA;IAAEE,QAAQ,GAAAF,UAAA;EAItB;AACF;AACA;AACA;AACA;AACA;EACE,MAAAG,UAAA,GAA0CvK,QAAQ,CAAC,KAAK,CAAC;IAAlDwK,aAAa,GAAAD,UAAA;IAAEE,gBAAgB,GAAAF,UAAA;;EAEtC;EACA,MAAAG,QAAA,GAAoC3K,OAAO,CAAC,MAAM;MAAA,IAAA4K,SAAA;MAChD,MAAMC,SAAS,GAAGpC,eAAe,CAAC6B,KAAK,CAAC5B,IAAI,EAAE4B,KAAK,CAAC3B,EAAE,CAAC;MACvD,IAAImC,IAAI,GAAG,UAAU;MACrB,IAAIR,KAAK,CAAC5B,IAAI,EAAE;QACdoC,IAAI,GACF,CAACR,KAAK,CAAC3B,EAAE,IAAI2B,KAAK,CAAC3B,EAAE,KAAK2B,KAAK,CAAC5B,IAAI,GAChCU,cAAc,CAACkB,KAAK,CAAC5B,IAAI,CAAC,GACvBU,cAAc,CAACkB,KAAK,CAAC5B,IAAI,CAAC,WAAMU,cAAc,CAACkB,KAAK,CAAC3B,EAAE,CAAG;MACrE;MACA,OAAO;QACLrE,KAAK,EAAEuG,SAAS;QAChBhB,OAAO,EAAER,SAAS,EAAAuB,SAAA,GAACN,KAAK,CAAC3B,EAAE,YAAAiC,SAAA,GAAIN,KAAK,CAAC5B,IAAI,EAAEpC,SAAS,CAAC;QACrDsD,OAAO,EAAEkB;MACX,CAAC;IACH,CAAC,EAAE,CAACxE,SAAS,EAAEgE,KAAK,CAAC5B,IAAI,EAAE4B,KAAK,CAAC3B,EAAE,CAAC,CAAC;IAd7BrE,KAAK,GAAAqG,QAAA,CAALrG,KAAK;IAAEuF,OAAO,GAAAc,QAAA,CAAPd,OAAO;IAAED,OAAO,GAAAe,QAAA,CAAPf,OAAO;EAgB/B,MAAMmB,UAAU,GAAGjL,WAAW,CAAEkL,KAA0B,IAAK;IAC7D,IAAI,CAACA,KAAK,IAAIA,KAAK,CAACtC,IAAI,KAAK,IAAI,IAAIsC,KAAK,CAACtC,IAAI,KAAKE,SAAS,EAAE;MAC7D2B,QAAQ,CAAC,CAAC,CAAC,CAAC;MACZ;IACF;IACAA,QAAQ,CAAC;MACP7B,IAAI,EAAEuC,MAAM,CAACD,KAAK,CAACtC,IAAI,CAAC;MACxBC,EAAE,EAAEqC,KAAK,CAACrC,EAAE,GAAGsC,MAAM,CAACD,KAAK,CAACrC,EAAE,CAAC,GAAGsC,MAAM,CAACD,KAAK,CAACtC,IAAI;IACrD,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMwC,WAAW,GAAGpL,WAAW,CAAC,MAAMyK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAEvD,MAAMY,oBAAoB,GAAGrL,WAAW,CAAEsL,IAAa,IAAK;IAC1D,IAAI,CAACA,IAAI,EAAE;MACTV,gBAAgB,CAAC,KAAK,CAAC;IACzB;EACF,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,IAAIpE,SAAS,EAAE;IACb,oBACE3G,KAAA,CAAA0C,aAAA,CAACqF,kBAAkB;MAAC1F,SAAS,EAAC;IAAc,GACzCsC,KAAK,gBACJ3E,KAAA,CAAA0C,aAAA,CAACkH,eAAe;MAAC,gBAAcK;IAAQ,gBACrCjK,KAAA,CAAA0C,aAAA,CAACf,QAAQ;MAACwE,MAAM,EAAC,MAAM;MAAC7C,KAAK,EAAE4G,OAAO,GAAG,OAAO,GAAG;IAAY,GAC5DvF,KACO,CACK,CAAC,GAChB,IACc,CAAC;EAEzB;EAEA,IAAI,CAACmG,aAAa,EAAE;IAClB,oBACE9K,KAAA,CAAA0C,aAAA;MAAKL,SAAS,EAAC;IAAc,gBAC3BrC,KAAA,CAAA0C,aAAA,CAACqH,WAAW;MACVpF,KAAK,EAAEA,KAAM;MACbsF,OAAO,EAAEA,OAAQ;MACjBC,OAAO,EAAEA,OAAQ;MACjBwB,OAAO,EAAEA,CAAA,KAAMX,gBAAgB,CAAC,IAAI;IAAE,CACvC,CACE,CAAC;EAEV;EAEA,oBACE/K,KAAA,CAAA0C,aAAA,CAACoH,gBAAgB;IAACzH,SAAS,EAAC;EAAc,gBACxCrC,KAAA,CAAA0C,aAAA,CAAC7B,UAAU;IACTuB,IAAI;IACJuJ,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE,KAAM;IACfC,QAAQ,EAAE,GAAI;IACdC,cAAc,EAAE,CAAE;IAClB1D,QAAQ,EAAC,YAAY;IACrBrB,QAAQ,EAAE;MAAEgC,IAAI,GAAAuB,WAAA,GAAEK,KAAK,CAAC5B,IAAI,YAAAuB,WAAA,GAAI,IAAI;MAAEtB,EAAE,GAAAuB,UAAA,GAAEI,KAAK,CAAC3B,EAAE,YAAAuB,UAAA,GAAI;IAAK,CAAE;IAC7DwB,MAAM,EAAEX,UAAW;IACnBY,OAAO,EAAET,WAAY;IACrBU,gBAAgB,EAAET,oBAAqB;IACvCnD,MAAM,eACJrI,KAAA,CAAA0C,aAAA,CAACqH,WAAW;MAACpF,KAAK,EAAEA,KAAM;MAACsF,OAAO,EAAEA,OAAQ;MAACC,OAAO,EAAEA;IAAQ,CAAE;EACjE,CACF,CACe,CAAC;AAEvB,CAAC;;AAED;AACA;AACA;;AAEA;AACA,MAAMgC,wBAAwB,GAAGA,CAC/BC,OAAe,EACfC,SAAiB,KACC;EAClB,IAAIA,SAAS,GAAG,CAAC,EAAE;IACjB,OAAOD,OAAO,GAAG,CAAC,GAAG1G,IAAI,CAAC4G,KAAK,CAAEF,OAAO,GAAGC,SAAS,GAAI,GAAG,CAAC,GAAG,CAAC;EAClE;EACA,OAAO,IAAI;AACb,CAAC;;AAED;AACA,MAAME,yBAAyB,GAAGA,CAChCH,OAAe,EACfC,SAAiB,KAEjBA,SAAS,GAAG,CAAC,GACNtK,WAAW,CAACqK,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,SAAIrK,WAAW,CAC3DsK,SAAS,EACT,KAAK,EACL,KAAK,EACL,OACF,CAAC,GACDtK,WAAW,CAACqK,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;;AAEjD;AACA,MAAMI,aAAa,GAAIC,OAAe,IAAa;EACjD,IAAIA,OAAO,IAAI,GAAG,EAAE;IAClB,OAAO,kBAAkB;EAC3B;EACA,IAAIA,OAAO,IAAI,EAAE,EAAE;IACjB,OAAO,gBAAgB;EACzB;EACA,OAAO,2BAA2B;AACpC,CAAC;AAED,MAAMC,eAAe,GAAGjM,MAAM,CAACyE,IAAI,CAAAhC,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,mJAGlBnB,IAAI,CAWpB;AAED,MAAM2K,SAAS,GAAGC,KAAA,IAME;EAAA,IALlBR,OAAO,GAAAQ,KAAA,CAAPR,OAAO;IACPC,SAAS,GAAAO,KAAA,CAATP,SAAS;EAKT,MAAMI,OAAO,GAAGN,wBAAwB,CAACC,OAAO,EAAEC,SAAS,CAAC;EAE5D,oBACEpM,KAAA,CAAA0C,aAAA,CAAC+J,eAAe,QACbL,SAAS,GAAG,CAAC,gBACZpM,KAAA,CAAA0C,aAAA,CAACrB,WAAW;IACVgB,SAAS,EAAC,UAAU;IACpBuK,MAAM,EAAE,EAAG;IACXC,QAAQ,EAAEL,OAAO,WAAPA,OAAO,GAAI,CAAE;IACvBD,aAAa,EAAEA,aAAa,CAACC,OAAO,WAAPA,OAAO,GAAI,CAAC,CAAE;IAC3CzG,eAAe,EAAC;EAAwB,CACzC,CAAC,GACA,IAAI,eACR/F,KAAA,CAAA0C,aAAA,CAACf,QAAQ;IAACwE,MAAM,EAAC;EAAM,GACpBmG,yBAAyB,CAACH,OAAO,EAAEC,SAAS,CACrC,CACK,CAAC;AAEtB,CAAC;AAED,MAAMU,WAAW,GAAGC,KAAA,IAQA;EAAA,IAPlBZ,OAAO,GAAAY,KAAA,CAAPZ,OAAO;IACPC,SAAS,GAAAW,KAAA,CAATX,SAAS;IACTV,OAAO,GAAAqB,KAAA,CAAPrB,OAAO;EAMP,MAAMsB,OAAO,GAAGb,OAAO,GAAG,CAAC,IAAIC,SAAS,GAAG,CAAC;EAE5C,oBACEpM,KAAA,CAAA0C,aAAA,CAACM,gBAAgB;IACf0I,OAAO,EAAEA,OAAQ;IACjBrJ,SAAS,EAAE2K,OAAO,GAAG,oBAAoB,GAAG,eAAgB;IAC5D,cAAYA,OAAO,GAAG,WAAW,GAAG,UAAW;IAC/C,gBAAcA,OAAO,GAAG,WAAW,GAAG;EAAW,GAEhDA,OAAO,gBACNhN,KAAA,CAAA0C,aAAA,CAACgK,SAAS;IAACP,OAAO,EAAEA,OAAQ;IAACC,SAAS,EAAEA;EAAU,CAAE,CAAC,gBAErDpM,KAAA,CAAA0C,aAAA,CAAC1B,YAAY,MAAE,CAED,CAAC;AAEvB,CAAC;AAkBD,OAAO,MAAMiM,QAAQ,GAAGC,KAAA,IAcJ;EAAA,IAblBC,QAAQ,GAAAD,KAAA,CAARC,QAAQ;IAAAC,aAAA,GAAAF,KAAA,CACRf,OAAO;IAAPA,OAAO,GAAAiB,aAAA,cAAG,CAAC,GAAAA,aAAA;IAAAC,eAAA,GAAAH,KAAA,CACXd,SAAS;IAATA,SAAS,GAAAiB,eAAA,cAAG,CAAC,GAAAA,eAAA;IACbC,KAAK,GAAAJ,KAAA,CAALI,KAAK;IACLC,aAAa,GAAAL,KAAA,CAAbK,aAAa;IAAAC,eAAA,GAAAN,KAAA,CACbvG,SAAS;IAATA,SAAS,GAAA6G,eAAA,cAAG,KAAK,GAAAA,eAAA;EASjB,MAAAC,UAAA,GAAwBnN,QAAQ,CAAC,KAAK,CAAC;IAAhC8B,IAAI,GAAAqL,UAAA;IAAEC,OAAO,GAAAD,UAAA;EACpB,MAAAE,UAAA,GAA8BrN,QAAQ,CAAe;MAAA,IAAAsN,gBAAA,EAAAC,WAAA;MAAA,OACnD1B,OAAO,GAAG,CAAC,GACP,CACE;QACE/I,EAAE,EAAE,CAAC;QACL0K,IAAI,EAAEnF,SAAS,CAAC,CAAC,CAAC,CAAC;QACnBoF,MAAM,EAAER,aAAa;QACrBS,QAAQ,GAAAJ,gBAAA,IAAAC,WAAA,GACNP,KAAK,CAACW,IAAI,CAAEC,IAAI,IAAKA,IAAI,CAAC9K,EAAE,KAAKmK,aAAa,CAAC,qBAA/CM,WAAA,CAAiDxK,IAAI,YAAAuK,gBAAA,GAAI,KAAK;QAChEO,OAAO,EAAE,QAAQ;QACjBC,KAAK,EAAEjC,OAAO;QACdkC,QAAQ,EAAE;MACZ,CAAC,CACF,GACD,EAAE;IAAA,CACR,CAAC;IAfMC,OAAO,GAAAX,UAAA;IAAEY,UAAU,GAAAZ,UAAA;EAiB1B,MAAMa,KAAK,GAAGnO,OAAO,CACnB,MAAMiO,OAAO,CAAC1J,MAAM,CAAC,CAAC6J,GAAG,EAAEC,MAAM,KAAKD,GAAG,GAAGC,MAAM,CAACN,KAAK,EAAE,CAAC,CAAC,EAC5D,CAACE,OAAO,CACV,CAAC;EAED,MAAMK,SAAS,GAAGxO,WAAW,CAAEuO,MAA8B,IAAK;IAChEH,UAAU,CAAEjK,IAAI,IAAK,CAAA3B,QAAA,KAAM+L,MAAM;MAAEtL,EAAE,EAAEkB,IAAI,CAACI,MAAM,GAAG;IAAC,IAAI,GAAGJ,IAAI,CAAC,CAAC;IACnEoJ,OAAO,CAAC,KAAK,CAAC;EAChB,CAAC,EAAE,EAAE,CAAC;;EAEN;AACF;EACE,IAAI/G,SAAS,EAAE;IACb,oBACE3G,KAAA,CAAA0C,aAAA,CAACqF,kBAAkB;MAAC1F,SAAS,EAAC;IAAc,GACzCmM,KAAK,GAAG,CAAC,IAAIpC,SAAS,GAAG,CAAC,gBACzBpM,KAAA,CAAA0C,aAAA,CAACgK,SAAS;MAACP,OAAO,EAAEqC,KAAM;MAACpC,SAAS,EAAEA;IAAU,CAAE,CAAC,GACjD,IACc,CAAC;EAEzB;EAEA,oBACEpM,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAc,gBAC3BrC,KAAA,CAAA0C,aAAA,CAACoK,WAAW;IACVX,OAAO,EAAEqC,KAAM;IACfpC,SAAS,EAAEA,SAAU;IACrBV,OAAO,EAAEA,CAAA,KAAMgC,OAAO,CAAC,IAAI;EAAE,CAC9B,CAAC,EACDtL,IAAI,gBACHpC,KAAA,CAAA0C,aAAA,CAACkM,gBAAgB;IACfxM,IAAI,EAAEA,IAAK;IACX+K,QAAQ,EAAEA,QAAS;IACnBG,KAAK,EAAEA,KAAM;IACbC,aAAa,EAAEA,aAAc;IAC7Be,OAAO,EAAEA,OAAQ;IACjBE,KAAK,EAAEA,KAAM;IACbK,QAAQ,EAAEF,SAAU;IACpBG,OAAO,EAAEA,CAAA,KAAMpB,OAAO,CAAC,KAAK;EAAE,CAC/B,CAAC,GACA,IACD,CAAC;AAEV,CAAC;;AAED;AACA;AACA;;AAEA,MAAMqB,SAAS,GAAG,CAChB;EAAE3L,EAAE,EAAE,QAAQ;EAAEC,IAAI,EAAE;AAAS,CAAC,EAChC;EAAED,EAAE,EAAE,aAAa;EAAEC,IAAI,EAAE;AAAc,CAAC,EAC1C;EAAED,EAAE,EAAE,QAAQ;EAAEC,IAAI,EAAE;AAAS,CAAC,EAChC;EAAED,EAAE,EAAE,YAAY;EAAEC,IAAI,EAAE;AAAa,CAAC,EACxC;EAAED,EAAE,EAAE,IAAI;EAAEC,IAAI,EAAE;AAAK,CAAC,CACzB;;AAED;AACA;AACA,MAAM2L,qBAAqB,GAAGxO,MAAM,CAACqJ,GAAG,CAAA5G,UAAA;EAAAF,WAAA;EAAAG,WAAA;AAAA,+1EAavBnB,IAAI,EA4GFA,IAAI,CAyEtB;AAED,MAAM6M,gBAAgB,GAAGK,KAAA,IAkBL;EAAA,IAjBlB7M,IAAI,GAAA6M,KAAA,CAAJ7M,IAAI;IACJ+K,QAAQ,GAAA8B,KAAA,CAAR9B,QAAQ;IACRG,KAAK,GAAA2B,KAAA,CAAL3B,KAAK;IACLC,aAAa,GAAA0B,KAAA,CAAb1B,aAAa;IACbe,OAAO,GAAAW,KAAA,CAAPX,OAAO;IACPE,KAAK,GAAAS,KAAA,CAALT,KAAK;IACLK,QAAQ,GAAAI,KAAA,CAARJ,QAAQ;IACRC,OAAO,GAAAG,KAAA,CAAPH,OAAO;EAWP,MAAAI,UAAA,GAA0B5O,QAAQ,CAAC,EAAE,CAAC;IAA/BqE,KAAK,GAAAuK,UAAA;IAAEC,QAAQ,GAAAD,UAAA;EACtB,MAAAE,UAAA,GAAwB9O,QAAQ,CAASiI,SAAS,CAAC,CAAC,CAAC;IAA9CuF,IAAI,GAAAsB,UAAA;IAAEC,OAAO,GAAAD,UAAA;EACpB,MAAAE,UAAA,GAA4BhP,QAAQ,CAASiN,aAAa,CAAC;IAApDQ,MAAM,GAAAuB,UAAA;IAAEC,SAAS,GAAAD,UAAA;EACxB,MAAAE,UAAA,GAAkClP,QAAQ,CAAS,QAAQ,CAAC;IAArDmP,SAAS,GAAAD,UAAA;IAAEE,YAAY,GAAAF,UAAA;EAC9B,MAAAG,UAAA,GAAgCrP,QAAQ,CAAC,KAAK,CAAC;IAAxC+N,QAAQ,GAAAsB,UAAA;IAAEC,WAAW,GAAAD,UAAA;EAC5B,MAAAE,WAAA,GAA8CvP,QAAQ,CAAC,IAAI,CAAC;IAArDwP,eAAe,GAAAD,WAAA;IAAEE,kBAAkB,GAAAF,WAAA;EAC1C,MAAAG,WAAA,GAAsC1P,QAAQ,CAAC,EAAE,CAAC;IAA3C2P,WAAW,GAAAD,WAAA;IAAEE,cAAc,GAAAF,WAAA;EAClC,MAAAG,WAAA,GAAsC7P,QAAQ,CAAC,KAAK,CAAC;IAA9C8P,WAAW,GAAAD,WAAA;IAAEE,cAAc,GAAAF,WAAA;EAElC,MAAMjC,IAAI,GAAGZ,KAAK,CAACW,IAAI,CAAEqC,IAAI,IAAKA,IAAI,CAAClN,EAAE,KAAK2K,MAAM,CAAC;EACrD,MAAMI,OAAO,GAAGY,SAAS,CAACd,IAAI,CAAEqC,IAAI,IAAKA,IAAI,CAAClN,EAAE,KAAKqM,SAAS,CAAC;;EAE/D;EACA,MAAMrB,KAAK,GAAG/N,OAAO,CAAC,MAAM;IAC1B,MAAM4D,OAAO,GAAGU,KAAK,CAACT,IAAI,CAAC,CAAC;IAC5B,IAAI,CAACD,OAAO,EAAE;MACZ,OAAO,CAAC;IACV;IACA,IAAIA,OAAO,CAAC6D,QAAQ,CAAC,GAAG,CAAC,EAAE;MACzB,MAAAyI,cAAA,GAAetM,OAAO,CAACuM,KAAK,CAAC,GAAG,CAAC;QAA1BC,CAAC,GAAAF,cAAA;QAAEG,CAAC,GAAAH,cAAA;MACX,OAAOjF,MAAM,CAACmF,CAAC,IAAI,CAAC,CAAC,GAAGnF,MAAM,CAACoF,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;IAC7C;IACA,OAAOpF,MAAM,CAACrH,OAAO,CAAC,IAAI,CAAC;EAC7B,CAAC,EAAE,CAACU,KAAK,CAAC,CAAC;EAEX,MAAMgM,YAAY,GAAGxQ,WAAW,CAAC,MAAM;IAAA,IAAAyQ,UAAA,EAAAC,aAAA;IACrChC,QAAQ,CAAC;MACPf,IAAI;MACJC,MAAM;MACNC,QAAQ,GAAA4C,UAAA,GAAE1C,IAAI,oBAAJA,IAAI,CAAE7K,IAAI,YAAAuN,UAAA,GAAI,EAAE;MAC1BzC,OAAO,GAAA0C,aAAA,GAAE1C,OAAO,oBAAPA,OAAO,CAAE9K,IAAI,YAAAwN,aAAA,GAAI,EAAE;MAC5BzC,KAAK;MACLC,QAAQ;MACR4B;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC5B,QAAQ,EAAEP,IAAI,EAAEmC,WAAW,EAAE7B,KAAK,EAAED,OAAO,EAAEU,QAAQ,EAAEX,IAAI,EAAEH,MAAM,CAAC,CAAC;EAEzE,oBACE/N,KAAA,CAAA0C,aAAA,CAACtB,KAAK;IAACgB,IAAI,EAAEA,IAAK;IAAC0M,OAAO,EAAEA;EAAQ,gBAClC9O,KAAA,CAAA0C,aAAA,CAACjB,YAAY;IAACqP,EAAE,EAAE1O;EAAK,gBACrBpC,KAAA,CAAA0C,aAAA,CAACsM,qBAAqB;IAAC+B,IAAI,EAAC,QAAQ;IAAC,cAAW;EAAiB,gBAC/D/Q,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAY,gBACzBrC,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAW,GAAE8K,QAAe,CAAC,eAC7CnN,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAU,gBACxBrC,KAAA,CAAA0C,aAAA,CAAC7B,UAAU;IACT8K,IAAI,EAAC,OAAO;IACZqF,QAAQ;IACRlF,cAAc,EAAE,CAAE;IAClB1D,QAAQ,EAAC,YAAY;IACrBrB,QAAQ,EAAE;MAAEgC,IAAI,EAAE+E,IAAI;MAAE9E,EAAE,EAAE8E;IAAK,CAAE;IACnC/B,MAAM,EAAGV,KAAK,IACZA,KAAK,YAALA,KAAK,CAAEtC,IAAI,GAAGsG,OAAO,CAAC/D,MAAM,CAACD,KAAK,CAACtC,IAAI,CAAC,CAAC,GAAGE,SAC7C;IACDZ,MAAM,eACJrI,KAAA,CAAA0C,aAAA,CAACnB,aAAa,QAAEuH,eAAe,CAACgF,IAAI,EAAEA,IAAI,CAAiB;EAC5D,CACF,CACG,CACH,CAAC,eAEN9N,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAa,CAAE,CAAC,eAE/BrC,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAU,gBACvBrC,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAU,gBACvBrC,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAY,gBACzBrC,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAW,gBACzBrC,KAAA,CAAA0C,aAAA,CAACxB,UAAU;IACT+P,SAAS;IACTC,eAAe;IACfpL,IAAI,EAAC,SAAS;IACdqL,WAAW,EAAC,OAAO;IACnBxM,KAAK,EAAEA,KAAM;IACbqD,QAAQ,EAAEmH;EAAS,CACpB,CACG,CAAC,eAEPnP,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAW,gBACzBrC,KAAA,CAAA0C,aAAA,CAACvB,KAAK;IAAC2E,IAAI,EAAC;EAAO,GAAC,MAAW,CAAC,eAChC9F,KAAA,CAAA0C,aAAA,CAACpB,MAAM;IACLkG,OAAO,EAAE8F,KAAM;IACfvG,QAAQ,EAAEgH,MAAO;IACjBqD,cAAc;IACdpJ,QAAQ,EAAGyD,IAAI,IAAK8D,SAAS,CAAC3H,MAAM,CAAC6D,IAAI,CAAC,CAAE;IAC5CpD,MAAM,eACJrI,KAAA,CAAA0C,aAAA,CAACnB,aAAa;MAAC6B,EAAE,EAAC;IAAU,GAAE8K,IAAI,oBAAJA,IAAI,CAAE7K,IAAoB;EACzD,CACF,CACG,CAAC,eAEPrD,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAW,gBACzBrC,KAAA,CAAA0C,aAAA,CAACvB,KAAK;IAAC2E,IAAI,EAAC;EAAO,GAAC,UAAe,CAAC,eACpC9F,KAAA,CAAA0C,aAAA,CAACpB,MAAM;IACLkG,OAAO,EAAEuH,SAAU;IACnBhI,QAAQ,EAAE0I,SAAU;IACpB2B,cAAc;IACdpJ,QAAQ,EAAGyD,IAAI,IAAKiE,YAAY,CAAC9H,MAAM,CAAC6D,IAAI,CAAC,CAAE;IAC/CpD,MAAM,eACJrI,KAAA,CAAA0C,aAAA,CAACnB,aAAa;MAAC6B,EAAE,EAAC;IAAc,GAC7B+K,OAAO,oBAAPA,OAAO,CAAE9K,IACG;EAChB,CACF,CACG,CAAC,eAEPrD,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAc,gBAC5BrC,KAAA,CAAA0C,aAAA,CAAC/B,QAAQ;IACPyC,EAAE,EAAC,cAAc;IACjBiO,OAAO,EAAEhD,QAAS;IAClBrG,QAAQ,EAAEA,CAAA,KAAM4H,WAAW,CAAEtL,IAAI,IAAK,CAACA,IAAI;EAAE,CAC9C,CAAC,eACFtE,KAAA,CAAA0C,aAAA,CAACvB,KAAK;IAACmQ,OAAO,EAAC,cAAc;IAACnL,MAAM,EAAC;EAAS,GAAC,UAExC,CACH,CACH,CAAC,eAENnG,KAAA,CAAA0C,aAAA;IACEE,IAAI,EAAC,QAAQ;IACbP,SAAS,EACPyN,eAAe,GACX,yBAAyB,GACzB,mCACL;IACDpE,OAAO,EAAEA,CAAA,KAAMqE,kBAAkB,CAAEzL,IAAI,IAAK,CAACA,IAAI;EAAE,gBAEnDtE,KAAA,CAAA0C,aAAA,CAACzB,wBAAwB,MAAE,CAAC,eAC5BjB,KAAA,CAAA0C,aAAA,eAAM,aAAiB,CACjB,CAAC,EAERoN,eAAe,gBACd9P,KAAA,CAAA0C,aAAA,2BACE1C,KAAA,CAAA0C,aAAA,CAAClB,QAAQ;IACPa,SAAS,EAAC,cAAc;IACxBsC,KAAK,EAAEsL,WAAY;IACnBjI,QAAQ,EAAGuJ,KAAK,IAAKrB,cAAc,CAACqB,KAAK,CAAClJ,MAAM,CAAC1D,KAAK;EAAE,CACzD,CACE,CAAC,GACJ,IAAI,eAER3E,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAa,gBAC1BrC,KAAA,CAAA0C,aAAA,CAAChC,MAAM;IACLmC,OAAO,EAAC,SAAS;IACjB2O,QAAQ,EAAEpD,KAAK,IAAI,CAAE;IACrB1C,OAAO,EAAEiF;EAAa,GACvB,iBAEO,CAAC,eACT3Q,KAAA,CAAA0C,aAAA,CAAChC,MAAM;IAACmC,OAAO,EAAC,WAAW;IAAC6I,OAAO,EAAEoD;EAAQ,GAAC,QAEtC,CACL,CACF,CAAC,EAELN,KAAK,GAAG,CAAC,gBACRxO,KAAA,CAAA0C,aAAA;IACEE,IAAI,EAAC,QAAQ;IACbP,SAAS,EAAE+N,WAAW,GAAG,WAAW,GAAG,qBAAsB;IAC7D1E,OAAO,EAAEA,CAAA,KAAM2E,cAAc,CAAE/L,IAAI,IAAK,CAACA,IAAI;EAAE,gBAE/CtE,KAAA,CAAA0C,aAAA,CAACzB,wBAAwB,MAAE,CAAC,eAC5BjB,KAAA,CAAA0C,aAAA,CAACb,OAAO;IAACyB,KAAK,EAAC,iBAAiB;IAACmO,WAAW;EAAA,GAAC,SACpC,EAAC3P,WAAW,CAAC0M,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAC,GACjC,CACH,CAAC,GACP,IACD,CAAC,EAEL4B,WAAW,IAAI9B,OAAO,CAAC5J,MAAM,GAAG,CAAC,gBAChC1E,KAAA,CAAA0C,aAAA;IAAKL,SAAS,EAAC;EAAa,GACzBiM,OAAO,CAAC1I,GAAG,CAAE8I,MAAM,iBAClB1O,KAAA,CAAA0C,aAAA;IAAKmD,GAAG,EAAE6I,MAAM,CAACtL,EAAG;IAACf,SAAS,EAAC;EAAY,gBACzCrC,KAAA,CAAA0C,aAAA;IAAML,SAAS,EAAC;EAAiB,gBAC/BrC,KAAA,CAAA0C,aAAA,CAACf,QAAQ;IAACwE,MAAM,EAAC,MAAM;IAAC7C,KAAK,EAAC;EAAW,GACtCwF,eAAe,CAAC4F,MAAM,CAACZ,IAAI,EAAEY,MAAM,CAACZ,IAAI,CACjC,CAAC,eACX9N,KAAA,CAAA0C,aAAA,CAAChB,KAAK,QAAEgN,MAAM,CAACV,QAAgB,CAAC,eAChChO,KAAA,CAAA0C,aAAA,CAACf,QAAQ;IAAC2B,KAAK,EAAC;EAAW,GAAEoL,MAAM,CAACP,OAAkB,CAClD,CAAC,eACPnO,KAAA,CAAA0C,aAAA,CAAChB,KAAK;IAACyE,MAAM,EAAC,MAAM;IAACsL,WAAW;EAAA,GAC7B3P,WAAW,CAAC4M,MAAM,CAACN,KAAK,CAAC,EAAC,GACtB,CACJ,CACN,CACE,CAAC,GACJ,IACiB,CACX,CACT,CAAC;AAEZ,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"columns.js","names":["React","createContext","forwardRef","useCallback","useContext","useMemo","useState","moment","styled","css","Button","Checkbox","Chip","DatePicker","Dot","CalendarIcon","ClockAddIcon","CollapseExpandSingleIcon","InputHours","Label","Modal","ProgressPie","Select","SelectTrigger","Textarea","SlideFromTop","Body2","Caption1","Caption2","Header3","formatHours","SANS","CooltipStyle","ListButtonBase","_ref","ref","open","className","children","rest","_objectWithoutPropertiesLoose","_excluded","createElement","_extends","type","variant","active","displayName","StyledListButton","withConfig","componentId","StyledIdValue","span","IdTrigger","_ref2","value","tooltip","_excluded2","weight","color","IdentifierCell","_ref3","identifier","link","onCopy","handleClick","event","_navigator$clipboard","preventDefault","stopPropagation","navigator","clipboard","writeText","then","catch","onClick","INITIAL_LABELS","id","name","textColor","NEW_LABEL_COLORS","LabelsContext","labels","labelsById","addLabel","LabelsProvider","_ref4","_useState","setLabels","trimmed","trim","toUpperCase","toLowerCase","replace","prev","some","label","palette","length","reduce","acc","Provider","useTaskLabels","StyledLabelPlaceholder","StyledLabelItems","MAX_SHOWN_LABELS","LabelItems","_ref5","showAsDot","shown","restCount","Math","min","slice","map","key","size","backgroundColor","style","maxWidth","typographyProps","LabelTrigger","_ref6","_excluded3","LabelCell","_ref7","labelIds","_ref7$completed","completed","_useTaskLabels","catalog","_useState2","selected","setSelected","selectedLabels","filter","Boolean","sort","a","b","localeCompare","options","handleChange","Array","isArray","String","handleAddNew","includes","StyledReadOnlyCell","onChange","emptyValue","emptyAction","autoHeightMax","position","target","DATE_FORMAT","todayUnix","utc","startOf","unix","dayOffset","offset","add","formatDateRange","from","to","undefined","start","due","withoutYear","withoutYearAndMonth","format","year","month","formatDateLong","isOverdue","dueOn","StyledDateValue","div","StyledPickerCell","DateTrigger","_ref8","overdue","_excluded4","DateCell","_ref9","_dates$from","_dates$to2","startOn","_ref9$completed","_useState3","dates","setDates","_useState4","pickerMounted","setPickerMounted","_useMemo","_dates$to","formatted","hint","handleSave","range","Number","handleClear","handleCalendarToggle","next","mode","instant","maxRange","firstDayOfWeek","onSave","onClear","onCalendarToggle","timeToEstimatePercentage","tracked","estimated","round","formatTrackedAndEstimated","progressColor","percent","StyledTimeValue","TimeValue","_ref0","radius","progress","TimeTrigger","_ref1","hasTime","TimeCell","_ref10","taskName","_ref10$tracked","_ref10$estimated","users","currentUserId","_ref10$completed","_useState5","setOpen","_useState6","_users$find$name","_users$find","date","userId","userName","find","user","jobType","hours","billable","records","setRecords","total","sum","record","handleAdd","TimeRecordDialog","onSubmit","onClose","JOB_TYPES","StyledTimeRecordPaper","_ref11","_useState7","setValue","_useState8","setDate","_useState9","setUserId","_useState0","jobTypeId","setJobTypeId","_useState1","setBillable","_useState10","showDescription","setShowDescription","_useState11","description","setDescription","_useState12","showRecords","setShowRecords","item","_trimmed$split","split","h","m","handleSubmit","_user$name","_jobType$name","in","role","required","autoFocus","allowEmptyValue","placeholder","forceCloseMenu","checked","htmlFor","disabled","tabularNums"],"sources":["../../../../src/presentation/listView/columns.tsx"],"sourcesContent":["import React, {\n createContext,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\n\nimport moment from \"moment-timezone\";\nimport styled, { css } from \"styled-components\";\n\nimport { Button } from \"../../components/Button\";\nimport { Checkbox } from \"../../components/Checkbox\";\nimport { Chip } from \"../../components/Chip\";\nimport { DatePicker, TimestampDateRange } from \"../../components/DatePicker\";\nimport { Dot } from \"../../components/Dot\";\nimport {\n CalendarIcon,\n ClockAddIcon,\n CollapseExpandSingleIcon,\n} from \"../../components/Icons\";\nimport { InputHours } from \"../../components/Input\";\nimport { Label } from \"../../components/Label\";\nimport { Modal } from \"../../components/Modal\";\nimport { ProgressPie } from \"../../components/ProgressPie\";\nimport { Select } from \"../../components/Select\";\nimport { SelectTrigger } from \"../../components/SelectTrigger\";\nimport { Textarea } from \"../../components/Textarea\";\nimport { SlideFromTop } from \"../../components/Transitions\";\nimport {\n Body2,\n Caption1,\n Caption2,\n Header3,\n} from \"../../components/Typography\";\nimport { formatHours } from \"../../utils\";\n\n/**\n * Interactive list-view column cells for the `Presentation/List view` and\n * `Presentation/List View ID Column` stories — the Label, Date and Time cells\n * with their editors, mirroring\n * `new-activecollab-front/src/components/ListView/columns/*`, plus an\n * Identifier cell that only the ID-column story uses (it has no counterpart in\n * the app yet):\n *\n * - **Identifier** (no app equivalent): `#<id>` as a Copy Link trigger, styled\n * like the Date trigger. One typography at every length — the column's width\n * is what adapts to how large the identifiers get.\n * - **Label** (`columns/Label.js` + `LabelTrigger`/`LabelItems`): chips for 1–2\n * labels, dots from 3 up, `+N` past 8, and a DS `Select` picker (search,\n * colored dot + label name in the label's own colour, checkbox, \"+ Add new\").\n * - **Date** (`columns/Date.js`): a range trigger that formats like the app\n * (`formatDateRange`), turns red when overdue, and opens the DS `DatePicker`\n * in atomic mode so it gets the Save / ✕ / Clear footer.\n * - **Time** (`columns/Time.js`): `ProgressPie` + `tracked/estimated`, coloured\n * by how much of the estimate is used, opening the \"Add Time Record\" dialog.\n *\n * Everything is local state — there is no store, so edits live as long as the\n * story is mounted.\n */\n\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Inter\", \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\n\n/**\n * CSS-only tooltip, mirroring the app's `.c-cooltip.c-cooltip--top` (see\n * `styles/c_cooltip.less`). The list renders hundreds of these, and the DS\n * `Tooltip` mounts a Portal + Popper per instance — far too heavy per cell — so\n * the cells use `data-tooltip` exactly like the real list view does.\n */\nconst CooltipStyle = css`\n &[data-tooltip],\n [data-tooltip] {\n position: relative;\n }\n\n &[data-tooltip]::after,\n [data-tooltip]::after {\n pointer-events: none;\n content: attr(data-tooltip);\n position: absolute;\n bottom: calc(100% + 0.5rem);\n left: 50%;\n transform: scale(0.85) translateX(-50%);\n transform-origin: 0;\n opacity: 0;\n max-width: 12.5rem;\n padding: 0.25rem 0.625rem;\n border-radius: 0.5rem;\n background-color: rgba(0, 0, 0, 0.9);\n color: #fff;\n font-family: ${SANS};\n font-size: 0.75rem;\n font-weight: 500;\n line-height: 1.3;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @media (hover: hover) {\n &[data-tooltip]:not(:focus):hover::after,\n [data-tooltip]:not(:focus):hover::after {\n transition: opacity 0.15s ease, transform 0.15s ease;\n transition-delay: 0.6s;\n transform: scale(1) translateX(-50%);\n opacity: 1;\n }\n }\n`;\n\n/* ================================================================== */\n/* Shared trigger button (mirrors ListView/ListButton.js) */\n/* ================================================================== */\n\ninterface ListButtonProps {\n /** injected by DS `Menu` when it clones the target */\n open?: boolean;\n className?: string;\n children?: ReactNode;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n disabled?: boolean;\n \"aria-label\"?: string;\n}\n\n/**\n * `Menu` clones its `target` and injects `open`, so — like the app's\n * `ListButton` — the trigger has to swallow that prop and turn it into the DS\n * `active` state plus an `.open` class the row CSS uses to keep the trigger\n * visible while its menu is open.\n */\nconst ListButtonBase = forwardRef<HTMLButtonElement, ListButtonProps>(\n ({ open, className, children, ...rest }, ref) => (\n <Button\n {...rest}\n ref={ref}\n type=\"button\"\n variant=\"text gray\"\n active={open}\n className={`list-button${className ? ` ${className}` : \"\"}${\n open ? \" open\" : \"\"\n }`}\n >\n {children}\n </Button>\n )\n);\n\nListButtonBase.displayName = \"ListButtonBase\";\n\n/*\n * The DS Button treats a single element child as \"icon only\" — inline-flex,\n * centered, a fixed 32px wide and `overflow: hidden`, which squashes a date or\n * a chip. `&&` doubles the specificity so these rules win over that block; the\n * button then hugs its content and the column's `justify-content: flex-end`\n * parks it against the right edge.\n */\nconst StyledListButton = styled(ListButtonBase)`\n && {\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n width: auto;\n min-width: 0;\n max-width: 100%;\n padding: 4px 8px;\n overflow: visible;\n text-align: right;\n }\n\n ${CooltipStyle}\n`;\n\n/* ================================================================== */\n/* Identifier (task ID) */\n/* ================================================================== */\n\nconst StyledIdValue = styled.span`\n font-family: ${SANS};\n white-space: nowrap;\n /* equal-width digits so a column of ids reads as a column, not a ragged list */\n font-variant-numeric: tabular-nums;\n`;\n\ninterface IdTriggerProps extends ListButtonProps {\n value: string;\n tooltip: string;\n}\n\n/**\n * Same trigger the Date cell uses, so the id gets the identical hover outline\n * and 8px inset — it is a link, not an editor, so it is always visible\n * (`has-value`) rather than appearing on row hover.\n *\n * The typography is Caption 1 bold at every identifier length, like the Date\n * value next to it; long identifiers are handled by the column's width tier,\n * not by shrinking the text.\n */\nconst IdTrigger = forwardRef<HTMLButtonElement, IdTriggerProps>(\n ({ value, tooltip, ...rest }, ref) => (\n <StyledListButton\n {...rest}\n ref={ref}\n className=\"show-on-hover has-value\"\n aria-label={`Copy link to task ${value}`}\n data-tooltip={tooltip}\n >\n <StyledIdValue>\n <Caption1 weight=\"bold\" color=\"secondary\">\n {value}\n </Caption1>\n </StyledIdValue>\n </StyledListButton>\n )\n);\n\nIdTrigger.displayName = \"IdTrigger\";\n\n/**\n * Task identifier cell — the `#<id>` value as a copy-link control, mirroring\n * how `tasks/Metadata.js` turns `Task #248` into the task's Copy Link action:\n * the click writes the task URL to the clipboard and reports back so the page\n * can raise the app's \"Link copied to clipboard.\" toast (utils/copyLinkToClipboard).\n * It never navigates — the row itself is the navigation target.\n */\nexport const IdentifierCell = ({\n identifier,\n link,\n onCopy,\n}: {\n identifier: number;\n /** absolute task URL — what lands on the clipboard */\n link: string;\n /** raised after the copy attempt so the page can show a toast */\n onCopy?: (copied: boolean) => void;\n}): ReactElement => {\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n /* the whole row navigates to the task, so copying must not also open it */\n event.preventDefault();\n event.stopPropagation();\n\n if (navigator.clipboard?.writeText) {\n navigator.clipboard\n .writeText(link)\n .then(() => onCopy?.(true))\n .catch(() => onCopy?.(false));\n return;\n }\n onCopy?.(false);\n },\n [link, onCopy]\n );\n\n return (\n <div className=\"col col-identifier\">\n <IdTrigger\n value={`#${identifier}`}\n tooltip=\"Copy Link\"\n onClick={handleClick}\n />\n </div>\n );\n};\n\n/* ================================================================== */\n/* Labels */\n/* ================================================================== */\n\nexport interface TaskLabel {\n id: string;\n name: string;\n /** chip background + dot colour (label colours are data, not theme) */\n color: string;\n /** the label's own text colour, used in the picker list */\n textColor: string;\n}\n\n/* The project's label catalogue. Names are uppercase, like in the app. */\nconst INITIAL_LABELS: TaskLabel[] = [\n {\n id: \"in-progress\",\n name: \"IN PROGRESS\",\n color: \"#CDE8F5\",\n textColor: \"#3D7F9E\",\n },\n {\n id: \"needs-review\",\n name: \"NEEDS REVIEW\",\n color: \"#F9E79F\",\n textColor: \"#A98A17\",\n },\n { id: \"approved\", name: \"APPROVED\", color: \"#A9DFBF\", textColor: \"#3D9A6A\" },\n { id: \"blocked\", name: \"BLOCKED\", color: \"#F1948A\", textColor: \"#B5544C\" },\n { id: \"on-hold\", name: \"ON HOLD\", color: \"#F5CBA7\", textColor: \"#B4713A\" },\n { id: \"idea\", name: \"IDEA\", color: \"#FAD7A0\", textColor: \"#B98A2B\" },\n { id: \"todo\", name: \"TODO\", color: \"#D6EAF8\", textColor: \"#4A87B5\" },\n { id: \"research\", name: \"RESEARCH\", color: \"#D7BDE2\", textColor: \"#8155A0\" },\n {\n id: \"accessibility\",\n name: \"ACCESSIBILITY\",\n color: \"#AED6F1\",\n textColor: \"#3E7CA6\",\n },\n { id: \"copy\", name: \"COPY\", color: \"#F5B7B1\", textColor: \"#B5544C\" },\n {\n id: \"design-debt\",\n name: \"DESIGN DEBT\",\n color: \"#E8DAEF\",\n textColor: \"#7D5A99\",\n },\n { id: \"qa\", name: \"QA\", color: \"#A3E4D7\", textColor: \"#34907C\" },\n {\n id: \"client-input\",\n name: \"CLIENT INPUT\",\n color: \"#FDEBD0\",\n textColor: \"#B08640\",\n },\n { id: \"mobile\", name: \"MOBILE\", color: \"#D1F2EB\", textColor: \"#2E8B7A\" },\n {\n id: \"performance\",\n name: \"PERFORMANCE\",\n color: \"#FCF3CF\",\n textColor: \"#A38B1E\",\n },\n { id: \"asset\", name: \"ASSET\", color: \"#D5D8DC\", textColor: \"#6B7378\" },\n];\n\n/* Colours handed out to labels created from the picker's \"+ Add new\" row. */\nconst NEW_LABEL_COLORS = [\n { color: \"#F9E0F2\", textColor: \"#A4569B\" },\n { color: \"#DDEBFB\", textColor: \"#4E7BA8\" },\n { color: \"#E4F6D8\", textColor: \"#5F9440\" },\n { color: \"#FDE2D5\", textColor: \"#B36A45\" },\n];\n\ninterface LabelsContextValue {\n labels: TaskLabel[];\n labelsById: Record<string, TaskLabel>;\n addLabel: (name: string) => string;\n}\n\nconst LabelsContext = createContext<LabelsContextValue>({\n labels: INITIAL_LABELS,\n labelsById: {},\n addLabel: () => \"\",\n});\n\n/**\n * Holds the label catalogue for the whole list, so a label created in one\n * task's picker shows up in every other picker too.\n */\nexport const LabelsProvider = ({\n children,\n}: {\n children: ReactNode;\n}): ReactElement => {\n const [labels, setLabels] = useState<TaskLabel[]>(INITIAL_LABELS);\n\n const addLabel = useCallback((name: string): string => {\n const trimmed = name.trim().toUpperCase();\n const id = `label-${trimmed.toLowerCase().replace(/[^a-z0-9]+/g, \"-\")}`;\n setLabels((prev) => {\n if (prev.some((label) => label.id === id)) {\n return prev;\n }\n const palette = NEW_LABEL_COLORS[prev.length % NEW_LABEL_COLORS.length];\n return [...prev, { id, name: trimmed, ...palette }];\n });\n return id;\n }, []);\n\n const value = useMemo(\n () => ({\n labels,\n labelsById: labels.reduce<Record<string, TaskLabel>>(\n (acc, label) => ({ ...acc, [label.id]: label }),\n {}\n ),\n addLabel,\n }),\n [addLabel, labels]\n );\n\n return (\n <LabelsContext.Provider value={value}>{children}</LabelsContext.Provider>\n );\n};\n\nconst useTaskLabels = (): LabelsContextValue => useContext(LabelsContext);\n\n/* Empty state pill (mirrors EntityLabel + .entity-label in list-view.less) */\nconst StyledLabelPlaceholder = styled.span`\n display: inline-flex;\n align-items: center;\n padding: 1px 6px;\n border: 1px solid var(--color-theme-700);\n border-radius: 4px;\n\n .list-button.open &,\n .list-button:hover & {\n border-color: var(--color-primary-700, var(--color-primary));\n }\n`;\n\nconst StyledLabelItems = styled.span`\n display: inline-flex;\n align-items: center;\n min-width: 0;\n\n /* 2px gap between chips/dots (mirrors tw-mr-0.5 last:tw-mr-0) */\n > *:not(:last-child) {\n margin-right: 2px;\n }\n\n .rest-count {\n margin-left: 2px;\n }\n\n ${CooltipStyle}\n`;\n\nconst MAX_SHOWN_LABELS = 8;\n\nconst LabelItems = ({ labels }: { labels: TaskLabel[] }): ReactElement => {\n const showAsDot = labels.length > 2;\n let shown = labels;\n let restCount = 0;\n\n if (labels.length > MAX_SHOWN_LABELS) {\n restCount = Math.min(labels.length - MAX_SHOWN_LABELS, 99);\n shown = labels.slice(0, MAX_SHOWN_LABELS - 1);\n }\n\n return (\n <StyledLabelItems>\n {shown.map((label) =>\n showAsDot ? (\n <Dot\n key={label.id}\n color={label.color}\n size={20}\n data-tooltip={label.name}\n />\n ) : (\n <Chip\n key={label.id}\n label={label.name}\n backgroundColor={label.color}\n color=\"#303037\"\n style={{ maxWidth: \"90px\" }}\n typographyProps={{ variant: \"Caption 2\", weight: \"bold\" }}\n data-tooltip={label.name}\n />\n )\n )}\n {restCount > 0 ? (\n <Body2 weight=\"bold\" className=\"rest-count\">\n +{restCount}\n </Body2>\n ) : null}\n </StyledLabelItems>\n );\n};\n\nconst LabelTrigger = forwardRef<\n HTMLButtonElement,\n ListButtonProps & { labels: TaskLabel[] }\n>(({ labels, ...rest }, ref) => {\n if (labels.length === 0) {\n return (\n <StyledListButton\n {...rest}\n ref={ref}\n className=\"show-on-hover\"\n aria-label=\"Add labels\"\n data-tooltip=\"Add Labels\"\n >\n <StyledLabelPlaceholder>\n <Caption2 weight=\"bold\" color=\"tertiary\">\n LABEL\n </Caption2>\n </StyledLabelPlaceholder>\n </StyledListButton>\n );\n }\n\n return (\n <StyledListButton {...rest} ref={ref} aria-label=\"Change labels\">\n <LabelItems labels={labels} />\n </StyledListButton>\n );\n});\n\nLabelTrigger.displayName = \"LabelTrigger\";\n\nexport const LabelCell = ({\n labelIds,\n completed = false,\n}: {\n labelIds?: string[];\n completed?: boolean;\n}): ReactElement => {\n const { labels: catalog, labelsById, addLabel } = useTaskLabels();\n const [selected, setSelected] = useState<string[]>(labelIds ?? []);\n\n /* alphabetical, like LabelTrigger sorts before rendering */\n const selectedLabels = useMemo(\n () =>\n selected\n .map((id) => labelsById[id])\n .filter((label): label is TaskLabel => Boolean(label))\n .sort((a, b) => a.name.localeCompare(b.name)),\n [labelsById, selected]\n );\n\n const options = useMemo(\n () =>\n catalog.map((label) => ({\n id: label.id,\n name: label.name,\n color: label.color,\n textColor: label.textColor,\n })),\n [catalog]\n );\n\n const handleChange = useCallback(\n (value: (string | number)[] | string | number) => {\n setSelected(\n Array.isArray(value)\n ? value.map(String)\n : [String(value)].filter(Boolean)\n );\n },\n []\n );\n\n const handleAddNew = useCallback(\n (name?: string) => {\n if (!name || !name.trim()) {\n return;\n }\n const id = addLabel(name);\n setSelected((prev) => (prev.includes(id) ? prev : [...prev, id]));\n },\n [addLabel]\n );\n\n /* Completed tasks show their labels read-only (mirrors Label.js) */\n if (completed) {\n return (\n <StyledReadOnlyCell className=\"col col-label\">\n {selectedLabels.length > 0 ? (\n <LabelItems labels={selectedLabels} />\n ) : null}\n </StyledReadOnlyCell>\n );\n }\n\n return (\n <div className=\"col col-label\">\n <Select\n type=\"multiple\"\n options={options}\n selected={selected}\n onChange={handleChange}\n emptyValue=\"Add new\"\n emptyAction={handleAddNew}\n autoHeightMax={278}\n position=\"bottom-end\"\n target={<LabelTrigger labels={selectedLabels} />}\n />\n </div>\n );\n};\n\n/* ================================================================== */\n/* Date */\n/* ================================================================== */\n\n/** The personalized date format the app defaults to (`MMM D. YYYY`). */\nconst DATE_FORMAT = \"MMM D. YYYY\";\n\n/** Midnight UTC today — the reference point for the mock data and overdue. */\nconst todayUnix = (): number => moment.utc().startOf(\"day\").unix();\n\n/** Build a mock timestamp N days from today (negative = in the past). */\nexport const dayOffset = (offset: number): number =>\n moment.utc().startOf(\"day\").add(offset, \"days\").unix();\n\n/** mirrors utils/date.js → formatDateRange (month-first format) */\nexport const formatDateRange = (\n from?: number,\n to?: number\n): string | undefined => {\n if (from === undefined || from === null) {\n return undefined;\n }\n const start = moment.unix(from).utc();\n const due = moment.unix(to ?? from).utc();\n const withoutYear = DATE_FORMAT.replace(/YYYY|,$/gi, \"\").trim();\n const withoutYearAndMonth = withoutYear.replace(/MMM|,$/gi, \"\").trim();\n\n if (from === to || to === undefined) {\n return start.format(withoutYear);\n }\n if (start.year() === due.year() && start.month() === due.month()) {\n return `${start.format(withoutYear)} - ${due.format(withoutYearAndMonth)}`;\n }\n return `${start.format(withoutYear)} - ${due.format(withoutYear)}`;\n};\n\n/** mirrors utils/date.js → formatDateSmart(…, long) */\nconst formatDateLong = (value?: number): string =>\n value ? moment.unix(value).utc().format(DATE_FORMAT) : \"\";\n\nexport const isOverdue = (dueOn?: number, completed?: boolean): boolean =>\n Boolean(dueOn && !completed && dueOn < todayUnix());\n\nconst StyledDateValue = styled.span`\n font-family: ${SANS};\n white-space: nowrap;\n`;\n\n/* completed rows render values without a trigger, so the cell itself hosts the\n CSS tooltip */\nconst StyledReadOnlyCell = styled.div`\n padding-right: 8px;\n\n ${CooltipStyle}\n`;\n\n/**\n * `DatePicker` wraps itself in a `width: 100%` inline-block, which would stretch\n * across the column and left-align the trigger the moment the picker mounts —\n * the value would visibly jump and the popper would anchor to the wrong spot.\n * Keeping that wrapper right-aligned makes the open state geometrically\n * identical to the closed one.\n */\nconst StyledPickerCell = styled.div`\n /* StyledDatePickerWrapper — DatePicker's unclassed outer div */\n > div {\n text-align: right;\n }\n`;\n\ninterface DateTriggerProps extends ListButtonProps {\n value?: string;\n tooltip: string;\n overdue?: boolean;\n}\n\nconst DateTrigger = forwardRef<HTMLButtonElement, DateTriggerProps>(\n ({ value, tooltip, overdue, ...rest }, ref) => (\n <StyledListButton\n {...rest}\n ref={ref}\n className={value ? \"show-on-hover has-value\" : \"show-on-hover\"}\n aria-label={value ? \"Change dates\" : \"Add date\"}\n data-tooltip={tooltip}\n >\n {value ? (\n <StyledDateValue>\n <Caption1 weight=\"bold\" color={overdue ? \"alert\" : \"secondary\"}>\n {value}\n </Caption1>\n </StyledDateValue>\n ) : (\n <CalendarIcon />\n )}\n </StyledListButton>\n )\n);\n\nDateTrigger.displayName = \"DateTrigger\";\n\nexport const DateCell = ({\n startOn,\n dueOn,\n completed = false,\n}: {\n startOn?: number;\n dueOn?: number;\n completed?: boolean;\n}): ReactElement => {\n const [dates, setDates] = useState<{ from?: number; to?: number }>({\n from: startOn,\n to: dueOn,\n });\n /**\n * The DS `DatePicker` does real work on mount (timezone guess, month grids,\n * key handlers) — with one per row that is the single most expensive thing on\n * this page. So the closed state is just the trigger; the picker is mounted\n * on first click, already open, and unmounted again when it closes.\n */\n const [pickerMounted, setPickerMounted] = useState(false);\n\n /* moment isn't cheap either; only reformat when the dates actually change */\n const { value, overdue, tooltip } = useMemo(() => {\n const formatted = formatDateRange(dates.from, dates.to);\n let hint = \"Add Date\";\n if (dates.from) {\n hint =\n !dates.to || dates.to === dates.from\n ? formatDateLong(dates.from)\n : `${formatDateLong(dates.from)} - ${formatDateLong(dates.to)}`;\n }\n return {\n value: formatted,\n overdue: isOverdue(dates.to ?? dates.from, completed),\n tooltip: hint,\n };\n }, [completed, dates.from, dates.to]);\n\n const handleSave = useCallback((range?: TimestampDateRange) => {\n if (!range || range.from === null || range.from === undefined) {\n setDates({});\n return;\n }\n setDates({\n from: Number(range.from),\n to: range.to ? Number(range.to) : Number(range.from),\n });\n }, []);\n\n const handleClear = useCallback(() => setDates({}), []);\n\n const handleCalendarToggle = useCallback((next: boolean) => {\n if (!next) {\n setPickerMounted(false);\n }\n }, []);\n\n /* Completed tasks show the date read-only (mirrors Date.js) */\n if (completed) {\n return (\n <StyledReadOnlyCell className=\"col col-date\">\n {value ? (\n <StyledDateValue data-tooltip={tooltip}>\n <Caption1 weight=\"bold\" color={overdue ? \"alert\" : \"secondary\"}>\n {value}\n </Caption1>\n </StyledDateValue>\n ) : null}\n </StyledReadOnlyCell>\n );\n }\n\n if (!pickerMounted) {\n return (\n <div className=\"col col-date\">\n <DateTrigger\n value={value}\n tooltip={tooltip}\n overdue={overdue}\n onClick={() => setPickerMounted(true)}\n />\n </div>\n );\n }\n\n return (\n <StyledPickerCell className=\"col col-date\">\n <DatePicker\n open\n mode=\"custom\"\n instant={false}\n maxRange={366}\n firstDayOfWeek={1}\n position=\"bottom-end\"\n selected={{ from: dates.from ?? null, to: dates.to ?? null }}\n onSave={handleSave}\n onClear={handleClear}\n onCalendarToggle={handleCalendarToggle}\n target={\n <DateTrigger value={value} tooltip={tooltip} overdue={overdue} />\n }\n />\n </StyledPickerCell>\n );\n};\n\n/* ================================================================== */\n/* Time */\n/* ================================================================== */\n\n/** mirrors utils/utils.jsx → calculateTimeToEstimatePercentage */\nconst timeToEstimatePercentage = (\n tracked: number,\n estimated: number\n): number | null => {\n if (estimated > 0) {\n return tracked > 0 ? Math.round((tracked / estimated) * 100) : 0;\n }\n return null;\n};\n\n/** mirrors utils/utils.jsx → formatTrackedAndEstimatedTime */\nconst formatTrackedAndEstimated = (\n tracked: number,\n estimated: number\n): string =>\n estimated > 0\n ? `${formatHours(tracked, false, false, \"short\")}/${formatHours(\n estimated,\n false,\n false,\n \"short\"\n )}`\n : formatHours(tracked, false, false, \"short\");\n\n/* mirrors Time.js → progressColor() */\nconst progressColor = (percent: number): string => {\n if (percent >= 100) {\n return \"var(--red-alert)\";\n }\n if (percent >= 75) {\n return \"var(--warning)\";\n }\n return \"var(--color-sucess-green)\";\n};\n\nconst StyledTimeValue = styled.span`\n display: inline-flex;\n align-items: center;\n font-family: ${SANS};\n white-space: nowrap;\n\n .c-progress-pie,\n svg {\n flex-shrink: 0;\n }\n\n .time-pie {\n margin-right: 8px;\n }\n`;\n\nconst TimeValue = ({\n tracked,\n estimated,\n}: {\n tracked: number;\n estimated: number;\n}): ReactElement => {\n const percent = timeToEstimatePercentage(tracked, estimated);\n\n return (\n <StyledTimeValue>\n {estimated > 0 ? (\n <ProgressPie\n className=\"time-pie\"\n radius={10}\n progress={percent ?? 0}\n progressColor={progressColor(percent ?? 0)}\n backgroundColor=\"var(--color-theme-300)\"\n />\n ) : null}\n <Caption1 weight=\"bold\">\n {formatTrackedAndEstimated(tracked, estimated)}\n </Caption1>\n </StyledTimeValue>\n );\n};\n\nconst TimeTrigger = ({\n tracked,\n estimated,\n onClick,\n}: {\n tracked: number;\n estimated: number;\n onClick: () => void;\n}): ReactElement => {\n const hasTime = tracked > 0 || estimated > 0;\n\n return (\n <StyledListButton\n onClick={onClick}\n className={hasTime ? \"show-on-hover open\" : \"show-on-hover\"}\n aria-label={hasTime ? \"Edit time\" : \"Add time\"}\n data-tooltip={hasTime ? \"Edit Time\" : \"Add Time\"}\n >\n {hasTime ? (\n <TimeValue tracked={tracked} estimated={estimated} />\n ) : (\n <ClockAddIcon />\n )}\n </StyledListButton>\n );\n};\n\nexport interface TimeRecord {\n id: number;\n date: number;\n userId: string;\n userName: string;\n jobType: string;\n hours: number;\n billable: boolean;\n description?: string;\n}\n\nexport interface TimeCellUser {\n id: string;\n name: string;\n}\n\nexport const TimeCell = ({\n taskName,\n tracked = 0,\n estimated = 0,\n users,\n currentUserId,\n completed = false,\n}: {\n taskName: string;\n tracked?: number;\n estimated?: number;\n users: TimeCellUser[];\n currentUserId: string;\n completed?: boolean;\n}): ReactElement => {\n const [open, setOpen] = useState(false);\n const [records, setRecords] = useState<TimeRecord[]>(() =>\n tracked > 0\n ? [\n {\n id: 1,\n date: dayOffset(-3),\n userId: currentUserId,\n userName:\n users.find((user) => user.id === currentUserId)?.name ?? \"You\",\n jobType: \"Design\",\n hours: tracked,\n billable: true,\n },\n ]\n : []\n );\n\n const total = useMemo(\n () => records.reduce((sum, record) => sum + record.hours, 0),\n [records]\n );\n\n const handleAdd = useCallback((record: Omit<TimeRecord, \"id\">) => {\n setRecords((prev) => [{ ...record, id: prev.length + 1 }, ...prev]);\n setOpen(false);\n }, []);\n\n /* Completed tasks show the value without the \"add\" affordance (mirrors\n Time.js passing hideIcon for completed tasks) */\n if (completed) {\n return (\n <StyledReadOnlyCell className=\"col col-time\">\n {total > 0 || estimated > 0 ? (\n <TimeValue tracked={total} estimated={estimated} />\n ) : null}\n </StyledReadOnlyCell>\n );\n }\n\n return (\n <div className=\"col col-time\">\n <TimeTrigger\n tracked={total}\n estimated={estimated}\n onClick={() => setOpen(true)}\n />\n {open ? (\n <TimeRecordDialog\n open={open}\n taskName={taskName}\n users={users}\n currentUserId={currentUserId}\n records={records}\n total={total}\n onSubmit={handleAdd}\n onClose={() => setOpen(false)}\n />\n ) : null}\n </div>\n );\n};\n\n/* ------------------------------------------------------------------ */\n/* Add Time Record dialog (mirrors TimeRecordForm/*) */\n/* ------------------------------------------------------------------ */\n\nconst JOB_TYPES = [\n { id: \"design\", name: \"Design\" },\n { id: \"development\", name: \"Development\" },\n { id: \"devops\", name: \"Devops\" },\n { id: \"consulting\", name: \"Consulting\" },\n { id: \"qa\", name: \"QA\" },\n];\n\n/* The dialog paper — the app builds this one by hand rather than with DS\n `Dialog` because it is 770px wide (`.time_record_form_modal_wrapper`). */\nconst StyledTimeRecordPaper = styled.div`\n position: relative;\n width: 770px;\n max-width: 95vw;\n max-height: calc(100vh - 156px);\n margin: 126px auto 30px auto;\n padding: 20px 30px;\n overflow: auto;\n border-radius: 8px;\n background-color: var(--page-paper-main);\n color: var(--color-theme-900);\n box-shadow: var(--shadow-primary);\n box-sizing: border-box;\n font-family: ${SANS};\n\n * {\n box-sizing: border-box;\n }\n\n @media (max-width: 830px) {\n width: calc(100vw - 60px);\n }\n\n .trd-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .trd-title {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-right: 16px;\n font-size: 1rem;\n font-weight: 700;\n }\n\n /* SelectTrigger is a fixed 300px control — let the date hug its label. The\n DatePicker's own full-width wrapper is right-aligned for the same reason\n as in the list cells. */\n .trd-date button {\n width: auto;\n }\n\n .trd-date > div {\n text-align: right;\n }\n\n .trd-divider {\n margin: 20px 0 32px 0;\n border-bottom: 1px solid var(--border-primary);\n height: 1px;\n }\n\n .trd-body {\n display: flex;\n justify-content: space-between;\n position: relative;\n }\n\n .trd-form {\n width: 100%;\n }\n\n .trd-fields {\n display: flex;\n align-items: flex-end;\n }\n\n .trd-hours {\n width: 144px;\n margin-right: 16px;\n flex-shrink: 0;\n }\n\n .trd-hours .c-input-wrapper,\n .trd-hours input {\n width: 100%;\n }\n\n .trd-field {\n margin-right: 16px;\n }\n\n .trd-field:last-of-type {\n margin-right: 20px;\n }\n\n .trd-field .c-label {\n display: block;\n margin-bottom: 2px;\n }\n\n /* SelectTrigger defaults to 300px; the app's fields are 144px */\n .trd-field button {\n width: 144px;\n }\n\n .trd-billable {\n display: flex;\n align-items: center;\n margin-top: 24px;\n }\n\n .trd-billable .c-label {\n margin-left: 8px;\n cursor: pointer;\n }\n\n .trd-description-trigger {\n display: inline-flex;\n align-items: center;\n margin-top: 16px;\n color: var(--color-secondary);\n font-size: 14px;\n font-weight: 500;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n font-family: ${SANS};\n }\n\n .trd-description-trigger svg {\n margin-right: 4px;\n fill: var(--color-primary);\n transition: transform 200ms ease;\n }\n\n .trd-description-trigger.collapsed svg {\n transform: rotate(180deg);\n }\n\n .trd-textarea {\n width: 360px;\n max-width: 100%;\n margin-top: 8px;\n font-size: 12px;\n resize: none;\n }\n\n .trd-actions {\n display: flex;\n margin-top: 24px;\n }\n\n .trd-actions .c-button:first-child {\n margin-right: 12px;\n }\n\n /* the total sits bottom-right of the form column, like the app */\n .trd-total {\n position: absolute;\n right: 0;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n align-self: flex-end;\n background: none;\n border: none;\n padding: 0;\n cursor: pointer;\n }\n\n .trd-total svg {\n margin-right: 4px;\n fill: var(--color-primary);\n transition: transform 200ms ease;\n }\n\n .trd-total.collapsed svg {\n transform: rotate(180deg);\n }\n\n .trd-records {\n margin-top: 32px;\n border-top: 1px solid var(--border-primary);\n }\n\n .trd-record {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 36px;\n border-bottom: 1px solid var(--color-theme-300);\n }\n\n .trd-record-left {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n }\n`;\n\nconst TimeRecordDialog = ({\n open,\n taskName,\n users,\n currentUserId,\n records,\n total,\n onSubmit,\n onClose,\n}: {\n open: boolean;\n taskName: string;\n users: TimeCellUser[];\n currentUserId: string;\n records: TimeRecord[];\n total: number;\n onSubmit: (record: Omit<TimeRecord, \"id\">) => void;\n onClose: () => void;\n}): ReactElement => {\n const [value, setValue] = useState(\"\");\n const [date, setDate] = useState<number>(todayUnix());\n const [userId, setUserId] = useState<string>(currentUserId);\n const [jobTypeId, setJobTypeId] = useState<string>(\"devops\");\n const [billable, setBillable] = useState(false);\n const [showDescription, setShowDescription] = useState(true);\n const [description, setDescription] = useState(\"\");\n const [showRecords, setShowRecords] = useState(false);\n\n const user = users.find((item) => item.id === userId);\n const jobType = JOB_TYPES.find((item) => item.id === jobTypeId);\n\n /** \"1:30\" / \"1.5\" → decimal hours */\n const hours = useMemo(() => {\n const trimmed = value.trim();\n if (!trimmed) {\n return 0;\n }\n if (trimmed.includes(\":\")) {\n const [h, m] = trimmed.split(\":\");\n return Number(h || 0) + Number(m || 0) / 60;\n }\n return Number(trimmed) || 0;\n }, [value]);\n\n const handleSubmit = useCallback(() => {\n onSubmit({\n date,\n userId,\n userName: user?.name ?? \"\",\n jobType: jobType?.name ?? \"\",\n hours,\n billable,\n description,\n });\n }, [billable, date, description, hours, jobType, onSubmit, user, userId]);\n\n return (\n <Modal open={open} onClose={onClose}>\n <SlideFromTop in={open}>\n <StyledTimeRecordPaper role=\"dialog\" aria-label=\"Add time record\">\n <div className=\"trd-header\">\n <span className=\"trd-title\">{taskName}</span>\n <span className=\"trd-date\">\n <DatePicker\n mode=\"daily\"\n required\n firstDayOfWeek={1}\n position=\"bottom-end\"\n selected={{ from: date, to: date }}\n onSave={(range) =>\n range?.from ? setDate(Number(range.from)) : undefined\n }\n target={\n <SelectTrigger>{formatDateRange(date, date)}</SelectTrigger>\n }\n />\n </span>\n </div>\n\n <div className=\"trd-divider\" />\n\n <div className=\"trd-body\">\n <div className=\"trd-form\">\n <div className=\"trd-fields\">\n <span className=\"trd-hours\">\n <InputHours\n autoFocus\n allowEmptyValue\n size=\"biggest\"\n placeholder=\"00:00\"\n value={value}\n onChange={setValue}\n />\n </span>\n\n <span className=\"trd-field\">\n <Label size=\"small\">User</Label>\n <Select\n options={users}\n selected={userId}\n forceCloseMenu\n onChange={(next) => setUserId(String(next))}\n target={\n <SelectTrigger id=\"trd-user\">{user?.name}</SelectTrigger>\n }\n />\n </span>\n\n <span className=\"trd-field\">\n <Label size=\"small\">Job Type</Label>\n <Select\n options={JOB_TYPES}\n selected={jobTypeId}\n forceCloseMenu\n onChange={(next) => setJobTypeId(String(next))}\n target={\n <SelectTrigger id=\"trd-job-type\">\n {jobType?.name}\n </SelectTrigger>\n }\n />\n </span>\n\n <span className=\"trd-billable\">\n <Checkbox\n id=\"trd-billable\"\n checked={billable}\n onChange={() => setBillable((prev) => !prev)}\n />\n <Label htmlFor=\"trd-billable\" weight=\"regular\">\n Billable\n </Label>\n </span>\n </div>\n\n <button\n type=\"button\"\n className={\n showDescription\n ? \"trd-description-trigger\"\n : \"trd-description-trigger collapsed\"\n }\n onClick={() => setShowDescription((prev) => !prev)}\n >\n <CollapseExpandSingleIcon />\n <span>Description</span>\n </button>\n\n {showDescription ? (\n <div>\n <Textarea\n className=\"trd-textarea\"\n value={description}\n onChange={(event) => setDescription(event.target.value)}\n />\n </div>\n ) : null}\n\n <div className=\"trd-actions\">\n <Button\n variant=\"primary\"\n disabled={hours <= 0}\n onClick={handleSubmit}\n >\n Add Time Record\n </Button>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n </div>\n </div>\n\n {total > 0 ? (\n <button\n type=\"button\"\n className={showRecords ? \"trd-total\" : \"trd-total collapsed\"}\n onClick={() => setShowRecords((prev) => !prev)}\n >\n <CollapseExpandSingleIcon />\n <Header3 color=\"theme-secondary\" tabularNums>\n Total: {formatHours(total, false, true)}h\n </Header3>\n </button>\n ) : null}\n </div>\n\n {showRecords && records.length > 0 ? (\n <div className=\"trd-records\">\n {records.map((record) => (\n <div key={record.id} className=\"trd-record\">\n <span className=\"trd-record-left\">\n <Caption1 weight=\"bold\" color=\"secondary\">\n {formatDateRange(record.date, record.date)}\n </Caption1>\n <Body2>{record.userName}</Body2>\n <Caption1 color=\"secondary\">{record.jobType}</Caption1>\n </span>\n <Body2 weight=\"bold\" tabularNums>\n {formatHours(record.hours)}h\n </Body2>\n </div>\n ))}\n </div>\n ) : null}\n </StyledTimeRecordPaper>\n </SlideFromTop>\n </Modal>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceCodeSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/SourceCodeSection.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,WAAW,EAAE,YAAY,EAAY,MAAM,OAAO,CAAC;AAoHnE,KAAK,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAU1D,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;+CAC2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAiDD,sEAAsE;AACtE,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3D,kDAAkD;AAClD,UAAU,SAAS;IACjB,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"SourceCodeSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/SourceCodeSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ import { AddToListButton } from "../../components/Button/AddToListButton";
|
|
|
10
10
|
import { Dialog } from "../../components/Dialog";
|
|
11
11
|
import { IconButton } from "../../components/IconButton";
|
|
12
12
|
import { ArrowRightIcon, CancelCrossIcon, CheckIcon, CloseIcon, CloudDeployFailedIcon, CloudDeployIcon, EyeIcon, GearFailedIcon, GearIcon, GitBranchIcon, GitCommitIcon, GitMergeIcon, GitPullRequestClosedIcon, GitPullRequestDraftIcon, GitPullRequestIcon, GitRepositoryIcon, InfoSmallIcon, MessageIcon, TrashIcon } from "../../components/Icons";
|
|
13
|
+
import { StepSequence } from "../../components/StepSequence";
|
|
13
14
|
import { Tooltip } from "../../components/Tooltip";
|
|
14
|
-
import { Trigger } from "../../components/Trigger";
|
|
15
15
|
import { Body1, Caption1, Header3 } from "../../components/Typography";
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -807,49 +807,29 @@ const StageTip = _ref3 => {
|
|
|
807
807
|
}
|
|
808
808
|
}, d)));
|
|
809
809
|
};
|
|
810
|
-
const
|
|
811
|
-
displayName: "
|
|
810
|
+
const StyledSpineSequence = styled(StepSequence).withConfig({
|
|
811
|
+
displayName: "SourceCodeSection__StyledSpineSequence",
|
|
812
812
|
componentId: "sc-rvqbh5-0"
|
|
813
|
-
})(["
|
|
814
|
-
const StyledSpine = styled.div.withConfig({
|
|
815
|
-
displayName: "SourceCodeSection__StyledSpine",
|
|
816
|
-
componentId: "sc-rvqbh5-1"
|
|
817
|
-
})(["display:flex;align-items:flex-start;.circle{width:22px;height:22px;border-radius:50%;box-sizing:border-box;display:flex;align-items:center;justify-content:center;}.circle.done{background:var(--color-sucess-green);}.circle.progress{background:var(--color-primary);}.circle.failed{background:var(--red-alert);}.circle.todo{background:transparent;border:2px solid var(--color-theme-400);}.dot{border-radius:50%;}.dot-progress{width:7px;height:7px;background:#fff;}.dot-todo{width:6px;height:6px;background:var(--color-theme-500);}.connector{width:13px;height:2px;margin-top:10px;background:var(--color-theme-400);}.connector.on{background:var(--color-sucess-green);}"]);
|
|
813
|
+
})(["align-self:center;flex-shrink:0;"]);
|
|
818
814
|
const Spine = _ref4 => {
|
|
819
815
|
let items = _ref4.items,
|
|
820
816
|
onClick = _ref4.onClick;
|
|
821
|
-
return /*#__PURE__*/React.createElement(
|
|
822
|
-
|
|
817
|
+
return /*#__PURE__*/React.createElement(StyledSpineSequence, {
|
|
818
|
+
ariaLabel: "Open source code history",
|
|
823
819
|
onClick: onClick,
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
}
|
|
830
|
-
className: "circle " + s.state
|
|
831
|
-
}, s.state === "done" && /*#__PURE__*/React.createElement(CheckIcon, {
|
|
832
|
-
fill: "#fff",
|
|
833
|
-
width: 14,
|
|
834
|
-
height: 14
|
|
835
|
-
}), s.state === "failed" && /*#__PURE__*/React.createElement(CloseIcon, {
|
|
836
|
-
fill: "#fff",
|
|
837
|
-
width: 12,
|
|
838
|
-
height: 12
|
|
839
|
-
}), s.state === "progress" && /*#__PURE__*/React.createElement("span", {
|
|
840
|
-
className: "dot dot-progress"
|
|
841
|
-
}), s.state === "todo" && /*#__PURE__*/React.createElement("span", {
|
|
842
|
-
className: "dot dot-todo"
|
|
843
|
-
}))), i < items.length - 1 && /*#__PURE__*/React.createElement("span", {
|
|
844
|
-
className: items[i + 1].state !== "todo" ? "connector on" : "connector"
|
|
845
|
-
})))));
|
|
820
|
+
steps: items.map(s => ({
|
|
821
|
+
key: s.name,
|
|
822
|
+
state: s.state,
|
|
823
|
+
tooltip: /*#__PURE__*/React.createElement(StageTip, s)
|
|
824
|
+
}))
|
|
825
|
+
});
|
|
846
826
|
};
|
|
847
827
|
|
|
848
828
|
/* The whole content scrolls together (header + stream + note) once the stream
|
|
849
829
|
is long — the dialog title bar stays fixed, everything below scrolls. */
|
|
850
830
|
const StyledHistory = styled.div.withConfig({
|
|
851
831
|
displayName: "SourceCodeSection__StyledHistory",
|
|
852
|
-
componentId: "sc-rvqbh5-
|
|
832
|
+
componentId: "sc-rvqbh5-1"
|
|
853
833
|
})(["font-family:", ";max-height:60vh;overflow-y:auto;padding-right:4px;.hist-header{padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid var(--border-primary);}.hist-name{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}.hist-branches{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px;font-size:13px;color:var(--color-theme-600);}.hist-branch{display:inline-flex;align-items:center;gap:4px;}.hist-repo{display:inline-flex;align-items:center;gap:4px;margin-top:6px;font-size:13px;color:var(--color-theme-600);}.sc-chip{display:inline-flex;align-items:center;gap:3px;height:20px;padding:0 8px;border-radius:6px;font-size:11px;font-weight:700;letter-spacing:0.02em;flex-shrink:0;}.sc-chip.done{color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 15%,transparent);}.sc-chip.gone{color:var(--color-theme-900);background:var(--color-theme-200);border:1px solid var(--border-primary);}.sc-chip.fail{color:var(--red-alert);background:color-mix(in srgb,var(--red-alert) 15%,transparent);}.hist-event{display:flex;align-items:center;gap:12px;padding-bottom:20px;}.hist-event:last-child{padding-bottom:0;}.hist-icon{flex-shrink:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;}.hist-body{flex:1 1 auto;min-width:0;}.hist-title{display:flex;align-items:center;gap:6px;min-width:0;}.hist-title > *:first-child{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.hist-status{flex-shrink:0;display:inline-flex;}.hist-line{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:13px;line-height:1.5;color:var(--color-theme-600);}.hist-meta{flex-shrink:0;align-self:flex-start;text-align:right;white-space:nowrap;}.hist-note{display:flex;align-items:center;gap:6px;margin-top:16px;color:var(--color-theme-500);}.hist-note svg{flex-shrink:0;}"], SANS);
|
|
854
834
|
const HistoryDialog = _ref5 => {
|
|
855
835
|
let entry = _ref5.entry,
|
|
@@ -953,14 +933,14 @@ const HistoryDialog = _ref5 => {
|
|
|
953
933
|
|
|
954
934
|
const StyledSourceCode = styled.div.withConfig({
|
|
955
935
|
displayName: "SourceCodeSection__StyledSourceCode",
|
|
956
|
-
componentId: "sc-rvqbh5-
|
|
936
|
+
componentId: "sc-rvqbh5-2"
|
|
957
937
|
})(["font-family:", ";margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--border-primary);.sc-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px;}.sc-completed-row{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border-primary);}.sc-add{margin-top:8px;padding-top:12px;border-top:1px solid var(--border-primary);}.sc-add .c--add-to-list-btn svg{box-sizing:content-box;}.sc-item{padding:12px 0;}.sc-item + .sc-item{border-top:1px solid var(--border-primary);}.sc-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;}.sc-main{flex:1 1 0%;min-width:0;}.sc-name{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0;}.sc-lead{flex-shrink:0;display:inline-flex;color:var(--color-theme-600);}.sc-title{flex:0 1 auto;min-width:0;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.sc-title.strike{text-decoration:line-through;}.sc-title.strike-link{text-decoration:line-through;}.sc-title.strike-link:hover{text-decoration:none;}.sc-sigs{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:13px;color:var(--color-theme-600);}.sc-sig{display:inline-flex;align-items:center;gap:4px;}.sc-chip{display:inline-flex;align-items:center;gap:3px;height:20px;padding:0 8px;border-radius:6px;font-size:11px;font-weight:700;letter-spacing:0.02em;flex-shrink:0;}.sc-chip.done{color:var(--color-primary);background:color-mix(in srgb,var(--color-primary) 15%,transparent);}.sc-chip.gone{color:var(--color-theme-900);background:var(--color-theme-200);border:1px solid var(--border-primary);}.sc-avatars{display:flex;align-items:center;}.sc-sha{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;color:var(--color-theme-600);}.sc-diff .add{color:var(--color-sucess-green);}.sc-diff .del{color:var(--red-alert);}.sc-muted{color:var(--color-theme-600);}.sc-refs{display:inline-flex;align-items:center;gap:6px;}.sc-refs .ref-link{color:var(--color-primary);font-weight:500;}"], SANS);
|
|
958
938
|
|
|
959
939
|
/* Element name — a link that opens the object in a new tab. Keeps the row's
|
|
960
940
|
typography (inherits color + weight), turns primary on hover, link cursor. */
|
|
961
941
|
const TitleLink = styled.a.withConfig({
|
|
962
942
|
displayName: "SourceCodeSection__TitleLink",
|
|
963
|
-
componentId: "sc-rvqbh5-
|
|
943
|
+
componentId: "sc-rvqbh5-3"
|
|
964
944
|
})(["color:inherit;text-decoration:none;cursor:pointer;transition:color 200ms ease;&:hover{color:var(--color-primary);}"]);
|
|
965
945
|
const IssueRow = _ref6 => {
|
|
966
946
|
let issue = _ref6.issue;
|