construction-gantt 0.1.0
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/CHANGELOG.md +57 -0
- package/README.md +5 -0
- package/dist/export/index.cjs +1 -0
- package/dist/export/index.d.cts +112 -0
- package/dist/export/index.d.cts.map +1 -0
- package/dist/export/index.d.ts +112 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +1 -0
- package/dist/index.cjs +3492 -0
- package/dist/index.d.cts +628 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +628 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3461 -0
- package/dist/pdf-CAQDrX0w.cjs +120 -0
- package/dist/pdf-CBaoJRTI.js +120 -0
- package/dist/png-C8t74695.cjs +88 -0
- package/dist/png-DKZeKnRh.js +88 -0
- package/dist/xlsx-5FRPFck7.js +89 -0
- package/dist/xlsx-Gh5L_NL3.cjs +111 -0
- package/package.json +86 -0
- package/src/Gantt.css +23 -0
- package/src/Gantt.tsx +636 -0
- package/src/SpikeGantt.tsx +114 -0
- package/src/analysis.ts +83 -0
- package/src/baseline.ts +119 -0
- package/src/calendars/canterbury-table.ts +44 -0
- package/src/calendars/internal/computus.ts +25 -0
- package/src/calendars/internal/date-utils.ts +13 -0
- package/src/calendars/internal/mondayisation.ts +46 -0
- package/src/calendars/internal/month-rules.ts +65 -0
- package/src/calendars/matariki-table.ts +63 -0
- package/src/calendars/nz-holidays.ts +214 -0
- package/src/editing/command-history.ts +78 -0
- package/src/editing/commands.ts +327 -0
- package/src/editing/composite-command.ts +64 -0
- package/src/editing/draft-project.ts +59 -0
- package/src/editing/errors.ts +14 -0
- package/src/editing/factories.ts +92 -0
- package/src/editing/use-editable-project.ts +122 -0
- package/src/export/index.ts +12 -0
- package/src/export/offscreen.tsx +89 -0
- package/src/export/pdf-dimensions.ts +64 -0
- package/src/export/pdf.ts +68 -0
- package/src/export/png.ts +48 -0
- package/src/export/types.ts +42 -0
- package/src/export/xlsx.ts +70 -0
- package/src/index.ts +89 -0
- package/src/mspdi/parse.ts +820 -0
- package/src/mspdi/serialize.ts +352 -0
- package/src/mspdi/types.ts +53 -0
- package/src/schedule.ts +470 -0
- package/src/topological-sort.ts +51 -0
- package/src/types.ts +254 -0
- package/src/visibility.ts +35 -0
- package/src/working-time.ts +235 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# construction-gantt
|
|
2
|
+
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- First public release. Ships the v0.1 scheduling engine, v0.2 MSPDI XML interop, v0.3 NZ public holidays pre-seed, and v0.4 editing-model foundation under one MIT-licensed package on npm.
|
|
8
|
+
|
|
9
|
+
## What's in 0.1.0
|
|
10
|
+
|
|
11
|
+
### Scheduling engine (v0.1)
|
|
12
|
+
|
|
13
|
+
- Forward + backward CPM pass with multi-path critical-path detection.
|
|
14
|
+
- All 8 MS Project constraint types (ASAP, ALAP, MSO, MFO, SNET, SNLT, FNET, FNLT).
|
|
15
|
+
- First-class negative slack (the contract-trouble signal every existing alternative clips to zero).
|
|
16
|
+
- Manual-vs-auto schedule mode per task; summary-task aggregation as `max(child finish) − min(child start)`.
|
|
17
|
+
- Working-time calendars with partial-day shifts and per-date exceptions.
|
|
18
|
+
- Multi-baseline data model — up to 11 baselines matching MS Project's `Baseline 0–10`.
|
|
19
|
+
- Public `<Gantt>` component rendering via free SVAR React Gantt; engine runs internally.
|
|
20
|
+
- Custom columns (`GanttColumn[]`) for project-specific fields.
|
|
21
|
+
- Today line + milestone markers; weekend/holiday shading; hierarchy collapse/expand.
|
|
22
|
+
- Render-only visibility filter (`visibleTaskIds`) — CPM stays correct when consumers hide tasks (ADR-005).
|
|
23
|
+
|
|
24
|
+
### Exports (v0.1)
|
|
25
|
+
|
|
26
|
+
- `exportPNG / exportPDF / exportXLSX` via imperative ref handle.
|
|
27
|
+
- Full-project render regardless of on-screen scroll position.
|
|
28
|
+
- Behind `construction-gantt/export` subpath with lazy-imported deps (consumers who never call exports pay zero bundle cost).
|
|
29
|
+
|
|
30
|
+
### MSPDI XML interop (v0.2)
|
|
31
|
+
|
|
32
|
+
- Pure-TS round-trip of `parseMspdi` / `serializeMspdi`.
|
|
33
|
+
- Covers Tasks + PredecessorLinks (all 4 dependency types, lag in tenths-of-a-minute), Calendars (workWeek with split shifts + exceptions), Resources (UID/Name/CalendarUID), Assignments (taskId/resourceId/units), and Baselines (per-task `<Baseline>` Number=0..10).
|
|
34
|
+
- `parseMspdi` returns `{ project, droppedFields }` — unknown elements never silently drop.
|
|
35
|
+
|
|
36
|
+
### NZ public holidays (v0.3)
|
|
37
|
+
|
|
38
|
+
- `nzPublicHolidays(years, region)` returns `CalendarException[]` for all 13 statutory NZ regions, years 2022–2052.
|
|
39
|
+
- `nzDefaultCalendar({ years, region })` for a one-call working calendar.
|
|
40
|
+
- Matariki dates from Te Kāhui o Matariki Public Holiday Act 2022; Canterbury Show Day from employment.govt.nz year-by-year (range bounded by published years).
|
|
41
|
+
|
|
42
|
+
### Editing model (v0.4 foundation — ADR-006)
|
|
43
|
+
|
|
44
|
+
- `useEditableProject(initial)` React hook with `enqueue / commit / cancel / undo / redo / canUndo / canRedo / isDirty`.
|
|
45
|
+
- Typed `EditCommand` interface + 6 concrete commands (Create/Update/Delete × Task/Link) + `CompositeCommand` wrapper.
|
|
46
|
+
- Ten ergonomic factories: `renameTask`, `setTaskStart`, `setTaskDuration`, `setTaskProgress`, `updateTask`, `createTask`, `deleteTask`, `linkTasks`, `updateLink`, `deleteLink`.
|
|
47
|
+
- Project-level draft overlay; single-stack undo with compound commits on draft commit.
|
|
48
|
+
- Engine recomputes (`schedule()`) on every effective state change — ADR-005 engine-first invariant preserved.
|
|
49
|
+
- UX patterns (inline-row vs modal vs drag-handle) are consumer choice — the hook is UI-agnostic.
|
|
50
|
+
|
|
51
|
+
## License
|
|
52
|
+
|
|
53
|
+
MIT through v1.0 per ADR-004. Past releases stay MIT forever; future commercial-tier optionality reserved for v1.0+.
|
|
54
|
+
|
|
55
|
+
## Status
|
|
56
|
+
|
|
57
|
+
292 Vitest tests, all passing. Foundational ADRs locked (ADR-001 through ADR-006). See `ROADMAP.md` for what's still pending (partial-day calendars UI, weather buffer widget, MSPDI Primavera P6 stretch, v0.4 editing-model UX patterns).
|
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# construction-gantt
|
|
2
|
+
|
|
3
|
+
MIT-licensed React Gantt component for construction project management, with a real scheduling engine and MS Project-compatible data interchange.
|
|
4
|
+
|
|
5
|
+
For the full story — positioning, feature list, and roadmap — see the [repository root README](../../README.md) and [DECISIONS.md](../../DECISIONS.md).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
type TaskId = string | number;
|
|
2
|
+
type ResourceId = string | number;
|
|
3
|
+
type CalendarId = string | number;
|
|
4
|
+
type TaskType = 'task' | 'summary' | 'milestone';
|
|
5
|
+
type ScheduleMode = 'auto' | 'manual';
|
|
6
|
+
/**
|
|
7
|
+
* MS Project's 8 constraint types.
|
|
8
|
+
*
|
|
9
|
+
* - ASAP / ALAP: scheduling preferences, no date required.
|
|
10
|
+
* - MSO / MFO: hard constraints, pin the date; override predecessor logic.
|
|
11
|
+
* - SNET / SNLT / FNET / FNLT: soft date bounds.
|
|
12
|
+
*
|
|
13
|
+
* Hard constraints can produce negative slack — the contract-trouble
|
|
14
|
+
* signal we surface rather than silently clip to zero (ADR-003).
|
|
15
|
+
*/
|
|
16
|
+
type ConstraintType = 'ASAP' | 'ALAP' | 'MSO' | 'MFO' | 'SNET' | 'SNLT' | 'FNET' | 'FNLT';
|
|
17
|
+
interface Constraint {
|
|
18
|
+
type: ConstraintType;
|
|
19
|
+
/** Required for all types except ASAP and ALAP. */
|
|
20
|
+
date?: Date;
|
|
21
|
+
}
|
|
22
|
+
interface Task {
|
|
23
|
+
id: TaskId;
|
|
24
|
+
text: string;
|
|
25
|
+
/** Hierarchy parent. Undefined = top-level. */
|
|
26
|
+
parent?: TaskId;
|
|
27
|
+
type: TaskType;
|
|
28
|
+
scheduleMode: ScheduleMode;
|
|
29
|
+
/**
|
|
30
|
+
* For summary tasks: are children currently expanded?
|
|
31
|
+
* Default true (expanded). Toggled by the user via the renderer's
|
|
32
|
+
* collapse/expand chevron.
|
|
33
|
+
*/
|
|
34
|
+
open?: boolean;
|
|
35
|
+
/** Working-time duration in minutes. For milestones this is 0. */
|
|
36
|
+
duration: number;
|
|
37
|
+
/**
|
|
38
|
+
* User-set start / end. For manual-scheduled tasks these are authoritative.
|
|
39
|
+
* For auto-scheduled tasks the engine recomputes them and writes the
|
|
40
|
+
* result back. Either way, the engine populates `computed` with the
|
|
41
|
+
* full forward/backward-pass data.
|
|
42
|
+
*/
|
|
43
|
+
start: Date;
|
|
44
|
+
end: Date;
|
|
45
|
+
/** Percent complete, 0-100. */
|
|
46
|
+
progress: number;
|
|
47
|
+
constraint?: Constraint;
|
|
48
|
+
/** Resource assignments. Order is not meaningful. */
|
|
49
|
+
resourceIds?: ResourceId[];
|
|
50
|
+
/**
|
|
51
|
+
* Calendar override. If unset, the task uses the project default calendar.
|
|
52
|
+
* If a resource on the task has a calendar, the engine reconciles them
|
|
53
|
+
* (resource calendar wins for activities depending on that resource).
|
|
54
|
+
*/
|
|
55
|
+
calendarId?: CalendarId;
|
|
56
|
+
/** Populated by the scheduling engine. Read-only for user code. */
|
|
57
|
+
computed?: TaskComputed;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Forward/backward-pass output. Filled in by `schedule()`.
|
|
61
|
+
*
|
|
62
|
+
* `totalSlack` is the contract-trouble signal: when negative, the task is
|
|
63
|
+
* already late against a downstream constraint and the schedule is
|
|
64
|
+
* infeasible without intervention. We display this; we don't clip it.
|
|
65
|
+
*/
|
|
66
|
+
interface TaskComputed {
|
|
67
|
+
earlyStart: Date;
|
|
68
|
+
earlyFinish: Date;
|
|
69
|
+
lateStart: Date;
|
|
70
|
+
lateFinish: Date;
|
|
71
|
+
/** Working-minutes of total float. Can be negative. */
|
|
72
|
+
totalSlack: number;
|
|
73
|
+
/** Working-minutes of free float (slack against the earliest successor). */
|
|
74
|
+
freeSlack: number;
|
|
75
|
+
isCritical: boolean;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface PngExportOptions {
|
|
79
|
+
/** Background colour for the captured canvas. Defaults to '#ffffff'. */
|
|
80
|
+
backgroundColor?: string;
|
|
81
|
+
/** Pixel ratio. Defaults to window.devicePixelRatio || 2. */
|
|
82
|
+
pixelRatio?: number;
|
|
83
|
+
}
|
|
84
|
+
interface PdfExportOptions {
|
|
85
|
+
/** Page orientation. Defaults to 'landscape' (Gantt charts are wide). */
|
|
86
|
+
orientation?: 'landscape' | 'portrait';
|
|
87
|
+
/** Page size. Defaults to 'a3'. */
|
|
88
|
+
format?: 'a4' | 'a3' | 'letter';
|
|
89
|
+
/** Margin in mm. Defaults to 10. */
|
|
90
|
+
margin?: number;
|
|
91
|
+
/** Background colour for the underlying PNG. Defaults to '#ffffff'. */
|
|
92
|
+
backgroundColor?: string;
|
|
93
|
+
}
|
|
94
|
+
interface XlsxColumn {
|
|
95
|
+
header: string;
|
|
96
|
+
/** A key on Task, or a function returning the cell value. */
|
|
97
|
+
value: keyof Task | ((task: Task) => string | number | Date | undefined);
|
|
98
|
+
}
|
|
99
|
+
interface XlsxExportOptions {
|
|
100
|
+
/** Sheet name. Defaults to 'Programme'. */
|
|
101
|
+
sheetName?: string;
|
|
102
|
+
/** Override the default column set. */
|
|
103
|
+
columns?: XlsxColumn[];
|
|
104
|
+
}
|
|
105
|
+
interface GanttHandle {
|
|
106
|
+
exportPNG(options?: PngExportOptions): Promise<Blob>;
|
|
107
|
+
exportPDF(options?: PdfExportOptions): Promise<Blob>;
|
|
108
|
+
exportXLSX(options?: XlsxExportOptions): Promise<Blob>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export type { GanttHandle, PdfExportOptions, PngExportOptions, XlsxColumn, XlsxExportOptions };
|
|
112
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sources":["../../src/types.ts","../../src/export/types.ts"],"mappings":"AAAA,KAAK,MAAM;AAEX,KAAK,UAAU;AACf,KAAK,UAAU;AAEf,KAAK,QAAQ;AACb,KAAK,YAAY;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc;AACnB,UAAU,UAAU;AACpB,UAAU,cAAc;AACxB;AACA,WAAW,IAAI;AACf;AACA,UAAU,IAAI;AACd,QAAQ,MAAM;AACd;AACA;AACA,aAAa,MAAM;AACnB,UAAU,QAAQ;AAClB,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,IAAI;AACf,SAAS,IAAI;AACb;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB,gBAAgB,IAAI;AACpB,iBAAiB,IAAI;AACrB,eAAe,IAAI;AACnB,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AC5EA,UAAU,gBAAgB;AAC1B;AACA;AACA;AACA;AACA;AACA,UAAU,gBAAgB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,UAAU;AACpB;AACA;AACA,iBAAiB,IAAI,WAAW,IAAI,uBAAuB,IAAI;AAC/D;AACA,UAAU,iBAAiB;AAC3B;AACA;AACA;AACA,cAAc,UAAU;AACxB;AACA,UAAU,WAAW;AACrB,wBAAwB,gBAAgB,GAAG,OAAO,CAAC,IAAI;AACvD,wBAAwB,gBAAgB,GAAG,OAAO,CAAC,IAAI;AACvD,yBAAyB,iBAAiB,GAAG,OAAO,CAAC,IAAI;AACzD;;;;","names":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
type TaskId = string | number;
|
|
2
|
+
type ResourceId = string | number;
|
|
3
|
+
type CalendarId = string | number;
|
|
4
|
+
type TaskType = 'task' | 'summary' | 'milestone';
|
|
5
|
+
type ScheduleMode = 'auto' | 'manual';
|
|
6
|
+
/**
|
|
7
|
+
* MS Project's 8 constraint types.
|
|
8
|
+
*
|
|
9
|
+
* - ASAP / ALAP: scheduling preferences, no date required.
|
|
10
|
+
* - MSO / MFO: hard constraints, pin the date; override predecessor logic.
|
|
11
|
+
* - SNET / SNLT / FNET / FNLT: soft date bounds.
|
|
12
|
+
*
|
|
13
|
+
* Hard constraints can produce negative slack — the contract-trouble
|
|
14
|
+
* signal we surface rather than silently clip to zero (ADR-003).
|
|
15
|
+
*/
|
|
16
|
+
type ConstraintType = 'ASAP' | 'ALAP' | 'MSO' | 'MFO' | 'SNET' | 'SNLT' | 'FNET' | 'FNLT';
|
|
17
|
+
interface Constraint {
|
|
18
|
+
type: ConstraintType;
|
|
19
|
+
/** Required for all types except ASAP and ALAP. */
|
|
20
|
+
date?: Date;
|
|
21
|
+
}
|
|
22
|
+
interface Task {
|
|
23
|
+
id: TaskId;
|
|
24
|
+
text: string;
|
|
25
|
+
/** Hierarchy parent. Undefined = top-level. */
|
|
26
|
+
parent?: TaskId;
|
|
27
|
+
type: TaskType;
|
|
28
|
+
scheduleMode: ScheduleMode;
|
|
29
|
+
/**
|
|
30
|
+
* For summary tasks: are children currently expanded?
|
|
31
|
+
* Default true (expanded). Toggled by the user via the renderer's
|
|
32
|
+
* collapse/expand chevron.
|
|
33
|
+
*/
|
|
34
|
+
open?: boolean;
|
|
35
|
+
/** Working-time duration in minutes. For milestones this is 0. */
|
|
36
|
+
duration: number;
|
|
37
|
+
/**
|
|
38
|
+
* User-set start / end. For manual-scheduled tasks these are authoritative.
|
|
39
|
+
* For auto-scheduled tasks the engine recomputes them and writes the
|
|
40
|
+
* result back. Either way, the engine populates `computed` with the
|
|
41
|
+
* full forward/backward-pass data.
|
|
42
|
+
*/
|
|
43
|
+
start: Date;
|
|
44
|
+
end: Date;
|
|
45
|
+
/** Percent complete, 0-100. */
|
|
46
|
+
progress: number;
|
|
47
|
+
constraint?: Constraint;
|
|
48
|
+
/** Resource assignments. Order is not meaningful. */
|
|
49
|
+
resourceIds?: ResourceId[];
|
|
50
|
+
/**
|
|
51
|
+
* Calendar override. If unset, the task uses the project default calendar.
|
|
52
|
+
* If a resource on the task has a calendar, the engine reconciles them
|
|
53
|
+
* (resource calendar wins for activities depending on that resource).
|
|
54
|
+
*/
|
|
55
|
+
calendarId?: CalendarId;
|
|
56
|
+
/** Populated by the scheduling engine. Read-only for user code. */
|
|
57
|
+
computed?: TaskComputed;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Forward/backward-pass output. Filled in by `schedule()`.
|
|
61
|
+
*
|
|
62
|
+
* `totalSlack` is the contract-trouble signal: when negative, the task is
|
|
63
|
+
* already late against a downstream constraint and the schedule is
|
|
64
|
+
* infeasible without intervention. We display this; we don't clip it.
|
|
65
|
+
*/
|
|
66
|
+
interface TaskComputed {
|
|
67
|
+
earlyStart: Date;
|
|
68
|
+
earlyFinish: Date;
|
|
69
|
+
lateStart: Date;
|
|
70
|
+
lateFinish: Date;
|
|
71
|
+
/** Working-minutes of total float. Can be negative. */
|
|
72
|
+
totalSlack: number;
|
|
73
|
+
/** Working-minutes of free float (slack against the earliest successor). */
|
|
74
|
+
freeSlack: number;
|
|
75
|
+
isCritical: boolean;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
interface PngExportOptions {
|
|
79
|
+
/** Background colour for the captured canvas. Defaults to '#ffffff'. */
|
|
80
|
+
backgroundColor?: string;
|
|
81
|
+
/** Pixel ratio. Defaults to window.devicePixelRatio || 2. */
|
|
82
|
+
pixelRatio?: number;
|
|
83
|
+
}
|
|
84
|
+
interface PdfExportOptions {
|
|
85
|
+
/** Page orientation. Defaults to 'landscape' (Gantt charts are wide). */
|
|
86
|
+
orientation?: 'landscape' | 'portrait';
|
|
87
|
+
/** Page size. Defaults to 'a3'. */
|
|
88
|
+
format?: 'a4' | 'a3' | 'letter';
|
|
89
|
+
/** Margin in mm. Defaults to 10. */
|
|
90
|
+
margin?: number;
|
|
91
|
+
/** Background colour for the underlying PNG. Defaults to '#ffffff'. */
|
|
92
|
+
backgroundColor?: string;
|
|
93
|
+
}
|
|
94
|
+
interface XlsxColumn {
|
|
95
|
+
header: string;
|
|
96
|
+
/** A key on Task, or a function returning the cell value. */
|
|
97
|
+
value: keyof Task | ((task: Task) => string | number | Date | undefined);
|
|
98
|
+
}
|
|
99
|
+
interface XlsxExportOptions {
|
|
100
|
+
/** Sheet name. Defaults to 'Programme'. */
|
|
101
|
+
sheetName?: string;
|
|
102
|
+
/** Override the default column set. */
|
|
103
|
+
columns?: XlsxColumn[];
|
|
104
|
+
}
|
|
105
|
+
interface GanttHandle {
|
|
106
|
+
exportPNG(options?: PngExportOptions): Promise<Blob>;
|
|
107
|
+
exportPDF(options?: PdfExportOptions): Promise<Blob>;
|
|
108
|
+
exportXLSX(options?: XlsxExportOptions): Promise<Blob>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export type { GanttHandle, PdfExportOptions, PngExportOptions, XlsxColumn, XlsxExportOptions };
|
|
112
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../src/types.ts","../../src/export/types.ts"],"mappings":"AAAA,KAAK,MAAM;AAEX,KAAK,UAAU;AACf,KAAK,UAAU;AAEf,KAAK,QAAQ;AACb,KAAK,YAAY;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,cAAc;AACnB,UAAU,UAAU;AACpB,UAAU,cAAc;AACxB;AACA,WAAW,IAAI;AACf;AACA,UAAU,IAAI;AACd,QAAQ,MAAM;AACd;AACA;AACA,aAAa,MAAM;AACnB,UAAU,QAAQ;AAClB,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,IAAI;AACf,SAAS,IAAI;AACb;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB,gBAAgB,IAAI;AACpB,iBAAiB,IAAI;AACrB,eAAe,IAAI;AACnB,gBAAgB,IAAI;AACpB;AACA;AACA;AACA;AACA;AACA;;AC5EA,UAAU,gBAAgB;AAC1B;AACA;AACA;AACA;AACA;AACA,UAAU,gBAAgB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,UAAU;AACpB;AACA;AACA,iBAAiB,IAAI,WAAW,IAAI,uBAAuB,IAAI;AAC/D;AACA,UAAU,iBAAiB;AAC3B;AACA;AACA;AACA,cAAc,UAAU;AACxB;AACA,UAAU,WAAW;AACrB,wBAAwB,gBAAgB,GAAG,OAAO,CAAC,IAAI;AACvD,wBAAwB,gBAAgB,GAAG,OAAO,CAAC,IAAI;AACvD,yBAAyB,iBAAiB,GAAG,OAAO,CAAC,IAAI;AACzD;;;;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|