@manakind/manuia-ui 0.22.0 → 0.24.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/README.md +21 -3
- package/dist/action-item/action-item.css +7 -0
- package/dist/action-item/action-item.d.ts +14 -2
- package/dist/action-item/action-item.d.ts.map +1 -1
- package/dist/action-item/action-item.js +5 -2
- package/dist/action-item/action-item.js.map +1 -1
- package/dist/category-card/category-card.css +12 -0
- package/dist/category-card/category-card.d.ts +7 -1
- package/dist/category-card/category-card.d.ts.map +1 -1
- package/dist/category-card/category-card.js +3 -3
- package/dist/category-card/category-card.js.map +1 -1
- package/dist/category-label/category-label.css +75 -0
- package/dist/category-label/category-label.css.d.ts +2 -0
- package/dist/category-label/category-label.d.ts +40 -0
- package/dist/category-label/category-label.d.ts.map +1 -0
- package/dist/category-label/category-label.js +25 -0
- package/dist/category-label/category-label.js.map +1 -0
- package/dist/category-label/index.d.ts +3 -0
- package/dist/category-label/index.d.ts.map +1 -0
- package/dist/category-label/index.js +2 -0
- package/dist/category-label/index.js.map +1 -0
- package/dist/focus-item/focus-item.d.ts +1 -1
- package/dist/focus-item/focus-item.d.ts.map +1 -1
- package/dist/goal-card/goal-card.d.ts +4 -7
- package/dist/goal-card/goal-card.d.ts.map +1 -1
- package/dist/goal-card/goal-card.js.map +1 -1
- package/dist/goal-categories/goal-categories.css +0 -25
- package/dist/goal-categories/goal-categories.d.ts +5 -1
- package/dist/goal-categories/goal-categories.d.ts.map +1 -1
- package/dist/goal-categories/goal-categories.js +4 -6
- package/dist/goal-categories/goal-categories.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/item-accent.css +33 -0
- package/dist/item-accent.css.d.ts +2 -0
- package/dist/item-accent.d.ts +13 -0
- package/dist/item-accent.d.ts.map +1 -0
- package/dist/item-accent.js +18 -0
- package/dist/item-accent.js.map +1 -0
- package/dist/milestone-timeline/index.d.ts +3 -0
- package/dist/milestone-timeline/index.d.ts.map +1 -0
- package/dist/milestone-timeline/index.js +2 -0
- package/dist/milestone-timeline/index.js.map +1 -0
- package/dist/milestone-timeline/milestone-timeline.css +187 -0
- package/dist/milestone-timeline/milestone-timeline.css.d.ts +2 -0
- package/dist/milestone-timeline/milestone-timeline.d.ts +100 -0
- package/dist/milestone-timeline/milestone-timeline.d.ts.map +1 -0
- package/dist/milestone-timeline/milestone-timeline.js +45 -0
- package/dist/milestone-timeline/milestone-timeline.js.map +1 -0
- package/dist/outcome-item/outcome-item.css +7 -0
- package/dist/outcome-item/outcome-item.d.ts +14 -2
- package/dist/outcome-item/outcome-item.d.ts.map +1 -1
- package/dist/outcome-item/outcome-item.js +5 -2
- package/dist/outcome-item/outcome-item.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# `@manakind/manuia-ui`
|
|
2
2
|
|
|
3
3
|
The Manuia-flavored surface of the [Manakind](https://github.com/Humanity-Plus/Manakind)
|
|
4
|
-
design system.
|
|
5
|
-
`@manakind/ui-core
|
|
6
|
-
to Manuia) will live alongside this barrel as they are built.
|
|
4
|
+
design system. It re-exports the shared base components from
|
|
5
|
+
`@manakind/ui-core` alongside Manuia-specific compositions.
|
|
7
6
|
|
|
8
7
|
Pair it with `@manakind/manuia-tokens`, whose `theme.css` resolves the `--ds-*`
|
|
9
8
|
contract into Manuia's visual style.
|
|
@@ -42,6 +41,25 @@ export function Continue() {
|
|
|
42
41
|
}
|
|
43
42
|
```
|
|
44
43
|
|
|
44
|
+
## Components
|
|
45
|
+
|
|
46
|
+
The root `@manakind/manuia-ui` export includes:
|
|
47
|
+
|
|
48
|
+
- All shared components, including `Breadcrumb` for ancestor navigation.
|
|
49
|
+
- `CategoryLabel` for one category's name and colour dot or glyph, optionally linked.
|
|
50
|
+
- `GoalCategories` for a list of category labels, with an optional overflow count.
|
|
51
|
+
- `MilestoneTimeline` for a project's start, milestones and end, with progress,
|
|
52
|
+
product-supplied controls and a collapsible ordered list.
|
|
53
|
+
- `ActionItem` and `OutcomeItem` for rows with an optional `eyebrow` above the title
|
|
54
|
+
and a validated `accentColor`. Row styles, including sortable transforms, are preserved.
|
|
55
|
+
- `ActionList`, `CategoryCard`, `FocusItem`, `FocusList`, `GoalCard`, `GoalList`,
|
|
56
|
+
`GoalListItem`, `GoalStatusMenu` and `GoalTabTrigger`.
|
|
57
|
+
|
|
58
|
+
See the [Breadcrumb](https://github.com/Humanity-Plus/Manakind/blob/main/docs/components/breadcrumb.mdx),
|
|
59
|
+
[CategoryLabel](https://github.com/Humanity-Plus/Manakind/blob/main/docs/components/category-label.mdx) and
|
|
60
|
+
[MilestoneTimeline](https://github.com/Humanity-Plus/Manakind/blob/main/docs/components/milestone-timeline.mdx) docs for usage and
|
|
61
|
+
accessibility.
|
|
62
|
+
|
|
45
63
|
## License
|
|
46
64
|
|
|
47
65
|
MIT — see [LICENSE](./LICENSE).
|
|
@@ -218,6 +218,13 @@
|
|
|
218
218
|
display: contents;
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
+
/* The breadcrumb keeps its own line above the toggle and title, under the title's column. */
|
|
222
|
+
& .mui-action-item__eyebrow {
|
|
223
|
+
order: -1;
|
|
224
|
+
flex: 0 0 calc(100% - var(--mui-action-item-indent));
|
|
225
|
+
margin-inline-start: var(--mui-action-item-indent);
|
|
226
|
+
}
|
|
227
|
+
|
|
221
228
|
& .mui-action-item__title {
|
|
222
229
|
flex: 1 1 0;
|
|
223
230
|
align-self: center;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type BadgeVariant, type IconSource } from '@manakind/ui-core';
|
|
2
2
|
import type { ComponentProps, ReactNode } from 'react';
|
|
3
3
|
import { type GoalCategory } from '../goal-categories';
|
|
4
|
+
import '../item-accent.css';
|
|
4
5
|
import '../leading-slot.css';
|
|
5
6
|
import './action-item.css';
|
|
6
7
|
/** One fact about the action, shown after the title: its project, outcome, effort, duration. */
|
|
@@ -50,7 +51,7 @@ export interface ActionItemProps extends Omit<ComponentProps<'li'>, 'title' | 'c
|
|
|
50
51
|
priority?: ActionItemPriority;
|
|
51
52
|
/** Facts shown after the title, each with an optional glyph. */
|
|
52
53
|
details?: ActionItemDetail[];
|
|
53
|
-
/** Categories the action belongs to,
|
|
54
|
+
/** Categories the action belongs to, each a `CategoryLabel`. */
|
|
54
55
|
categories?: GoalCategory[];
|
|
55
56
|
/** How many categories to show before collapsing into `+N more`. Defaults to 2, as on `GoalListItem`. */
|
|
56
57
|
maxVisibleCategories?: number;
|
|
@@ -94,6 +95,17 @@ export interface ActionItemProps extends Omit<ComponentProps<'li'>, 'title' | 'c
|
|
|
94
95
|
* it is given. Defaults to `default`.
|
|
95
96
|
*/
|
|
96
97
|
density?: ActionItemDensity;
|
|
98
|
+
/**
|
|
99
|
+
* Where the item lives, above its title: a `Breadcrumb` of its category,
|
|
100
|
+
* project or outcome, say. Rendered as given.
|
|
101
|
+
*/
|
|
102
|
+
eyebrow?: ReactNode;
|
|
103
|
+
/**
|
|
104
|
+
* The item's category colour as a straight bar along the card's leading
|
|
105
|
+
* edge, for scanning a long mixed list. Data, not a token: validated by
|
|
106
|
+
* `safeColor` and ignored when not a colour. Leave it off a lone item.
|
|
107
|
+
*/
|
|
108
|
+
accentColor?: string;
|
|
97
109
|
/** Extra class names on the `<li>`. */
|
|
98
110
|
className?: string;
|
|
99
111
|
/**
|
|
@@ -128,5 +140,5 @@ export interface ActionItemProps extends Omit<ComponentProps<'li'>, 'title' | 'c
|
|
|
128
140
|
* count a screen reader hears is the whole list's, and a sortable list
|
|
129
141
|
* passes its drag library's ref and transform style.
|
|
130
142
|
*/
|
|
131
|
-
export declare function ActionItem({ title, completed, onCompletedChange, completeIcon, priority, details, categories, maxVisibleCategories, note, noteTone, selected, onSelectedChange, controls, secondary, leading, titleAs, density, className, children, ...listItemProps }: ActionItemProps): import("react/jsx-runtime").JSX.Element;
|
|
143
|
+
export declare function ActionItem({ title, completed, onCompletedChange, completeIcon, priority, details, categories, maxVisibleCategories, note, noteTone, selected, onSelectedChange, controls, secondary, leading, titleAs, density, eyebrow, accentColor, className, children, ...listItemProps }: ActionItemProps): import("react/jsx-runtime").JSX.Element;
|
|
132
144
|
//# sourceMappingURL=action-item.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-item.d.ts","sourceRoot":"","sources":["../../src/action-item/action-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAOjB,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;AAE3B,gGAAgG;AAChG,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,mFAAmF;AACnF,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhE,sGAAsG;AACtG,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,KAAK,EAAE,uBAAuB,CAAC;IAC/B,oHAAoH;IACpH,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,4GAA4G;AAC5G,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;AAE5E;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;IACtE,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,+DAA+D;IAC/D,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,gEAAgE;IAChE,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"action-item.d.ts","sourceRoot":"","sources":["../../src/action-item/action-item.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Badge, Card, CardTitle, Checkbox, cx, Icon, IconButton, } from '@manakind/ui-core';
|
|
3
3
|
import { GoalCategories } from '../goal-categories';
|
|
4
|
+
import '../item-accent.css';
|
|
5
|
+
import { accentProps } from '../item-accent';
|
|
4
6
|
import '../leading-slot.css';
|
|
5
7
|
import './action-item.css';
|
|
6
8
|
/**
|
|
@@ -28,7 +30,7 @@ import './action-item.css';
|
|
|
28
30
|
* count a screen reader hears is the whole list's, and a sortable list
|
|
29
31
|
* passes its drag library's ref and transform style.
|
|
30
32
|
*/
|
|
31
|
-
export function ActionItem({ title, completed, onCompletedChange, completeIcon, priority, details = [], categories = [], maxVisibleCategories = 2, note, noteTone = 'muted', selected = false, onSelectedChange, controls, secondary, leading, titleAs = 'h3', density = 'default', className, children, ...listItemProps }) {
|
|
33
|
+
export function ActionItem({ title, completed, onCompletedChange, completeIcon, priority, details = [], categories = [], maxVisibleCategories = 2, note, noteTone = 'muted', selected = false, onSelectedChange, controls, secondary, leading, titleAs = 'h3', density = 'default', eyebrow, accentColor, className, children, ...listItemProps }) {
|
|
32
34
|
const selectable = onSelectedChange !== undefined;
|
|
33
35
|
const compact = density === 'compact';
|
|
34
36
|
const toggle = completeIcon && onCompletedChange ? (_jsx(IconButton, { className: "mui-action-item__complete", variant: completed ? 'primary' : 'secondary', size: compact ? 'sm' : 'md', icon: completeIcon, "aria-pressed": completed, "aria-label": `Complete ${title}`, onClick: () => onCompletedChange(!completed) })) : null;
|
|
@@ -45,6 +47,7 @@ export function ActionItem({ title, completed, onCompletedChange, completeIcon,
|
|
|
45
47
|
});
|
|
46
48
|
const priorityDetail = priority ? (_jsxs("span", { className: cx('mui-action-item__detail', 'mui-action-item__priority', `mui-action-item__priority--${priority.level}`), children: [priority.icon && (_jsx(Icon, { source: priority.icon, size: "sm", decorative: true, className: "mui-action-item__detail-icon mui-action-item__priority-icon" })), _jsx("span", { className: "mui-action-item__detail-label", children: priority.label })] })) : null;
|
|
47
49
|
const detailList = priority || details.length > 0 || note ? (_jsxs("p", { className: "mui-action-item__details", children: [priorityDetail, detailRows, note && (_jsx(Badge, { variant: noteTone, className: "mui-action-item__note", children: note }))] })) : null;
|
|
48
|
-
|
|
50
|
+
const accent = accentProps(accentColor, listItemProps.style);
|
|
51
|
+
return (_jsxs("li", { ...listItemProps, style: accent.style, className: cx('mui-leading-slot', 'mui-action-item', accent.className, compact && 'mui-action-item--compact', completed && 'mui-action-item--completed', selectable && selected && 'mui-action-item--selected', className), children: [leading && (_jsx("div", { className: "mui-leading-slot__leading mui-action-item__leading", children: leading })), _jsx(Card, { className: "mui-leading-slot__card mui-action-item__card", children: _jsxs("div", { className: "mui-action-item__row", children: [toggle, _jsxs("div", { className: "mui-action-item__main", children: [eyebrow && _jsx("div", { className: "mui-action-item__eyebrow", children: eyebrow }), _jsx(CardTitle, { as: titleAs, className: "mui-action-item__title", children: title }), detailList, _jsx(GoalCategories, { className: "mui-action-item__categories", categories: categories, maxVisible: maxVisibleCategories }), secondary && _jsx("div", { className: "mui-action-item__secondary", children: secondary })] }), controls && _jsx("div", { className: "mui-action-item__controls", children: controls }), selectable && (_jsx(Checkbox, { className: "mui-action-item__select", "aria-label": `Select ${title}`, checked: selected, onCheckedChange: onSelectedChange }))] }) }), children] }));
|
|
49
52
|
}
|
|
50
53
|
//# sourceMappingURL=action-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-item.js","sourceRoot":"","sources":["../../src/action-item/action-item.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,EAEL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,EAAE,EACF,IAAI,EACJ,UAAU,GAEX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,cAAc,EAAqB,MAAM,oBAAoB,CAAC;AACvE,OAAO,qBAAqB,CAAC;AAC7B,OAAO,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"action-item.js","sourceRoot":"","sources":["../../src/action-item/action-item.tsx"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,18 @@
|
|
|
29
29
|
gap: var(--semantic-space-gap);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
& .mui-category-card__name {
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: var(--semantic-space-gap);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* The category's own colour, as its label paints its icon. */
|
|
39
|
+
& .mui-category-card__icon {
|
|
40
|
+
flex-shrink: 0;
|
|
41
|
+
color: var(--mui-category-color, var(--semantic-color-action-primary));
|
|
42
|
+
}
|
|
43
|
+
|
|
32
44
|
& .mui-category-card__gap {
|
|
33
45
|
display: flex;
|
|
34
46
|
flex-direction: column;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type IconSource } from '@manakind/ui-core';
|
|
1
2
|
import './category-card.css';
|
|
2
3
|
/** Manuia's two kinds of life category. */
|
|
3
4
|
export type CategoryType = 'Personal' | 'Professional';
|
|
@@ -14,6 +15,11 @@ export interface CategoryRole {
|
|
|
14
15
|
export interface CategoryCardProps {
|
|
15
16
|
/** Category name. Rendered as the card's heading. */
|
|
16
17
|
name: string;
|
|
18
|
+
/**
|
|
19
|
+
* A glyph for the category, shown before its name in the category's colour.
|
|
20
|
+
* Decorative: the name carries the meaning.
|
|
21
|
+
*/
|
|
22
|
+
icon?: IconSource;
|
|
17
23
|
/** Personal or professional. Shown as a badge; the two get different tints. */
|
|
18
24
|
type: CategoryType;
|
|
19
25
|
/**
|
|
@@ -79,5 +85,5 @@ export interface CategoryCardProps {
|
|
|
79
85
|
* />
|
|
80
86
|
* ```
|
|
81
87
|
*/
|
|
82
|
-
export declare function CategoryCard({ name, type, color, vision, currentRating, idealRating, currentBand, idealBand, gapBand, roles, maxVisibleRoles, visionLength, titleAs, className, }: CategoryCardProps): import("react/jsx-runtime").JSX.Element;
|
|
88
|
+
export declare function CategoryCard({ name, icon, type, color, vision, currentRating, idealRating, currentBand, idealBand, gapBand, roles, maxVisibleRoles, visionLength, titleAs, className, }: CategoryCardProps): import("react/jsx-runtime").JSX.Element;
|
|
83
89
|
//# sourceMappingURL=category-card.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"category-card.d.ts","sourceRoot":"","sources":["../../src/category-card/category-card.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"category-card.d.ts","sourceRoot":"","sources":["../../src/category-card/category-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,UAAU,EAEhB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,qBAAqB,CAAC;AAE7B,2CAA2C;AAC3C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,+EAA+E;IAC/E,IAAI,EAAE,YAAY,CAAC;IACnB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sGAAsG;IACtG,aAAa,EAAE,MAAM,CAAC;IACtB,0FAA0F;IAC1F,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,0DAA0D;IAC1D,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,qEAAqE;IACrE,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,6FAA6F;IAC7F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4CD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,EACN,aAAa,EACb,WAAW,EACX,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAU,EACV,eAAmB,EACnB,YAAkB,EAClB,OAAc,EACd,SAAS,GACV,EAAE,iBAAiB,2CAiGnB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Badge, Card, CardContent, CardHeader, CardTitle, cx, Progress } from '@manakind/ui-core';
|
|
2
|
+
import { Badge, Card, CardContent, CardHeader, CardTitle, cx, Icon, Progress, } from '@manakind/ui-core';
|
|
3
3
|
import { safeColor } from '../css-color';
|
|
4
4
|
import './category-card.css';
|
|
5
5
|
const TYPE_VARIANT = {
|
|
@@ -65,7 +65,7 @@ const BAND_CLASS = (part, band) => band && `mui-category-card__${part}--${band}`
|
|
|
65
65
|
* />
|
|
66
66
|
* ```
|
|
67
67
|
*/
|
|
68
|
-
export function CategoryCard({ name, type, color, vision, currentRating, idealRating, currentBand, idealBand, gapBand, roles = [], maxVisibleRoles = 3, visionLength = 100, titleAs = 'h3', className, }) {
|
|
68
|
+
export function CategoryCard({ name, icon, type, color, vision, currentRating, idealRating, currentBand, idealBand, gapBand, roles = [], maxVisibleRoles = 3, visionLength = 100, titleAs = 'h3', className, }) {
|
|
69
69
|
const wash = safeColor(color);
|
|
70
70
|
const current = clampRating(currentRating);
|
|
71
71
|
const ideal = clampRating(idealRating);
|
|
@@ -74,6 +74,6 @@ export function CategoryCard({ name, type, color, vision, currentRating, idealRa
|
|
|
74
74
|
const visibleRoles = limit === undefined ? roles : roles.slice(0, limit);
|
|
75
75
|
const remainingRoles = roles.length - visibleRoles.length;
|
|
76
76
|
const visionText = vision?.trim();
|
|
77
|
-
return (_jsxs(Card, { interactive: true, className: cx('mui-category-card', className), style: wash ? { '--mui-category-color': wash } : undefined, children: [_jsxs(CardHeader, { className: "mui-category-card__header", children: [_jsxs("div", { className: "mui-category-card__meta", children: [_jsx(Badge, { variant: TYPE_VARIANT[type], appearance: "plain", children: type }), _jsxs("p", { className: cx('mui-category-card__gap', BAND_CLASS('gap', gapBand)), children: [_jsx("span", { className: "mui-category-card__gap-value", children: gap }), _jsx("span", { className: "mui-category-card__gap-label", children: "gap" })] })] }), _jsx(CardTitle, { as: titleAs, className: "mui-category-card__title", title: name, children: name })] }), _jsxs(CardContent, { className: "mui-category-card__content", children: [visionText && (_jsx("p", { className: "mui-category-card__vision", children: excerpt(visionText, visionLength) })), roles.length > 0 && (_jsxs("ul", { className: "mui-category-card__roles", "aria-label": "Roles", children: [visibleRoles.map((role) => (_jsx("li", { children: _jsx(Badge, { variant: "outline", children: role.name }) }, role.id))), remainingRoles > 0 && (_jsx("li", { children: _jsxs(Badge, { variant: "muted", children: ["+", remainingRoles, " more"] }) }))] })), _jsxs("div", { className: "mui-category-card__ratings", children: [_jsx(Progress, { size: "sm", className: "mui-category-card__bar mui-category-card__bar--current", value: current, max: RATING_MAX, label: _jsx("span", { className: "mui-category-card__rating-label", children: "Current" }), valueText: _jsxs("span", { className: cx('mui-category-card__rating-value', BAND_CLASS('rating-value', currentBand)), children: [current, _jsxs("span", { className: "mui-category-card__rating-max", children: ["/", RATING_MAX] })] }) }), _jsx(Progress, { size: "sm", className: "mui-category-card__bar mui-category-card__bar--ideal", value: ideal, max: RATING_MAX, label: _jsx("span", { className: "mui-category-card__rating-label", children: "Ideal" }), valueText: _jsxs("span", { className: cx('mui-category-card__rating-value', BAND_CLASS('rating-value', idealBand)), children: [ideal, _jsxs("span", { className: "mui-category-card__rating-max", children: ["/", RATING_MAX] })] }) })] })] })] }));
|
|
77
|
+
return (_jsxs(Card, { interactive: true, className: cx('mui-category-card', className), style: wash ? { '--mui-category-color': wash } : undefined, children: [_jsxs(CardHeader, { className: "mui-category-card__header", children: [_jsxs("div", { className: "mui-category-card__meta", children: [_jsx(Badge, { variant: TYPE_VARIANT[type], appearance: "plain", children: type }), _jsxs("p", { className: cx('mui-category-card__gap', BAND_CLASS('gap', gapBand)), children: [_jsx("span", { className: "mui-category-card__gap-value", children: gap }), _jsx("span", { className: "mui-category-card__gap-label", children: "gap" })] })] }), _jsxs("div", { className: "mui-category-card__name", children: [icon ? (_jsx(Icon, { source: icon, size: "lg", decorative: true, className: "mui-category-card__icon" })) : null, _jsx(CardTitle, { as: titleAs, className: "mui-category-card__title", title: name, children: name })] })] }), _jsxs(CardContent, { className: "mui-category-card__content", children: [visionText && (_jsx("p", { className: "mui-category-card__vision", children: excerpt(visionText, visionLength) })), roles.length > 0 && (_jsxs("ul", { className: "mui-category-card__roles", "aria-label": "Roles", children: [visibleRoles.map((role) => (_jsx("li", { children: _jsx(Badge, { variant: "outline", children: role.name }) }, role.id))), remainingRoles > 0 && (_jsx("li", { children: _jsxs(Badge, { variant: "muted", children: ["+", remainingRoles, " more"] }) }))] })), _jsxs("div", { className: "mui-category-card__ratings", children: [_jsx(Progress, { size: "sm", className: "mui-category-card__bar mui-category-card__bar--current", value: current, max: RATING_MAX, label: _jsx("span", { className: "mui-category-card__rating-label", children: "Current" }), valueText: _jsxs("span", { className: cx('mui-category-card__rating-value', BAND_CLASS('rating-value', currentBand)), children: [current, _jsxs("span", { className: "mui-category-card__rating-max", children: ["/", RATING_MAX] })] }) }), _jsx(Progress, { size: "sm", className: "mui-category-card__bar mui-category-card__bar--ideal", value: ideal, max: RATING_MAX, label: _jsx("span", { className: "mui-category-card__rating-label", children: "Ideal" }), valueText: _jsxs("span", { className: cx('mui-category-card__rating-value', BAND_CLASS('rating-value', idealBand)), children: [ideal, _jsxs("span", { className: "mui-category-card__rating-max", children: ["/", RATING_MAX] })] }) })] })] })] }));
|
|
78
78
|
}
|
|
79
79
|
//# sourceMappingURL=category-card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"category-card.js","sourceRoot":"","sources":["../../src/category-card/category-card.tsx"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"category-card.js","sourceRoot":"","sources":["../../src/category-card/category-card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.mui-category-label {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: var(--semantic-space-gap-tight);
|
|
6
|
+
min-width: 0;
|
|
7
|
+
/*
|
|
8
|
+
* The surrounding text's colour and, through the inline-flex boxes that
|
|
9
|
+
* would otherwise stop it, its underline: a list makes it muted, a
|
|
10
|
+
* breadcrumb link underlines it on hover like the trail's other links.
|
|
11
|
+
*/
|
|
12
|
+
color: inherit;
|
|
13
|
+
text-decoration: inherit;
|
|
14
|
+
font-size: var(--primitives-font-size-sm);
|
|
15
|
+
overflow-wrap: anywhere;
|
|
16
|
+
|
|
17
|
+
& .mui-category-label__inner,
|
|
18
|
+
& .mui-category-label__name {
|
|
19
|
+
text-decoration: inherit;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
& .mui-category-label__inner {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: inherit;
|
|
26
|
+
min-width: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* `--mui-category` is the category's stored colour, set per label and
|
|
31
|
+
* falling back to the primary action colour. The mark is reinforcement,
|
|
32
|
+
* never the signal: the name beside it carries the category at the
|
|
33
|
+
* surface's own contrast, so no floor is promised for a user's colour.
|
|
34
|
+
* The ring keeps the dot from vanishing against a near-surface colour.
|
|
35
|
+
*/
|
|
36
|
+
& .mui-category-label__dot {
|
|
37
|
+
flex-shrink: 0;
|
|
38
|
+
width: var(--component-category-label-dot-size-sm);
|
|
39
|
+
height: var(--component-category-label-dot-size-sm);
|
|
40
|
+
border-radius: var(--semantic-radius-pill);
|
|
41
|
+
background-color: var(--mui-category, var(--semantic-color-action-primary));
|
|
42
|
+
box-shadow: 0 0 0 1px var(--semantic-color-border-subtle);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
& .mui-category-label__icon {
|
|
46
|
+
flex-shrink: 0;
|
|
47
|
+
color: var(--mui-category, var(--semantic-color-action-primary));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.mui-category-label--md {
|
|
52
|
+
font-size: var(--primitives-font-size-md);
|
|
53
|
+
|
|
54
|
+
& .mui-category-label__dot {
|
|
55
|
+
width: var(--component-category-label-dot-size-md);
|
|
56
|
+
height: var(--component-category-label-dot-size-md);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.mui-category-label--link {
|
|
61
|
+
text-decoration: none;
|
|
62
|
+
border-radius: var(--semantic-radius-interactive);
|
|
63
|
+
|
|
64
|
+
&:hover .mui-category-label__name {
|
|
65
|
+
color: var(--semantic-color-text-default);
|
|
66
|
+
text-decoration: underline;
|
|
67
|
+
text-underline-offset: 0.2em;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&:focus-visible {
|
|
71
|
+
outline: 2px solid var(--semantic-color-focus-ring);
|
|
72
|
+
outline-offset: 3px;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type IconSource, type LinkComponentProps } from '@manakind/ui-core';
|
|
2
|
+
import type { ElementType } from 'react';
|
|
3
|
+
import './category-label.css';
|
|
4
|
+
/** What the link component receives; the props every `linkComponent` takes. */
|
|
5
|
+
export type CategoryLabelLinkProps = LinkComponentProps;
|
|
6
|
+
export interface CategoryLabelProps {
|
|
7
|
+
/** The category's name. Carries the meaning — the colour and glyph only reinforce it. */
|
|
8
|
+
name: string;
|
|
9
|
+
/**
|
|
10
|
+
* The category's user-chosen colour, as data rather than a token; validated
|
|
11
|
+
* by `safeColor` before it reaches a style attribute. Falls back to the
|
|
12
|
+
* primary action colour.
|
|
13
|
+
*/
|
|
14
|
+
color?: string;
|
|
15
|
+
/**
|
|
16
|
+
* The category's own glyph, supplied by the product. Drawn in the category
|
|
17
|
+
* colour in place of the dot; without one the label shows the dot.
|
|
18
|
+
*/
|
|
19
|
+
icon?: IconSource;
|
|
20
|
+
/** `sm` beside a card's details; `md` in a page header. Defaults to `sm`. */
|
|
21
|
+
size?: 'sm' | 'md';
|
|
22
|
+
/** Makes the label a link to the category. */
|
|
23
|
+
href?: string;
|
|
24
|
+
/** Renders the link, so a product passes its router's link. Defaults to `<a>`. */
|
|
25
|
+
linkComponent?: ElementType<CategoryLabelLinkProps>;
|
|
26
|
+
/** Extra class names on the outermost element. */
|
|
27
|
+
className?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* One Manuia category: its glyph or dot in the category colour, then its name.
|
|
31
|
+
* The one way a category is named on a card, a list row or a page header;
|
|
32
|
+
* `GoalCategories` lists several of them.
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* The name is text on the surface it sits on, so it keeps that surface's
|
|
36
|
+
* checked contrast; the colour can be any colour a user picked, so no
|
|
37
|
+
* contrast floor is promised for the mark and none is needed.
|
|
38
|
+
*/
|
|
39
|
+
export declare function CategoryLabel({ name, color, icon, size, href, linkComponent: Link, className, }: CategoryLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
//# sourceMappingURL=category-label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-label.d.ts","sourceRoot":"","sources":["../../src/category-label/category-label.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAiB,WAAW,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,sBAAsB,CAAC;AAE9B,+EAA+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IACpD,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAW,EACX,IAAI,EACJ,aAAa,EAAE,IAAU,EACzB,SAAS,GACV,EAAE,kBAAkB,2CAkCpB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cx, Icon } from '@manakind/ui-core';
|
|
3
|
+
import { safeColor } from '../css-color';
|
|
4
|
+
import './category-label.css';
|
|
5
|
+
/**
|
|
6
|
+
* One Manuia category: its glyph or dot in the category colour, then its name.
|
|
7
|
+
* The one way a category is named on a card, a list row or a page header;
|
|
8
|
+
* `GoalCategories` lists several of them.
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* The name is text on the surface it sits on, so it keeps that surface's
|
|
12
|
+
* checked contrast; the colour can be any colour a user picked, so no
|
|
13
|
+
* contrast floor is promised for the mark and none is needed.
|
|
14
|
+
*/
|
|
15
|
+
export function CategoryLabel({ name, color, icon, size = 'sm', href, linkComponent: Link = 'a', className, }) {
|
|
16
|
+
const tint = safeColor(color);
|
|
17
|
+
const style = tint ? { '--mui-category': tint } : undefined;
|
|
18
|
+
const classes = cx('mui-category-label', `mui-category-label--${size}`, href && 'mui-category-label--link', className);
|
|
19
|
+
const content = (_jsxs(_Fragment, { children: [icon ? (_jsx(Icon, { source: icon, size: size, decorative: true, className: "mui-category-label__icon" })) : (_jsx("span", { className: "mui-category-label__dot", "aria-hidden": "true" })), _jsx("span", { className: "mui-category-label__name", children: name })] }));
|
|
20
|
+
if (href) {
|
|
21
|
+
return (_jsx(Link, { href: href, className: classes, children: _jsx("span", { className: "mui-category-label__inner", style: style, children: content }) }));
|
|
22
|
+
}
|
|
23
|
+
return (_jsx("span", { className: classes, style: style, children: content }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=category-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-label.js","sourceRoot":"","sources":["../../src/category-label/category-label.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAA4C,MAAM,mBAAmB,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,sBAAsB,CAAC;AA6B9B;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,IAAI,EACJ,aAAa,EAAE,IAAI,GAAG,GAAG,EACzB,SAAS,GACU;IACnB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAE,EAAE,gBAAgB,EAAE,IAAI,EAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,OAAO,GAAG,EAAE,CAChB,oBAAoB,EACpB,uBAAuB,IAAI,EAAE,EAC7B,IAAI,IAAI,0BAA0B,EAClC,SAAS,CACV,CAAC;IACF,MAAM,OAAO,GAAG,CACd,8BACG,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,IAAI,IAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,QAAC,SAAS,EAAC,0BAA0B,GAAG,CACnF,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,yBAAyB,iBAAa,MAAM,GAAG,CAChE,EACD,eAAM,SAAS,EAAC,0BAA0B,YAAE,IAAI,GAAQ,IACvD,CACJ,CAAC;IAEF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CACL,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,YAClC,eAAM,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,KAAK,YACrD,OAAO,GACH,GACF,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,eAAM,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,YACnC,OAAO,GACH,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/category-label/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/category-label/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -21,7 +21,7 @@ export interface FocusItemProps extends Omit<ComponentProps<'li'>, 'title' | 'ch
|
|
|
21
21
|
kindIcon?: IconSource;
|
|
22
22
|
/** Pre-formatted facts shown after the kind, such as "High priority" or "30 min". */
|
|
23
23
|
details?: string[];
|
|
24
|
-
/** Categories the item belongs to,
|
|
24
|
+
/** Categories the item belongs to, each a `CategoryLabel`. */
|
|
25
25
|
categories?: GoalCategory[];
|
|
26
26
|
/**
|
|
27
27
|
* An outcome's open actions, listed under its title. Ignored for an action.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-item.d.ts","sourceRoot":"","sources":["../../src/focus-item/focus-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,qBAAqB,CAAC;AAC7B,OAAO,kBAAkB,CAAC;AAE1B,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;IACtE,mFAAmF;IACnF,IAAI,EAAE,aAAa,CAAC;IACpB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"focus-item.d.ts","sourceRoot":"","sources":["../../src/focus-item/focus-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,qBAAqB,CAAC;AAC7B,OAAO,kBAAkB,CAAC;AAE1B,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;IACtE,mFAAmF;IACnF,IAAI,EAAE,aAAa,CAAC;IACpB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,wFAAwF;IACxF,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,oFAAoF;IACpF,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,OAAY,EACZ,UAAe,EACf,OAAY,EACZ,OAAO,EACP,eAAe,EACf,SAAS,EACT,WAAuB,EACvB,QAAQ,EACR,OAAO,EACP,OAAc,EACd,SAAS,EACT,QAAQ,EACR,GAAG,aAAa,EACjB,EAAE,cAAc,2CAoEhB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type IconSource } from '@manakind/ui-core';
|
|
2
|
-
import type { ElementType
|
|
1
|
+
import { type IconSource, type LinkComponentProps } from '@manakind/ui-core';
|
|
2
|
+
import type { ElementType } from 'react';
|
|
3
3
|
import { type GoalCategory } from '../goal-categories';
|
|
4
4
|
import { type GoalStatus } from '../goal-status-menu';
|
|
5
5
|
import './goal-card.css';
|
|
@@ -20,11 +20,8 @@ export interface GoalMilestone {
|
|
|
20
20
|
* The props a `linkComponent` receives. A plain `'a'` and a router's link
|
|
21
21
|
* (Next's `Link`) both satisfy it.
|
|
22
22
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
className?: string;
|
|
26
|
-
children?: ReactNode;
|
|
27
|
-
}
|
|
23
|
+
/** What the link component receives; the props every `linkComponent` takes. */
|
|
24
|
+
export type GoalLinkProps = LinkComponentProps;
|
|
28
25
|
export interface GoalCardProps {
|
|
29
26
|
/** Goal title. Rendered as the card's heading. */
|
|
30
27
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-card.d.ts","sourceRoot":"","sources":["../../src/goal-card/goal-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"goal-card.d.ts","sourceRoot":"","sources":["../../src/goal-card/goal-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,kBAAkB,EAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,qBAAqB,CAAC;AACtE,OAAO,iBAAiB,CAAC;AAEzB,uDAAuD;AACvD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,QAAQ,CAAC;IACf,yCAAyC;IACzC,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,+FAA+F;IAC/F,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,mGAAmG;IACnG,uBAAuB,CAAC,EAAE,UAAU,CAAC;IACrC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC3C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,yGAAyG;IACzG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,mEAAmE;IACnE,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,uFAAuF;IACvF,sBAAsB,CAAC,EAAE,UAAU,CAAC;IACpC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7B,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,MAAM,EACN,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,IAAI,EACJ,aAAa,EAAE,aAAmB,EAClC,WAAW,EACX,UAAe,EACf,oBAAwB,EACxB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,sBAAuC,EACvC,UAAU,EACV,OAAc,EACd,SAAS,GACV,EAAE,aAAa,2CAyHf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-card.js","sourceRoot":"","sources":["../../src/goal-card/goal-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,IAAI,EACJ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,EAAE,EACF,IAAI,
|
|
1
|
+
{"version":3,"file":"goal-card.js","sourceRoot":"","sources":["../../src/goal-card/goal-card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,31 +17,6 @@
|
|
|
17
17
|
font-size: var(--primitives-font-size-sm);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
/*
|
|
21
|
-
* `--mui-goal-category` is set per item from the category's stored
|
|
22
|
-
* colour, falling back to the primary action colour for a category that
|
|
23
|
-
* has none yet.
|
|
24
|
-
*
|
|
25
|
-
* The dot is deliberately NOT load-bearing. A category colour is user
|
|
26
|
-
* data — any colour at all, including one that matches the card surface —
|
|
27
|
-
* so no contrast floor can be promised for it, and promising one would be
|
|
28
|
-
* a claim this component cannot keep. The name sits beside it as text on
|
|
29
|
-
* the card surface at that surface's own checked contrast, which is what
|
|
30
|
-
* actually carries the category.
|
|
31
|
-
*
|
|
32
|
-
* The ring exists so the dot does not vanish entirely against a
|
|
33
|
-
* near-surface colour. It is a visibility floor for a decoration, not a
|
|
34
|
-
* contrast guarantee.
|
|
35
|
-
*/
|
|
36
|
-
& .mui-goal-categories__dot {
|
|
37
|
-
flex-shrink: 0;
|
|
38
|
-
width: var(--component-goal-categories-dot-size);
|
|
39
|
-
height: var(--component-goal-categories-dot-size);
|
|
40
|
-
border-radius: var(--semantic-radius-pill);
|
|
41
|
-
background-color: var(--mui-goal-category, var(--semantic-color-action-primary));
|
|
42
|
-
box-shadow: 0 0 0 1px var(--semantic-color-border-subtle);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
20
|
/*
|
|
46
21
|
* No colour override: the overflow item is the same muted text as the
|
|
47
22
|
* rest, and its lack of a dot already sets it apart. It keeps a class so
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type IconSource } from '@manakind/ui-core';
|
|
1
2
|
import './goal-categories.css';
|
|
2
3
|
export interface GoalCategory {
|
|
3
4
|
/** Stable identifier. */
|
|
@@ -20,6 +21,8 @@ export interface GoalCategory {
|
|
|
20
21
|
* action colour.
|
|
21
22
|
*/
|
|
22
23
|
color?: string;
|
|
24
|
+
/** The category's own glyph, drawn in its colour in place of the dot. */
|
|
25
|
+
icon?: IconSource;
|
|
23
26
|
}
|
|
24
27
|
export interface GoalCategoriesProps {
|
|
25
28
|
/** Categories to show. Renders nothing when empty. */
|
|
@@ -35,7 +38,8 @@ export interface GoalCategoriesProps {
|
|
|
35
38
|
className?: string;
|
|
36
39
|
}
|
|
37
40
|
/**
|
|
38
|
-
* The categories a Manuia goal belongs to,
|
|
41
|
+
* The categories a Manuia goal, action or outcome belongs to, each a
|
|
42
|
+
* `CategoryLabel`.
|
|
39
43
|
*
|
|
40
44
|
* A Manuia-specific composition: "a goal belongs to N categories, each with a
|
|
41
45
|
* user-chosen colour, collapsing after N visible" is a product concept and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-categories.d.ts","sourceRoot":"","sources":["../../src/goal-categories/goal-categories.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"goal-categories.d.ts","sourceRoot":"","sources":["../../src/goal-categories/goal-categories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,uBAAuB,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,mBAAmB,kDAkCxF"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cx } from '@manakind/ui-core';
|
|
3
|
-
import {
|
|
3
|
+
import { CategoryLabel } from '../category-label';
|
|
4
4
|
import './goal-categories.css';
|
|
5
5
|
/**
|
|
6
|
-
* The categories a Manuia goal belongs to,
|
|
6
|
+
* The categories a Manuia goal, action or outcome belongs to, each a
|
|
7
|
+
* `CategoryLabel`.
|
|
7
8
|
*
|
|
8
9
|
* A Manuia-specific composition: "a goal belongs to N categories, each with a
|
|
9
10
|
* user-chosen colour, collapsing after N visible" is a product concept and
|
|
@@ -38,9 +39,6 @@ export function GoalCategories({ categories, maxVisible, className }) {
|
|
|
38
39
|
: undefined;
|
|
39
40
|
const visible = limit === undefined ? categories : categories.slice(0, limit);
|
|
40
41
|
const remaining = limit === undefined ? 0 : Math.max(categories.length - limit, 0);
|
|
41
|
-
return (_jsxs("ul", { className: cx('mui-goal-categories', className), children: [visible.map((category) => {
|
|
42
|
-
const dot = safeColor(category.color);
|
|
43
|
-
return (_jsxs("li", { className: "mui-goal-categories__item", style: dot ? { '--mui-goal-category': dot } : undefined, children: [_jsx("span", { className: "mui-goal-categories__dot", "aria-hidden": "true" }), category.name] }, category.id));
|
|
44
|
-
}), remaining > 0 && (_jsxs("li", { className: "mui-goal-categories__item mui-goal-categories__item--overflow", children: ["+", remaining, " more"] }))] }));
|
|
42
|
+
return (_jsxs("ul", { className: cx('mui-goal-categories', className), children: [visible.map((category) => (_jsx("li", { className: "mui-goal-categories__item", children: _jsx(CategoryLabel, { name: category.name, color: category.color, icon: category.icon }) }, category.id))), remaining > 0 && (_jsxs("li", { className: "mui-goal-categories__item mui-goal-categories__item--overflow", children: ["+", remaining, " more"] }))] }));
|
|
45
43
|
}
|
|
46
44
|
//# sourceMappingURL=goal-categories.js.map
|