@weavix/tracker-components 0.1.0 → 0.1.2

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.
Files changed (48) hide show
  1. package/README.md +191 -19
  2. package/build/cjs/components/Icon/EntityIcon/EntityIcon.js +2 -3
  3. package/build/cjs/components/Icon/EntityIcon/EntityIcon.js.map +1 -1
  4. package/build/cjs/components/Icon/GoalIcon/README.md +123 -0
  5. package/build/cjs/components/Icon/IconRefuge/IconRefuge.classname.js.map +1 -1
  6. package/build/cjs/components/Icon/IconRefuge/IconRefuge.css +0 -3
  7. package/build/cjs/components/Icon/IconRefuge/IconRefuge.css.map +1 -1
  8. package/build/cjs/components/Icon/IssueTypeIcon/IssueTypeIcon.js +30 -50
  9. package/build/cjs/components/Icon/IssueTypeIcon/IssueTypeIcon.js.map +1 -1
  10. package/build/cjs/components/Icon/IssueTypeIcon/README.md +146 -22
  11. package/build/cjs/components/Icon/KeyResultIcon/README.md +73 -0
  12. package/build/cjs/components/Icon/MetaEntityIcon/README.md +136 -0
  13. package/build/cjs/components/Icon/PortfolioIcon/PortfolioIcon.d.ts +4 -1
  14. package/build/cjs/components/Icon/PortfolioIcon/PortfolioIcon.js +1 -0
  15. package/build/cjs/components/Icon/PortfolioIcon/PortfolioIcon.js.map +1 -1
  16. package/build/cjs/components/Icon/PortfolioIcon/README.md +94 -9
  17. package/build/cjs/components/Icon/ProjectIcon/README.md +133 -9
  18. package/build/cjs/components/MetaEntitiesSelect/README.md +10 -0
  19. package/build/cjs/components/PluginFieldsSelect/README.md +18 -0
  20. package/build/cjs/components/QueueSelect/README.md +10 -0
  21. package/build/cjs/components/TrackerDisclosure/README.md +205 -0
  22. package/build/esm/components/Icon/EntityIcon/EntityIcon.js +2 -3
  23. package/build/esm/components/Icon/EntityIcon/EntityIcon.js.map +1 -1
  24. package/build/esm/components/Icon/GoalIcon/README.md +123 -0
  25. package/build/esm/components/Icon/IconRefuge/IconRefuge.classname.js.map +1 -1
  26. package/build/esm/components/Icon/IconRefuge/IconRefuge.css +0 -3
  27. package/build/esm/components/Icon/IconRefuge/IconRefuge.css.map +1 -1
  28. package/build/esm/components/Icon/IconRefuge/IconRefuge.scss +0 -4
  29. package/build/esm/components/Icon/IssueTypeIcon/IssueTypeIcon.js +30 -50
  30. package/build/esm/components/Icon/IssueTypeIcon/IssueTypeIcon.js.map +1 -1
  31. package/build/esm/components/Icon/IssueTypeIcon/README.md +146 -22
  32. package/build/esm/components/Icon/KeyResultIcon/README.md +73 -0
  33. package/build/esm/components/Icon/MetaEntityIcon/README.md +136 -0
  34. package/build/esm/components/Icon/PortfolioIcon/PortfolioIcon.d.ts +4 -1
  35. package/build/esm/components/Icon/PortfolioIcon/PortfolioIcon.js +1 -0
  36. package/build/esm/components/Icon/PortfolioIcon/PortfolioIcon.js.map +1 -1
  37. package/build/esm/components/Icon/PortfolioIcon/README.md +94 -9
  38. package/build/esm/components/Icon/ProjectIcon/README.md +133 -9
  39. package/build/esm/components/MetaEntitiesSelect/README.md +10 -0
  40. package/build/esm/components/PluginFieldsSelect/README.md +18 -0
  41. package/build/esm/components/QueueSelect/README.md +10 -0
  42. package/build/esm/components/TrackerDisclosure/README.md +205 -0
  43. package/package.json +1 -1
  44. package/build/cjs/components/Icon/Icon.css +0 -33
  45. package/build/cjs/components/Icon/Icon.css.map +0 -1
  46. package/build/esm/components/Icon/Icon.css +0 -33
  47. package/build/esm/components/Icon/Icon.css.map +0 -1
  48. package/build/esm/components/Icon/Icon.scss +0 -46
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { getConfig } from '@gravity-ui/uikit';
3
3
  import { useLocalizedString } from "./../../../hooks/useLocalizedString";
4
- import { cnIcon } from "../Icon.classname";
5
4
  import { IconRefuge } from "../IconRefuge";
6
5
  import { cnIssueTypeIcon } from "./IssueTypeIcon.classname";
7
6
  import { defaultMessages } from "./i18n";
@@ -25,47 +24,28 @@ import taskIcon from "../../../assets/icons/issue-type/task";
25
24
  import technicalDebtIcon from "../../../assets/icons/issue-type/technical-debt";
26
25
  import "./IssueTypeIcon.css";
27
26
  import { jsx as _jsx } from "react/jsx-runtime";
28
- var getIconData = function getIconData(issueType) {
29
- switch (issueType) {
30
- case 'bug':
31
- return bugIcon;
32
- case 'design':
33
- return designIcon;
34
- case 'epic':
35
- return epicIcon;
36
- case 'improvement':
37
- return improvementIcon;
38
- case 'incident':
39
- return incidentIcon;
40
- case 'info':
41
- return infoIcon;
42
- case 'newFeature':
43
- return newFeatureIcon;
44
- case 'query':
45
- return queryIcon;
46
- case 'refactoring':
47
- return refactoringIcon;
48
- case 'release':
49
- return releaseIcon;
50
- case 'research':
51
- return researchIcon;
52
- case 'serviceRequest':
53
- return serviceRequestIcon;
54
- case 'story':
55
- return storyIcon;
56
- case 'subBug':
57
- return subbugIcon;
58
- case 'subTask':
59
- return subtaskIcon;
60
- case 'technicalDebt':
61
- return technicalDebtIcon;
62
- case 'milestone':
63
- return milestoneIcon;
64
- default:
65
- return taskIcon;
66
- }
27
+ var ISSUE_TYPE_ICONS = {
28
+ bug: bugIcon,
29
+ design: designIcon,
30
+ epic: epicIcon,
31
+ improvement: improvementIcon,
32
+ incident: incidentIcon,
33
+ info: infoIcon,
34
+ milestone: milestoneIcon,
35
+ newFeature: newFeatureIcon,
36
+ query: queryIcon,
37
+ refactoring: refactoringIcon,
38
+ release: releaseIcon,
39
+ research: researchIcon,
40
+ serviceRequest: serviceRequestIcon,
41
+ story: storyIcon,
42
+ subBug: subbugIcon,
43
+ subTask: subtaskIcon,
44
+ task: taskIcon,
45
+ technicalDebt: technicalDebtIcon
67
46
  };
68
47
  export var IssueTypeIcon = function IssueTypeIcon(_ref) {
48
+ var _ISSUE_TYPE_ICONS$iss;
69
49
  var className = _ref.className,
70
50
  containerClassName = _ref.containerClassName,
71
51
  _ref$issueType = _ref.issueType,
@@ -76,20 +56,20 @@ export var IssueTypeIcon = function IssueTypeIcon(_ref) {
76
56
  var config = getConfig();
77
57
  var _useLocalizedString = useLocalizedString(defaultMessages, config.lang),
78
58
  t = _useLocalizedString.t;
79
- var ariaLabel = title && t('type-label', {
80
- type: title
81
- });
59
+ var ariaLabel = title ? t('type-label', {
60
+ type: issueType
61
+ }) : undefined;
82
62
  return /*#__PURE__*/_jsx(IconRefuge, {
83
- className: cnIcon({
84
- issueType: issueType
85
- }, [cnIssueTypeIcon({
63
+ className: cnIssueTypeIcon({
86
64
  type: issueType
87
- }, className)]),
65
+ }, className),
88
66
  containerClassName: containerClassName,
89
- data: getIconData(issueType),
67
+ data: (_ISSUE_TYPE_ICONS$iss = ISSUE_TYPE_ICONS[issueType]) !== null && _ISSUE_TYPE_ICONS$iss !== void 0 ? _ISSUE_TYPE_ICONS$iss : taskIcon,
90
68
  refugeSize: size,
91
- "aria-label": ariaLabel
69
+ title: title,
70
+ "aria-label": ariaLabel,
71
+ "aria-hidden": !title || undefined
92
72
  });
93
73
  };
94
- IssueTypeIcon.displayName = cnIcon();
74
+ IssueTypeIcon.displayName = 'IssueTypeIcon';
95
75
  // #sourceMappingURL=IssueTypeIcon.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","getConfig","useLocalizedString","cnIcon","IconRefuge","cnIssueTypeIcon","defaultMessages","bugIcon","designIcon","epicIcon","improvementIcon","incidentIcon","infoIcon","milestoneIcon","newFeatureIcon","queryIcon","refactoringIcon","releaseIcon","researchIcon","serviceRequestIcon","storyIcon","subbugIcon","subtaskIcon","taskIcon","technicalDebtIcon","jsx","_jsx","getIconData","issueType","IssueTypeIcon","_ref","className","containerClassName","_ref$issueType","_ref$size","size","title","config","_useLocalizedString","lang","t","ariaLabel","type","data","refugeSize","displayName"],"sources":["IssueTypeIcon.tsx"],"sourcesContent":["import type {FC} from 'react';\nimport React from 'react';\n\nimport {getConfig} from '@gravity-ui/uikit';\n\nimport {useLocalizedString} from '~/src/hooks/useLocalizedString';\n\nimport {cnIcon} from '../Icon.classname';\nimport type {IconRefugeProps} from '../IconRefuge';\nimport {IconRefuge} from '../IconRefuge';\n\nimport {cnIssueTypeIcon} from './IssueTypeIcon.classname';\nimport {defaultMessages} from './i18n';\nimport type {IssueType} from './types';\n\nimport bugIcon from '../../../../assets/icons/issue-type/bug.svg';\nimport designIcon from '../../../../assets/icons/issue-type/design.svg';\nimport epicIcon from '../../../../assets/icons/issue-type/epic.svg';\nimport improvementIcon from '../../../../assets/icons/issue-type/improvement.svg';\nimport incidentIcon from '../../../../assets/icons/issue-type/incident.svg';\nimport infoIcon from '../../../../assets/icons/issue-type/info.svg';\nimport milestoneIcon from '../../../../assets/icons/issue-type/milestone.svg';\nimport newFeatureIcon from '../../../../assets/icons/issue-type/new-feature.svg';\nimport queryIcon from '../../../../assets/icons/issue-type/query.svg';\nimport refactoringIcon from '../../../../assets/icons/issue-type/refactoring.svg';\nimport releaseIcon from '../../../../assets/icons/issue-type/release.svg';\nimport researchIcon from '../../../../assets/icons/issue-type/research.svg';\nimport serviceRequestIcon from '../../../../assets/icons/issue-type/service-request.svg';\nimport storyIcon from '../../../../assets/icons/issue-type/story.svg';\nimport subbugIcon from '../../../../assets/icons/issue-type/subbug.svg';\nimport subtaskIcon from '../../../../assets/icons/issue-type/subtask.svg';\nimport taskIcon from '../../../../assets/icons/issue-type/task.svg';\nimport technicalDebtIcon from '../../../../assets/icons/issue-type/technical-debt.svg';\n\nimport './IssueTypeIcon.scss';\n\nexport type IssueTypeIconProps = Partial<Pick<IconRefugeProps, 'containerClassName' | 'title'>> & {\n className?: string;\n size?: number;\n issueType?: IssueType;\n};\n\nconst getIconData = (issueType: string) => {\n switch (issueType) {\n case 'bug':\n return bugIcon;\n case 'design':\n return designIcon;\n case 'epic':\n return epicIcon;\n case 'improvement':\n return improvementIcon;\n case 'incident':\n return incidentIcon;\n case 'info':\n return infoIcon;\n case 'newFeature':\n return newFeatureIcon;\n case 'query':\n return queryIcon;\n case 'refactoring':\n return refactoringIcon;\n case 'release':\n return releaseIcon;\n case 'research':\n return researchIcon;\n case 'serviceRequest':\n return serviceRequestIcon;\n case 'story':\n return storyIcon;\n case 'subBug':\n return subbugIcon;\n case 'subTask':\n return subtaskIcon;\n case 'technicalDebt':\n return technicalDebtIcon;\n case 'milestone':\n return milestoneIcon;\n\n default:\n return taskIcon;\n }\n};\n\nexport const IssueTypeIcon: FC<IssueTypeIconProps> = ({\n className,\n containerClassName,\n issueType = 'task',\n size = 16,\n title,\n}) => {\n const config = getConfig();\n const {t} = useLocalizedString(defaultMessages, config.lang);\n const ariaLabel = title && t('type-label', {type: title});\n\n return (\n <IconRefuge\n className={cnIcon({issueType}, [cnIssueTypeIcon({type: issueType}, className)])}\n containerClassName={containerClassName}\n data={getIconData(issueType)}\n refugeSize={size}\n aria-label={ariaLabel}\n />\n );\n};\n\nIssueTypeIcon.displayName = cnIcon();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","getConfig","useLocalizedString","IconRefuge","cnIssueTypeIcon","defaultMessages","bugIcon","designIcon","epicIcon","improvementIcon","incidentIcon","infoIcon","milestoneIcon","newFeatureIcon","queryIcon","refactoringIcon","releaseIcon","researchIcon","serviceRequestIcon","storyIcon","subbugIcon","subtaskIcon","taskIcon","technicalDebtIcon","jsx","_jsx","ISSUE_TYPE_ICONS","bug","design","epic","improvement","incident","info","milestone","newFeature","query","refactoring","release","research","serviceRequest","story","subBug","subTask","task","technicalDebt","IssueTypeIcon","_ref","_ISSUE_TYPE_ICONS$iss","className","containerClassName","_ref$issueType","issueType","_ref$size","size","title","config","_useLocalizedString","lang","t","ariaLabel","type","undefined","data","refugeSize","displayName"],"sources":["IssueTypeIcon.tsx"],"sourcesContent":["import type {FC} from 'react';\nimport React from 'react';\n\nimport {type IconData, getConfig} from '@gravity-ui/uikit';\n\nimport {useLocalizedString} from '~/src/hooks/useLocalizedString';\n\nimport type {IconRefugeProps} from '../IconRefuge';\nimport {IconRefuge} from '../IconRefuge';\n\nimport {cnIssueTypeIcon} from './IssueTypeIcon.classname';\nimport {defaultMessages} from './i18n';\nimport type {IssueType} from './types';\n\nimport bugIcon from '../../../../assets/icons/issue-type/bug.svg';\nimport designIcon from '../../../../assets/icons/issue-type/design.svg';\nimport epicIcon from '../../../../assets/icons/issue-type/epic.svg';\nimport improvementIcon from '../../../../assets/icons/issue-type/improvement.svg';\nimport incidentIcon from '../../../../assets/icons/issue-type/incident.svg';\nimport infoIcon from '../../../../assets/icons/issue-type/info.svg';\nimport milestoneIcon from '../../../../assets/icons/issue-type/milestone.svg';\nimport newFeatureIcon from '../../../../assets/icons/issue-type/new-feature.svg';\nimport queryIcon from '../../../../assets/icons/issue-type/query.svg';\nimport refactoringIcon from '../../../../assets/icons/issue-type/refactoring.svg';\nimport releaseIcon from '../../../../assets/icons/issue-type/release.svg';\nimport researchIcon from '../../../../assets/icons/issue-type/research.svg';\nimport serviceRequestIcon from '../../../../assets/icons/issue-type/service-request.svg';\nimport storyIcon from '../../../../assets/icons/issue-type/story.svg';\nimport subbugIcon from '../../../../assets/icons/issue-type/subbug.svg';\nimport subtaskIcon from '../../../../assets/icons/issue-type/subtask.svg';\nimport taskIcon from '../../../../assets/icons/issue-type/task.svg';\nimport technicalDebtIcon from '../../../../assets/icons/issue-type/technical-debt.svg';\n\nimport './IssueTypeIcon.scss';\n\nexport type IssueTypeIconProps = Partial<Pick<IconRefugeProps, 'containerClassName' | 'title'>> & {\n className?: string;\n size?: number;\n issueType?: IssueType;\n};\n\nconst ISSUE_TYPE_ICONS: Record<IssueType, IconData> = {\n bug: bugIcon,\n design: designIcon,\n epic: epicIcon,\n improvement: improvementIcon,\n incident: incidentIcon,\n info: infoIcon,\n milestone: milestoneIcon,\n newFeature: newFeatureIcon,\n query: queryIcon,\n refactoring: refactoringIcon,\n release: releaseIcon,\n research: researchIcon,\n serviceRequest: serviceRequestIcon,\n story: storyIcon,\n subBug: subbugIcon,\n subTask: subtaskIcon,\n task: taskIcon,\n technicalDebt: technicalDebtIcon,\n};\n\nexport const IssueTypeIcon: FC<IssueTypeIconProps> = ({\n className,\n containerClassName,\n issueType = 'task',\n size = 16,\n title,\n}) => {\n const config = getConfig();\n const {t} = useLocalizedString(defaultMessages, config.lang);\n const ariaLabel = title ? t('type-label', {type: issueType}) : undefined;\n\n return (\n <IconRefuge\n className={cnIssueTypeIcon({type: issueType}, className)}\n containerClassName={containerClassName}\n data={ISSUE_TYPE_ICONS[issueType] ?? taskIcon}\n refugeSize={size}\n title={title}\n aria-label={ariaLabel}\n aria-hidden={!title || undefined}\n />\n );\n};\n\nIssueTypeIcon.displayName = 'IssueTypeIcon';\n"],"mappings":"AACA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAuBC,SAAS,QAAO,mBAAmB;AAE1D,SAAQC,kBAAkB;AAG1B,SAAQC,UAAU;AAElB,SAAQC,eAAe;AACvB,SAAQC,eAAe;AAGvB,OAAOC,OAAO;AACd,OAAOC,UAAU;AACjB,OAAOC,QAAQ;AACf,OAAOC,eAAe;AACtB,OAAOC,YAAY;AACnB,OAAOC,QAAQ;AACf,OAAOC,aAAa;AACpB,OAAOC,cAAc;AACrB,OAAOC,SAAS;AAChB,OAAOC,eAAe;AACtB,OAAOC,WAAW;AAClB,OAAOC,YAAY;AACnB,OAAOC,kBAAkB;AACzB,OAAOC,SAAS;AAChB,OAAOC,UAAU;AACjB,OAAOC,WAAW;AAClB,OAAOC,QAAQ;AACf,OAAOC,iBAAiB;AAExB;AAA8B,SAAAC,GAAA,IAAAC,IAAA;AAQ9B,IAAMC,gBAA6C,GAAG;EAClDC,GAAG,EAAErB,OAAO;EACZsB,MAAM,EAAErB,UAAU;EAClBsB,IAAI,EAAErB,QAAQ;EACdsB,WAAW,EAAErB,eAAe;EAC5BsB,QAAQ,EAAErB,YAAY;EACtBsB,IAAI,EAAErB,QAAQ;EACdsB,SAAS,EAAErB,aAAa;EACxBsB,UAAU,EAAErB,cAAc;EAC1BsB,KAAK,EAAErB,SAAS;EAChBsB,WAAW,EAAErB,eAAe;EAC5BsB,OAAO,EAAErB,WAAW;EACpBsB,QAAQ,EAAErB,YAAY;EACtBsB,cAAc,EAAErB,kBAAkB;EAClCsB,KAAK,EAAErB,SAAS;EAChBsB,MAAM,EAAErB,UAAU;EAClBsB,OAAO,EAAErB,WAAW;EACpBsB,IAAI,EAAErB,QAAQ;EACdsB,aAAa,EAAErB;AACnB,CAAC;AAED,OAAO,IAAMsB,aAAqC,GAAG,SAAxCA,aAAqCA,CAAAC,IAAA,EAM5C;EAAA,IAAAC,qBAAA;EAAA,IALFC,SAAS,GAAAF,IAAA,CAATE,SAAS;IACTC,kBAAkB,GAAAH,IAAA,CAAlBG,kBAAkB;IAAAC,cAAA,GAAAJ,IAAA,CAClBK,SAAS;IAATA,SAAS,GAAAD,cAAA,cAAG,MAAM,GAAAA,cAAA;IAAAE,SAAA,GAAAN,IAAA,CAClBO,IAAI;IAAJA,IAAI,GAAAD,SAAA,cAAG,EAAE,GAAAA,SAAA;IACTE,KAAK,GAAAR,IAAA,CAALQ,KAAK;EAEL,IAAMC,MAAM,GAAGtD,SAAS,CAAC,CAAC;EAC1B,IAAAuD,mBAAA,GAAYtD,kBAAkB,CAACG,eAAe,EAAEkD,MAAM,CAACE,IAAI,CAAC;IAArDC,CAAC,GAAAF,mBAAA,CAADE,CAAC;EACR,IAAMC,SAAS,GAAGL,KAAK,GAAGI,CAAC,CAAC,YAAY,EAAE;IAACE,IAAI,EAAET;EAAS,CAAC,CAAC,GAAGU,SAAS;EAExE,oBACIpC,IAAA,CAACtB,UAAU;IACP6C,SAAS,EAAE5C,eAAe,CAAC;MAACwD,IAAI,EAAET;IAAS,CAAC,EAAEH,SAAS,CAAE;IACzDC,kBAAkB,EAAEA,kBAAmB;IACvCa,IAAI,GAAAf,qBAAA,GAAErB,gBAAgB,CAACyB,SAAS,CAAC,cAAAJ,qBAAA,cAAAA,qBAAA,GAAIzB,QAAS;IAC9CyC,UAAU,EAAEV,IAAK;IACjBC,KAAK,EAAEA,KAAM;IACb,cAAYK,SAAU;IACtB,eAAa,CAACL,KAAK,IAAIO;EAAU,CACpC,CAAC;AAEV,CAAC;AAEDhB,aAAa,CAACmB,WAAW,GAAG,eAAe","ignoreList":[]}
@@ -1,40 +1,164 @@
1
1
  # IssueTypeIcon
2
2
 
3
3
  <!-- description:start -->
4
- Component displaying icons for the various issue types
4
+ Displays the icon for a Tracker issue type (task, bug, epic, improvement, etc.). Each issue type maps to a distinct SVG asset. Unknown type keys fall back to a generic icon.
5
5
  <!-- description:end -->
6
6
 
7
+ ## Usage
8
+
9
+ ```tsx
10
+ import {IssueTypeIcon} from '@weavix/tracker-components';
11
+
12
+ <IssueTypeIcon issueType="bug" />
13
+ ```
14
+
7
15
  ## Component props
8
16
 
9
17
  <!-- props:start -->
10
18
  ```ts
11
19
  {
12
20
  /**
13
- * Additional class
21
+ * Issue type key. Known values are listed below; any other string is
22
+ * accepted and falls back to a generic icon.
23
+ */
24
+ issueType:
25
+ | 'task'
26
+ | 'bug'
27
+ | 'design'
28
+ | 'epic'
29
+ | 'improvement'
30
+ | 'incident'
31
+ | 'info'
32
+ | 'milestone'
33
+ | 'newFeature'
34
+ | 'query'
35
+ | 'refactoring'
36
+ | 'release'
37
+ | 'research'
38
+ | 'serviceRequest'
39
+ | 'story'
40
+ | 'subBug'
41
+ | 'subTask'
42
+ | 'technicalDebt'
43
+ | string;
44
+
45
+ /**
46
+ * Size of the icon in pixels.
47
+ * @default 16
48
+ */
49
+ size?: number;
50
+
51
+ /**
52
+ * Additional CSS class applied to the root element.
14
53
  */
15
54
  className?: string;
55
+
16
56
  /**
17
- * Issue type key
57
+ * Additional CSS class applied to the outer container element.
18
58
  */
19
- issueType:
20
- 'task' |
21
- 'bug' |
22
- 'design' |
23
- 'epic' |
24
- 'improvement' |
25
- 'incident' |
26
- 'info' |
27
- 'newFeature' |
28
- 'query' |
29
- 'refactoring' |
30
- 'release' |
31
- 'serviceRequest' |
32
- 'story' |
33
- 'subBug' |
34
- 'subTask' |
35
- 'technicalDebt' |
36
- 'milestone' |
37
- string;
59
+ containerClassName?: string;
60
+
61
+ /**
62
+ * Human-readable display name for the issue type (e.g. `"Bug"`, `"Story"`).
63
+ * When provided, an accessible label `"Type: <issueType>"` is rendered for
64
+ * screen readers and `title` is forwarded to the icon container.
65
+ * When omitted, the icon is treated as decorative (`aria-hidden`).
66
+ */
67
+ title?: string;
38
68
  }
39
69
  ```
40
70
  <!-- props:end -->
71
+
72
+ ---
73
+
74
+ ## Examples
75
+
76
+ ### Single icon
77
+
78
+ ```tsx
79
+ import {IssueTypeIcon} from '@weavix/tracker-components';
80
+
81
+ <IssueTypeIcon issueType="task" />
82
+ <IssueTypeIcon issueType="bug" />
83
+ <IssueTypeIcon issueType="epic" />
84
+ ```
85
+
86
+ ### Custom size
87
+
88
+ ```tsx
89
+ <IssueTypeIcon issueType="story" size={24} />
90
+ <IssueTypeIcon issueType="story" size={32} />
91
+ ```
92
+
93
+ ### Alongside issue summary
94
+
95
+ ```tsx
96
+ import {IssueTypeIcon} from '@weavix/tracker-components';
97
+
98
+ export const IssueRow = ({issue}: {issue: {type: string; summary: string}}) => (
99
+ <div style={{display: 'flex', alignItems: 'center', gap: 8}}>
100
+ <IssueTypeIcon issueType={issue.type} size={16} />
101
+ <span>{issue.summary}</span>
102
+ </div>
103
+ );
104
+ ```
105
+
106
+ ### All known issue types
107
+
108
+ ```tsx
109
+ import {IssueTypeIcon} from '@weavix/tracker-components';
110
+
111
+ const ISSUE_TYPES = [
112
+ 'task', 'bug', 'design', 'epic', 'improvement',
113
+ 'incident', 'info', 'milestone', 'newFeature', 'query',
114
+ 'refactoring', 'release', 'research', 'serviceRequest',
115
+ 'story', 'subBug', 'subTask', 'technicalDebt',
116
+ ] as const;
117
+
118
+ export const IssueTypeGallery = () => (
119
+ <div style={{display: 'flex', flexWrap: 'wrap', gap: 16}}>
120
+ {ISSUE_TYPES.map((type) => (
121
+ <div key={type} style={{display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 4}}>
122
+ <IssueTypeIcon issueType={type} size={24} />
123
+ <span style={{fontSize: 11}}>{type}</span>
124
+ </div>
125
+ ))}
126
+ </div>
127
+ );
128
+ ```
129
+
130
+ ### From Tracker API
131
+
132
+ Requires the `"tracker:issuetypes:read"` permission in your plugin's `manifest.json`:
133
+
134
+ ```json
135
+ {
136
+ "permissions": {
137
+ "data": ["tracker:issuetypes:read"]
138
+ }
139
+ }
140
+ ```
141
+
142
+ ```tsx
143
+ import {IssueTypeIcon} from '@weavix/tracker-components';
144
+
145
+ const issueType = await trackerApi.v3.get['/issues/{id}/{field}']({
146
+ pathParams: {
147
+ id: 'ISSUEKEY-1',
148
+ field: 'type',
149
+ },
150
+ });
151
+
152
+ <IssueTypeIcon
153
+ issueType={issueType.data.key}
154
+ title={issueType.data.display}
155
+ />
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Notes
161
+
162
+ - The `issueType` value is matched case-sensitively against the known keys. Values returned by the Tracker API (e.g. `"newFeature"`, `"subTask"`) match directly without transformation.
163
+ - Passing an unknown string does not throw — the component renders a generic fallback icon.
164
+ - When `title` is omitted the icon is treated as decorative and gets `aria-hidden="true"`. Pass `title` (e.g. `type.display` from the API) to make the icon accessible.
@@ -0,0 +1,73 @@
1
+ # KeyResultIcon
2
+
3
+ <!-- description:start -->
4
+ Displays the icon for a Tracker key result entity. Renders a fixed SVG asset wrapped in a sized container, with a built-in tooltip that shows the localized "Key result" label on hover.
5
+ <!-- description:end -->
6
+
7
+ ## Usage
8
+
9
+ ```tsx
10
+ import {KeyResultIcon} from '@weavix/tracker-components';
11
+
12
+ <KeyResultIcon />
13
+ ```
14
+
15
+ ## Component props
16
+
17
+ <!-- props:start -->
18
+ ```ts
19
+ {
20
+ /**
21
+ * Size of the SVG icon inside the container in pixels.
22
+ * @default 16
23
+ */
24
+ size?: number;
25
+
26
+ /**
27
+ * Size of the icon container in pixels.
28
+ * @default 24
29
+ */
30
+ refugeSize?: number;
31
+ }
32
+ ```
33
+ <!-- props:end -->
34
+
35
+ ---
36
+
37
+ ## Examples
38
+
39
+ ### Default
40
+
41
+ ```tsx
42
+ import {KeyResultIcon} from '@weavix/tracker-components';
43
+
44
+ <KeyResultIcon />
45
+ ```
46
+
47
+ ### Custom size
48
+
49
+ ```tsx
50
+ // Larger icon for a header row
51
+ <KeyResultIcon size={20} refugeSize={32} />
52
+ ```
53
+
54
+ ### Alongside key result name
55
+
56
+ ```tsx
57
+ import {KeyResultIcon} from '@weavix/tracker-components';
58
+
59
+ export const KeyResultLabel = ({name}: {name: string}) => (
60
+ <div style={{display: 'flex', alignItems: 'center', gap: 8}}>
61
+ <KeyResultIcon />
62
+ <span>{name}</span>
63
+ </div>
64
+ );
65
+ ```
66
+
67
+ ---
68
+
69
+ ## Notes
70
+
71
+ - The tooltip text is **automatically localized** using the Gravity UI `getConfig().lang` setting. No additional i18n setup is required.
72
+ - Unlike [`GoalIcon`](../GoalIcon/README.md), [`ProjectIcon`](../ProjectIcon/README.md), and [`PortfolioIcon`](../PortfolioIcon/README.md), `KeyResultIcon` does **not** accept an entity ID — it always renders the same fixed asset.
73
+ - To render the correct icon for an arbitrary meta entity type, use [`MetaEntityIcon`](../MetaEntityIcon/README.md) instead.
@@ -0,0 +1,136 @@
1
+ # MetaEntityIcon
2
+
3
+ <!-- description:start -->
4
+ A dispatcher component that renders the correct icon for any Tracker meta entity type — project, portfolio, goal, or key result. Pass the entity object and the component automatically selects and renders the appropriate icon with a deterministic color derived from the entity ID.
5
+ <!-- description:end -->
6
+
7
+ ## Usage
8
+
9
+ ```tsx
10
+ import {MetaEntityIcon} from '@weavix/tracker-components';
11
+
12
+ <MetaEntityIcon entity={{entityType: 'project', id: 'proj-1', shortId: 42}} />
13
+ ```
14
+
15
+ ## Component props
16
+
17
+ <!-- props:start -->
18
+ ```ts
19
+ {
20
+ /**
21
+ * The meta entity to display an icon for.
22
+ * Only `entityType`, `id`, and `shortId` are required.
23
+ */
24
+ entity: {
25
+ entityType: 'project' | 'portfolio' | 'goal' | 'keyResult';
26
+ /** String entity ID (used for portfolio color generation). */
27
+ id: string;
28
+ /** Numeric short ID (used for project and goal color generation). */
29
+ shortId: number;
30
+ };
31
+
32
+ /**
33
+ * Size of the SVG icon inside the container in pixels.
34
+ * @default 20
35
+ */
36
+ size?: number;
37
+ }
38
+ ```
39
+ <!-- props:end -->
40
+
41
+ ---
42
+
43
+ ## Supported entity types
44
+
45
+ | `entityType` | Rendered component | Color source |
46
+ |---|---|---|
47
+ | `'project'` | [`ProjectIcon`](../ProjectIcon/README.md) | `shortId` |
48
+ | `'portfolio'` | [`PortfolioIcon`](../PortfolioIcon/README.md) | `id` |
49
+ | `'goal'` | [`GoalIcon`](../GoalIcon/README.md) | `shortId` |
50
+ | `'keyResult'` | [`KeyResultIcon`](../KeyResultIcon/README.md) | fixed asset, no color |
51
+ | anything else | `null` (renders nothing) | — |
52
+
53
+ ---
54
+
55
+ ## Examples
56
+
57
+ ### All entity types
58
+
59
+ ```tsx
60
+ import {MetaEntityIcon} from '@weavix/tracker-components';
61
+
62
+ <MetaEntityIcon entity={{entityType: 'project', id: 'proj-1', shortId: 42}} />
63
+ <MetaEntityIcon entity={{entityType: 'portfolio', id: 'port-1', shortId: 7}} />
64
+ <MetaEntityIcon entity={{entityType: 'goal', id: 'goal-1', shortId: 99}} />
65
+ ```
66
+
67
+ ### Custom size
68
+
69
+ ```tsx
70
+ // 32 px icon for a page header
71
+ <MetaEntityIcon
72
+ entity={{entityType: 'project', id: 'proj-1', shortId: 42}}
73
+ size={32}
74
+ />
75
+ ```
76
+
77
+ ### Rendering from a Tracker API response
78
+
79
+ Requires the `"tracker:entities:write"` permission in your plugin's `manifest.json`:
80
+
81
+ ```json
82
+ {
83
+ "permissions": {
84
+ "data": ["tracker:entities:write"]
85
+ }
86
+ }
87
+ ```
88
+
89
+ `MetaEntityIcon` accepts the shape returned directly by the Tracker entities search endpoint, so you can pass `result.data[i]` without any mapping:
90
+
91
+ ```tsx
92
+ import React, {useEffect, useState} from 'react';
93
+ import {MetaEntityIcon} from '@weavix/tracker-components';
94
+ import type {MetaEntityV2} from '@weavix/tracker-api-types';
95
+
96
+ interface Props {
97
+ trackerApi: TrackerApi;
98
+ }
99
+
100
+ export const EntityList: React.FC<Props> = ({trackerApi}) => {
101
+ const [entities, setEntities] = useState<MetaEntityV2[]>([]);
102
+
103
+ useEffect(() => {
104
+ trackerApi.v3
105
+ .post['/entities/{entityType}/_search']({
106
+ pathParams: {entityType: 'project'},
107
+ queryParams: {fields: ['summary'], page: 1, perPage: 20},
108
+ bodyParams: {filter: {}, filterTypes: ['ALL'], input: ''},
109
+ })
110
+ .then((result) => setEntities(result.data));
111
+ }, [trackerApi]);
112
+
113
+ return (
114
+ <ul>
115
+ {entities.map((entity) => (
116
+ <li key={entity.id} style={{display: 'flex', alignItems: 'center', gap: 8}}>
117
+ <MetaEntityIcon entity={entity} size={20} />
118
+ <span>{entity.fields?.summary?.value ?? entity.id}</span>
119
+ </li>
120
+ ))}
121
+ </ul>
122
+ );
123
+ };
124
+ ```
125
+
126
+ ### Used inside MetaEntitiesSelect
127
+
128
+ `MetaEntityIcon` is used internally by [`MetaEntitiesSelect`](../../MetaEntitiesSelect/README.md) to render each item in the suggest list. You do not need to use it directly when using that component.
129
+
130
+ ---
131
+
132
+ ## Notes
133
+
134
+ - The `entity` prop only requires `entityType`, `id`, and `shortId` — it is compatible with the full `MetaEntityV2` type from `@weavix/tracker-api-types`.
135
+ - For unknown `entityType` values the component renders `null` silently.
136
+ - To render individual entity icons directly, use [`ProjectIcon`](../ProjectIcon/README.md), [`PortfolioIcon`](../PortfolioIcon/README.md), [`GoalIcon`](../GoalIcon/README.md), or [`KeyResultIcon`](../KeyResultIcon/README.md).
@@ -3,4 +3,7 @@ import type { EntityIconProps } from '../EntityIcon';
3
3
  export type PortfolioIconProps = {
4
4
  portfolioId: string;
5
5
  } & Omit<EntityIconProps, 'data' | 'id' | 'alpha'>;
6
- export declare const PortfolioIcon: ({ portfolioId, ...props }: PortfolioIconProps) => React.JSX.Element;
6
+ export declare const PortfolioIcon: {
7
+ ({ portfolioId, ...props }: PortfolioIconProps): React.JSX.Element;
8
+ displayName: string;
9
+ };
@@ -16,4 +16,5 @@ export var PortfolioIcon = function PortfolioIcon(_ref) {
16
16
  withBackground: false
17
17
  }, props));
18
18
  };
19
+ PortfolioIcon.displayName = 'PortfolioIcon';
19
20
  // #sourceMappingURL=PortfolioIcon.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","EntityIcon","portfolioIcon","jsx","_jsx","PortfolioIcon","_ref","portfolioId","props","_objectWithoutProperties","_excluded","_objectSpread","data","id","type","alpha","withBackground"],"sources":["PortfolioIcon.tsx"],"sourcesContent":["import React from 'react';\n\nimport type {EntityIconProps} from '../EntityIcon';\nimport {EntityIcon} from '../EntityIcon';\n\nimport portfolioIcon from '../../../../assets/icons/portfolio.svg';\n\nexport type PortfolioIconProps = {portfolioId: string} & Omit<\n EntityIconProps,\n 'data' | 'id' | 'alpha'\n>;\n\nexport const PortfolioIcon = ({portfolioId, ...props}: PortfolioIconProps) => (\n <EntityIcon\n data={portfolioIcon}\n id={portfolioId}\n type=\"portfolio\"\n alpha={0.5}\n withBackground={false}\n {...props}\n />\n);\n"],"mappings":";;;AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,SAAQC,UAAU;AAElB,OAAOC,aAAa;AAA+C,SAAAC,GAAA,IAAAC,IAAA;AAOnE,OAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAAC,IAAA;EAAA,IAAKC,WAAW,GAAAD,IAAA,CAAXC,WAAW;IAAKC,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAAA,oBAChDN,IAAA,CAACH,UAAU,EAAAU,aAAA;IACPC,IAAI,EAAEV,aAAc;IACpBW,EAAE,EAAEN,WAAY;IAChBO,IAAI,EAAC,WAAW;IAChBC,KAAK,EAAE,GAAI;IACXC,cAAc,EAAE;EAAM,GAClBR,KAAK,CACZ,CAAC;AAAA,CACL","ignoreList":[]}
1
+ {"version":3,"names":["React","EntityIcon","portfolioIcon","jsx","_jsx","PortfolioIcon","_ref","portfolioId","props","_objectWithoutProperties","_excluded","_objectSpread","data","id","type","alpha","withBackground","displayName"],"sources":["PortfolioIcon.tsx"],"sourcesContent":["import React from 'react';\n\nimport type {EntityIconProps} from '../EntityIcon';\nimport {EntityIcon} from '../EntityIcon';\n\nimport portfolioIcon from '../../../../assets/icons/portfolio.svg';\n\nexport type PortfolioIconProps = {portfolioId: string} & Omit<\n EntityIconProps,\n 'data' | 'id' | 'alpha'\n>;\n\nexport const PortfolioIcon = ({portfolioId, ...props}: PortfolioIconProps) => (\n <EntityIcon\n data={portfolioIcon}\n id={portfolioId}\n type=\"portfolio\"\n alpha={0.5}\n withBackground={false}\n {...props}\n />\n);\n\nPortfolioIcon.displayName = 'PortfolioIcon';\n"],"mappings":";;;AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,SAAQC,UAAU;AAElB,OAAOC,aAAa;AAA+C,SAAAC,GAAA,IAAAC,IAAA;AAOnE,OAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAAC,IAAA;EAAA,IAAKC,WAAW,GAAAD,IAAA,CAAXC,WAAW;IAAKC,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAAA,oBAChDN,IAAA,CAACH,UAAU,EAAAU,aAAA;IACPC,IAAI,EAAEV,aAAc;IACpBW,EAAE,EAAEN,WAAY;IAChBO,IAAI,EAAC,WAAW;IAChBC,KAAK,EAAE,GAAI;IACXC,cAAc,EAAE;EAAM,GAClBR,KAAK,CACZ,CAAC;AAAA,CACL;AAEDH,aAAa,CAACY,WAAW,GAAG,eAAe","ignoreList":[]}