wuffle 0.42.2 → 0.43.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/bin/run.js CHANGED
@@ -156,7 +156,7 @@ async function validate() {
156
156
  }
157
157
  }
158
158
 
159
- function checkEnv(key, isError=false) {
159
+ function checkEnv(key, isError = false) {
160
160
 
161
161
  if (!process.env[key]) {
162
162
  return (isError ? error : warning)(
@@ -55,27 +55,25 @@ function GithubIssues(logger, config, columns) {
55
55
  };
56
56
  }
57
57
 
58
+ return update;
59
+ }
60
+
61
+ function getLabelUpdate(issue, newColumn) {
62
+
58
63
  const issueLabels = issue.labels.map(l => l.name);
59
64
 
60
65
  const newLabel = newColumn.label;
61
66
 
62
- const labelsToAdd = (!newLabel || issueLabels.includes(newLabel)) ? [] : [ newLabel ];
67
+ const addLabels = (!newLabel || issueLabels.includes(newLabel)) ? [] : [ newLabel ];
63
68
 
64
- const labelsToRemove = columns.getAll().map(c => c.label).filter(
69
+ const removeLabels = columns.getAll().map(c => c.label).filter(
65
70
  label => label && label !== newLabel && issueLabels.includes(label)
66
71
  );
67
72
 
68
- if (labelsToRemove.length || labelsToAdd.length) {
69
- update = {
70
- ...update,
71
- labels: [
72
- ...issueLabels.filter(l => !labelsToRemove.includes(l)),
73
- ...labelsToAdd
74
- ]
75
- };
76
- }
77
-
78
- return update;
73
+ return {
74
+ addLabels,
75
+ removeLabels
76
+ };
79
77
  }
80
78
 
81
79
  function findIssue(context, issue_number) {
@@ -144,18 +142,67 @@ function GithubIssues(logger, config, columns) {
144
142
  ...getStateUpdate(issue, newColumn)
145
143
  };
146
144
 
147
- if (!hasKeys(update)) {
148
- return;
145
+ const {
146
+ addLabels,
147
+ removeLabels
148
+ } = getLabelUpdate(issue, newColumn);
149
+
150
+ const invocations = [];
151
+
152
+ if (hasKeys(addLabels)) {
153
+
154
+ const addLabelParams = context.repo({
155
+ issue_number,
156
+ labels: addLabels
157
+ });
158
+
159
+ log.info(addLabelParams, 'add labels');
160
+
161
+ invocations.push(
162
+ context.octokit.issues.addLabels(addLabelParams)
163
+ );
149
164
  }
150
165
 
151
- const params = context.repo({
152
- issue_number,
153
- ...update
154
- });
166
+ if (hasKeys(update)) {
167
+
168
+ const params = context.repo({
169
+ issue_number,
170
+ ...update
171
+ });
172
+
173
+ log.info(params, 'update');
174
+
175
+ invocations.push(
176
+ context.octokit.issues.update(params)
177
+ );
178
+ }
179
+
180
+ for (const label of removeLabels) {
181
+
182
+ const removeLabelParams = context.repo({
183
+ issue_number,
184
+ name: label
185
+ });
155
186
 
156
- log.info(params, 'update');
187
+ log.info({
188
+ ...removeLabelParams,
189
+ label
190
+ }, 'remove label');
191
+
192
+ invocations.push(
193
+ context.octokit.issues.removeLabel(removeLabelParams).catch(err => {
194
+
195
+ // gracefully handle non-existing label
196
+ // may have been already removed by other
197
+ // integrations
198
+ if (err.status !== 404) {
199
+ return Promise.reject(err);
200
+ }
201
+ })
202
+ );
203
+ }
157
204
 
158
- return context.octokit.issues.update(params);
205
+ return Promise.all(invocations);
159
206
  }
160
207
 
161
208
 
@@ -169,6 +216,8 @@ function GithubIssues(logger, config, columns) {
169
216
 
170
217
  this.getAssigneeUpdate = getAssigneeUpdate;
171
218
 
219
+ this.getLabelUpdate = getLabelUpdate;
220
+
172
221
  this.findAndMoveIssue = findAndMoveIssue;
173
222
 
174
223
  }
package/lib/columns.js CHANGED
@@ -14,9 +14,15 @@ const StateToNames = {
14
14
  EXTERNAL_CONTRIBUTION: 'Inbox'
15
15
  };
16
16
 
17
+ /**
18
+ * @typedef { { name: string, label?: string|null, closed?: boolean } } ColumnDefinition
19
+ */
17
20
 
18
21
  class Columns {
19
22
 
23
+ /**
24
+ * @param { ColumnDefinition[] } columns
25
+ */
20
26
  constructor(columns) {
21
27
  this.columns = columns;
22
28
 
@@ -89,7 +95,11 @@ function createColumnGetter(columns) {
89
95
 
90
96
  return function(issue) {
91
97
 
92
- const column = sortedColumns.find(column => {
98
+ const {
99
+ column: issueColumn
100
+ } = issue;
101
+
102
+ const columns = sortedColumns.filter(column => {
93
103
 
94
104
  const issueClosed = issue.state === 'closed';
95
105
 
@@ -101,14 +111,17 @@ function createColumnGetter(columns) {
101
111
  return false;
102
112
  }
103
113
 
104
- if (!columnLabel) {
114
+ if (!columnLabel && defaultColumn !== column) {
105
115
  return true;
106
116
  }
107
117
 
108
118
  return issue.labels.find(l => l.name === columnLabel);
109
119
  });
110
120
 
111
- return (column || defaultColumn);
121
+ // ensure that column is stable; it only changes
122
+ // if the given configuration doesn't match the
123
+ // existing column
124
+ return columns.find(c => c.name === issueColumn) || columns[0] || defaultColumn;
112
125
  };
113
126
  }
114
127
 
package/lib/links.js CHANGED
@@ -19,6 +19,9 @@ const InverseLinkTypes = {
19
19
  LINKED_TO: LinkTypes.LINKED_BY
20
20
  };
21
21
 
22
+ /**
23
+ * @typedef { { sourceId: string, targetId: string, type: string, key: string } } Link
24
+ */
22
25
 
23
26
  /**
24
27
  * A utility to maintain links
@@ -30,6 +33,13 @@ class Links {
30
33
  this.inverseLinks = (data && data.inverseLinks) || {};
31
34
  }
32
35
 
36
+ /**
37
+ * @param {string} sourceId
38
+ * @param {string} targetId
39
+ * @param {string} linkType
40
+ *
41
+ * @return {Link}
42
+ */
33
43
  createLink(sourceId, targetId, linkType) {
34
44
 
35
45
  const key = `${targetId}-${linkType}`;
@@ -47,7 +57,7 @@ class Links {
47
57
  /**
48
58
  * Establish a link between source and target with the given type.
49
59
  *
50
- * @param {Object} link
60
+ * @param {Link} link
51
61
  */
52
62
  addLink(link) {
53
63
 
@@ -92,9 +102,9 @@ class Links {
92
102
  /**
93
103
  * Get all links that have the issue as the source.
94
104
  *
95
- * @param {number} sourceId
105
+ * @param {string} sourceId
96
106
  *
97
- * @return {Array<Object>} links
107
+ * @return {Link[]} links
98
108
  */
99
109
  getBySource(sourceId) {
100
110
  const links = this.getDirect(sourceId);
@@ -118,9 +128,9 @@ class Links {
118
128
  /**
119
129
  * Remove primary links that have the issue as the source.
120
130
  *
121
- * @param {number} sourceId
131
+ * @param {string} sourceId
122
132
  *
123
- * @return {Object} removedLinks
133
+ * @return {Link[]} removedLinks
124
134
  */
125
135
  removeBySource(sourceId) {
126
136
 
@@ -91,7 +91,7 @@ function getBaseUrl(req) {
91
91
  }
92
92
 
93
93
 
94
- function renderSuccess(appUrl=null) {
94
+ function renderSuccess(appUrl = null) {
95
95
 
96
96
  return `
97
97
  <!DOCTYPE html>
@@ -17,7 +17,7 @@ class ManifestCreation extends ProbotManifestCreation {
17
17
  const options = {
18
18
  code,
19
19
  mediaType: {
20
- previews: ['fury'] // needed for GHES 2.20 and older
20
+ previews: [ 'fury' ] // needed for GHES 2.20 and older
21
21
  },
22
22
  ...(process.env.GHE_HOST && {
23
23
  baseUrl: `${process.env.GHE_PROTOCOL || 'https'}://${
package/lib/store.js CHANGED
@@ -15,8 +15,19 @@ const {
15
15
  const { Links } = require('./links');
16
16
 
17
17
 
18
+ /**
19
+ * The store that holds all board data
20
+ * and makes it accessible.
21
+ */
18
22
  class Store {
19
23
 
24
+ /**
25
+ * @param {import('./columns')} columns
26
+ * @param {import('./types').Logger} logger
27
+ * @param {import('./events')} events
28
+ *
29
+ * @constructor
30
+ */
20
31
  constructor(columns, logger, events) {
21
32
  this.log = logger.child({
22
33
  name: 'wuffle:store'
package/lib/util/index.js CHANGED
@@ -22,7 +22,7 @@ const {
22
22
 
23
23
  const crypto = require('crypto');
24
24
 
25
- module.exports.randomString = function randomString(length=64) {
25
+ module.exports.randomString = function randomString(length = 64) {
26
26
  return crypto.randomBytes(length).toString('base64');
27
27
  };
28
28
 
package/lib/util/links.js CHANGED
@@ -54,65 +54,87 @@ function findLinks(issue, types) {
54
54
  const issueUrlPart = `https:\\/\\/github.com\\/(${namePart})\\/(${namePart})\\/(?:issues|pull)\\/(\\d+)`;
55
55
  const issuePart = `(?:${issueShortHandPart}|${issueUrlPart})`;
56
56
  const separatorPart = '(?:[\\s,]+(?:and[\\s,]+)?)';
57
+ const taskPart = '[-*]{1}\\s*\\[[x ]{1}\\]\\s+.*';
57
58
 
58
59
  const pattern = new RegExp(`${typePart}${issuePart}`, 'ig');
59
60
  const continuationPattern = new RegExp(`^${separatorPart}${issuePart}`, 'i');
61
+ const taskPattern = new RegExp(`${taskPart}`, 'img');
60
62
 
61
63
  const links = [];
62
64
 
63
65
  let match, continuationMatch;
64
66
 
65
- // find all links with the given types
67
+ const issueMatches = [];
68
+
69
+ /*
70
+ * match = [
71
+ * short_org, short_repo, short_number,
72
+ * long_org, long_repo, long_number
73
+ * ]
74
+ */
66
75
 
67
76
  while ((match = pattern.exec(text))) {
68
77
 
69
78
  const type = phrasesToTypes[match[1]];
70
79
 
71
- let issueMatches = match.slice(2);
80
+ issueMatches.push([ type, match.slice(2) ]);
72
81
 
73
82
  let continuationIdx = match.index + match[0].length;
74
83
 
84
+ /*
85
+ * continuationMatch = [
86
+ * short_org, short_repo, short_number,
87
+ * long_org, long_repo, long_number
88
+ * ]
89
+ */
90
+
75
91
  do {
76
92
  continuationMatch = continuationPattern.exec(text.slice(continuationIdx));
77
93
 
78
94
  if (continuationMatch) {
79
- issueMatches = [
80
- ...issueMatches,
81
- ...continuationMatch.slice(1)
82
- ];
95
+ issueMatches.push([ type, continuationMatch.slice(1) ]);
83
96
 
84
97
  continuationIdx += continuationMatch[0].length;
85
98
  }
86
99
 
87
100
  } while (continuationMatch);
88
101
 
102
+ }
103
+
104
+ while ((match = taskPattern.exec(text))) {
89
105
 
90
- for (let i = 0; i < issueMatches.length / 3; i++) {
106
+ const text = match[0];
91
107
 
92
- const offset = i * 3;
108
+ let issueMatch;
93
109
 
94
- if (typeof issueMatches[offset + 2] === 'undefined') {
95
- continue;
96
- }
110
+ const issuePattern = new RegExp(`${issuePart}`, 'ig');
97
111
 
98
- const owner = issueMatches[offset];
99
- const repo = issueMatches[offset + 1];
100
- const number = parseInt(issueMatches[offset + 2], 10);
101
-
102
- const link = owner ? {
103
- type,
104
- number,
105
- owner,
106
- repo
107
- } : {
108
- type,
109
- number
110
- };
111
-
112
- links.push(link);
112
+ while ((issueMatch = issuePattern.exec(text))) {
113
+ issueMatches.push([ PARENT_OF, issueMatch.slice(1) ]);
113
114
  }
114
115
  }
115
116
 
117
+ for (const issueMatch of issueMatches) {
118
+
119
+ const [ type, issueParts ] = issueMatch;
120
+
121
+ const owner = issueParts[0] || issueParts[3];
122
+ const repo = issueParts[1] || issueParts[4];
123
+ const number = parseInt(issueParts[2] || issueParts[5], 10);
124
+
125
+ const link = owner ? {
126
+ type,
127
+ number,
128
+ owner,
129
+ repo
130
+ } : {
131
+ type,
132
+ number
133
+ };
134
+
135
+ links.push(link);
136
+ }
137
+
116
138
  if (typeof types !== 'undefined') {
117
139
  return filterLinks(links, types);
118
140
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wuffle",
3
- "version": "0.42.2",
3
+ "version": "0.43.0",
4
4
  "description": "A multi-repository task board for GitHub issues",
5
5
  "author": {
6
6
  "name": "Nico Rehwaldt",
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@aws-sdk/client-s3": "^3.38.0",
40
- "async-didi": "^0.2.1",
40
+ "async-didi": "^0.3.1",
41
41
  "body-parser": "^1.19.0",
42
42
  "compression": "^1.7.4",
43
43
  "express-session": "^1.17.2",
@@ -47,7 +47,7 @@
47
47
  "mkdirp": "^1.0.4",
48
48
  "p-defer": "^3.0.0",
49
49
  "prexit": "0.0.5",
50
- "probot": "^11.4.1",
50
+ "probot": "^12.1.1",
51
51
  "smee-client": "^1.2.2"
52
52
  },
53
53
  "devDependencies": {
@@ -57,14 +57,14 @@
57
57
  "@types/mkdirp": "^1.0.2",
58
58
  "chai": "^4.3.4",
59
59
  "eslint": "^7.32.0",
60
- "eslint-plugin-bpmn-io": "^0.12.0",
60
+ "eslint-plugin-bpmn-io": "^0.13.0",
61
61
  "eslint-plugin-graphql": "^4.0.0",
62
- "graphql": "^15.6.1",
62
+ "graphql": "^15.7.2",
63
63
  "mocha": "^9.1.3",
64
- "nock": "^13.1.4",
65
- "nodemon": "^2.0.14",
64
+ "nock": "^13.2.1",
65
+ "nodemon": "^2.0.15",
66
66
  "npm-run-all": "^4.1.5",
67
- "sinon": "^11.1.2",
67
+ "sinon": "^12.0.1",
68
68
  "sinon-chai": "^3.7.0",
69
69
  "typescript": "^4.4.4"
70
70
  },
@@ -94,5 +94,5 @@
94
94
  "index.js",
95
95
  "wuffle.config.example.js"
96
96
  ],
97
- "gitHead": "338f90f7a74710e3492c91605f29cfb02bd96207"
97
+ "gitHead": "e43c02fccfe1e2aea4e8d50f9391ab85aef9d3d3"
98
98
  }
package/public/bundle.css CHANGED
@@ -1 +1 @@
1
- .taskboard.svelte-88s1pm.svelte-88s1pm{height:100vh;display:flex;flex-direction:column}@media all and (max-width: 600px){.board-filter{width:100% !important}.navbar .board-filter-parent{flex:1 !important}.navbar .logo{width:32px;height:32px}}.taskboard-error.svelte-88s1pm.svelte-88s1pm{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center}.taskboard-error.svelte-88s1pm p.svelte-88s1pm{font-size:1.3em;margin-top:1.7rem;margin-bottom:3rem;color:#495057}.taskboard-board.svelte-88s1pm.svelte-88s1pm{display:flex;flex:1;width:100%;padding:3px;padding-top:0;overflow-x:auto}.taskboard-column.svelte-88s1pm.svelte-88s1pm{display:flex;flex-direction:column;min-width:250px;flex:1;border-radius:2px;margin:3px;background:#ebecf0}.taskboard-column.collapsed.svelte-88s1pm.svelte-88s1pm{line-height:2em;min-width:42px;flex:0}.taskboard-column-items.svelte-88s1pm.svelte-88s1pm{flex:1;overflow-y:auto;padding:3px 10px 10px}.taskboard-column-header.svelte-88s1pm.svelte-88s1pm{text-align:center;line-height:2.4em;font-size:1.25em;color:inherit}.taskboard-column-collapse.svelte-88s1pm.svelte-88s1pm{color:#adb5bd;float:left;padding:0 12px;line-height:2.4em;margin-right:-20px;font-size:1.2rem}.taskboard-column-collapse.svelte-88s1pm.svelte-88s1pm:hover{color:#495057}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-collapse.svelte-88s1pm{float:unset;padding:0 12px;margin:0}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-header.svelte-88s1pm{display:flex;flex-direction:column;flex:1}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-name.svelte-88s1pm,.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-issue-count.svelte-88s1pm{transform:rotate(-180deg);writing-mode:vertical-rl}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-name.svelte-88s1pm{order:2}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-issue-count.svelte-88s1pm{padding:.5em 0;order:0}.taskboard-column-name.svelte-88s1pm.svelte-88s1pm{color:#424657}.taskboard-column-issue-count.svelte-88s1pm.svelte-88s1pm{color:#37ACC8;display:inline-block;padding:0 .25em}.taskboard.svelte-88s1pm.svelte-88s1pm{position:relative}.powered-by.svelte-6impii.svelte-6impii.svelte-6impii{position:absolute;bottom:10px;right:10px;padding:7px;border-radius:4px;opacity:.5;transition:opacity .1s, background .1s;color:#333;z-index:10;align-items:center;display:flex}.powered-by.svelte-6impii svg.svelte-6impii.svelte-6impii{vertical-align:bottom}.powered-by.svelte-6impii:not(:hover) .logo.svelte-6impii.svelte-6impii{color:#999}.powered-by.svelte-6impii.svelte-6impii.svelte-6impii:hover{opacity:1;box-shadow:0 1px 3px rgba(0, 0, 0, 0.3);background:white}.powered-by.svelte-6impii:hover .help.svelte-6impii.svelte-6impii{display:block}.powered-by.svelte-6impii .help.svelte-6impii.svelte-6impii{font-size:.9em;display:none}.powered-by.svelte-6impii .logo.svelte-6impii.svelte-6impii{margin-left:.5em}.powered-by.svelte-6impii .help-item.svelte-6impii.svelte-6impii{margin-left:.5em}.powered-by.svelte-6impii .help-item.svelte-6impii+.help-item.svelte-6impii{margin-left:1em}.powered-by.svelte-6impii .help-item.svelte-6impii.svelte-6impii{display:inline-block}.avatar.svelte-9r4rqh.svelte-9r4rqh{position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:#ccc;width:32px;height:32px;line-height:32px}.avatar-shadow.svelte-9r4rqh.svelte-9r4rqh{position:absolute;top:0;left:0;width:100%;height:100%;box-shadow:inset 0 0 2px 0 rgba(0, 0, 0, 0.1)}.avatar-rounded.svelte-9r4rqh.svelte-9r4rqh{border-radius:50%}.avatar-rounded.svelte-9r4rqh .avatar-shadow.svelte-9r4rqh{border-radius:50%}.loader.svelte-1i1edqp.svelte-1i1edqp{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);text-align:center;z-index:200;pointer-events:none}.loader.svelte-1i1edqp>.content.svelte-1i1edqp{opacity:0.3;transition:opacity 0.5s}.loader.shown.svelte-1i1edqp>.content.svelte-1i1edqp{opacity:1;animation:svelte-1i1edqp-pulsate 1s infinite;animation-timing-function:ease-in-out}.loader.svelte-1i1edqp:not(.shown)>.content.svelte-1i1edqp{opacity:0}@keyframes svelte-1i1edqp-pulsate{0%{transform:scale(1);opacity:1}50%{transform:scale(0.9);opacity:0.8}100%{transform:scale(1);opacity:1}}.notifications.svelte-1kbv986{position:fixed;z-index:1010;top:24px;right:24px}.dropdown-parent.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{position:relative}.help-dropdown.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{border-radius:4px;margin:0;margin-top:5px;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;width:100%;min-width:0 !important;max-width:none !important;padding:.6em 0;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.1);box-shadow:0 0.1rem 1rem rgba(0, 0, 0, 0.075);position:absolute;top:100%;z-index:100;left:0px;right:auto;display:block}.help-dropdown.svelte-1bk05k0 .category.svelte-1bk05k0.svelte-1bk05k0{color:#37ACC8;font-weight:bold;padding:0 .8rem}.help-dropdown.svelte-1bk05k0 .note.svelte-1bk05k0.svelte-1bk05k0{padding:0 .8rem;color:#6c757d;margin:0}.help-dropdown.svelte-1bk05k0 .note em.svelte-1bk05k0.svelte-1bk05k0{font-style:italic}.help-dropdown.svelte-1bk05k0 .note.svelte-1bk05k0+.note.svelte-1bk05k0{margin-top:5px}.board-filter.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{width:300px}.board-filter.expanded.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{width:500px;max-width:100%}.board-filter.svelte-1bk05k0>input.svelte-1bk05k0.svelte-1bk05k0{width:100%}.icon.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{color:#dee2e6}.notification.svelte-16ri2nq{box-sizing:border-box;margin:0;padding:0;color:#6c757d;font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;width:384px;max-width:calc(100vw - 32px);padding:16px 24px;overflow:hidden;line-height:1.5;background:#fff;border-radius:3px;box-shadow:0 4px 12px rgba(0, 0, 0, 0.15);border-left:solid 4px #0dcaf0}.notification.error.svelte-16ri2nq{border-left-color:#dc3545}.notification.warning.svelte-16ri2nq{border-left-color:#ffc107}.heading.svelte-16ri2nq{color:#212529;font-weight:normal;font-size:1.2em;margin-bottom:5px}.board-card-container.svelte-2qowi0.svelte-2qowi0{width:100%;margin-bottom:10px}.board-card.svelte-2qowi0.svelte-2qowi0{background:white;border-radius:4px;box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);position:relative;z-index:1;padding:4px 8px;cursor:default}.board-card.svelte-2qowi0 .header.svelte-2qowi0{margin-bottom:7px}.card-link:not(:last-child)>.card-status{margin-bottom:-2px !important}.board-card-links.attached .card-link:last-child>.card-status .state:last-child,.board-card>.card-status .state:last-child{border-bottom-right-radius:4px}.board-card-links.attached .card-link:last-child>.card-status .state:first-child,.board-card>.card-status .state:first-child{border-bottom-left-radius:4px}.board-card-links.svelte-2qowi0.svelte-2qowi0{margin-top:2px}.header.svelte-2qowi0.svelte-2qowi0{display:flex;align-items:center;user-select:none}.header.svelte-2qowi0>.svelte-2qowi0{flex-shrink:0}.header.svelte-2qowi0>.repository.svelte-2qowi0{flex:1}.header.svelte-2qowi0>.collaborator-links.svelte-2qowi0{display:flex;align-items:center}.issue-type.svelte-2qowi0.svelte-2qowi0{margin-right:3px}.issue-type-pull-request.svelte-2qowi0.svelte-2qowi0{color:#6cc644}.issue-number.svelte-2qowi0.svelte-2qowi0{font-weight:bold;margin-right:6px;display:flex;align-items:center;text-decoration:none}.repository.svelte-2qowi0.svelte-2qowi0,.short-title.svelte-2qowi0.svelte-2qowi0{color:#6c757d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.title.svelte-2qowi0.svelte-2qowi0{font-size:1.1em;margin:0 0 9px 0;min-height:30px;line-height:1.2em;color:#495057;overflow:hidden}.footer.svelte-2qowi0.svelte-2qowi0{display:flex;flex-direction:row;flex-wrap:wrap}.links.svelte-2qowi0.svelte-2qowi0{margin-left:auto}.links.svelte-2qowi0 a.svelte-2qowi0{color:#adb5bd}.links.svelte-2qowi0 a.svelte-2qowi0:hover{color:#6c757d}.tag.label,.tag.milestone{margin-right:4px;margin-bottom:4px}.tag.milestone{color:#343a40 !important;border:solid 1px #6c757d}.card-link:first-child{border-top:none !important;margin-top:1px !important}.board-card-links.attached.svelte-2qowi0.svelte-2qowi0{background:#F9F9F9;border-radius:0 0 4px 4px;box-shadow:inset 0 3px 5px -2px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);margin-top:-6px;position:relative;padding:7px 8px 4px 8px}.progress.svelte-2qowi0.svelte-2qowi0{display:flex;flex-direction:row;align-items:center;margin-bottom:7px;cursor:pointer}.progress.svelte-2qowi0:hover svg.svelte-2qowi0{color:#6c757d}.progress.svelte-2qowi0 svg.svelte-2qowi0{color:#CCC;transition:color .3s}.progress.svelte-2qowi0 .bar.svelte-2qowi0{border-radius:3px;height:5px;width:80px;background:#EEE;margin:auto 6px}.progress.svelte-2qowi0 .bar .indicator.svelte-2qowi0{border-radius:3px;background:#6c757d;height:100%}.progress.svelte-2qowi0 .text.svelte-2qowi0{margin-left:6px;font-size:0.9rem;color:#6c757d}.dropdown-parent.svelte-15toawx{position:relative}.help-dropdown.svelte-15toawx{border-radius:4px;margin:0;margin-top:5px;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;width:100%;min-width:0 !important;max-width:none !important;padding:.6em 0;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.1);box-shadow:0 0.1rem 1rem rgba(0, 0, 0, 0.075);position:absolute;top:100%;z-index:100;left:0px;right:auto;display:block}.repository-select.svelte-15toawx{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10}.overlay.svelte-15toawx{width:100%;height:100%;background:rgba(30, 30, 30, 0.3)}.issue-creator.svelte-15toawx{position:absolute;z-index:2;width:500px;max-width:100%;background:white;top:30%;left:50%;transform:translate(-50%);line-height:1.5;border-radius:5px;box-shadow:0 4px 12px rgba(0, 0, 0, 0.15)}.tag.svelte-tftc6d{list-style:none;display:inline-block;height:auto;margin:0 4px 4px 0;padding:1px 7px;font-size:12px;font-weight:500;line-height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:white;background:#fafafa;border-radius:4px;text-decoration:none}.tag.svelte-tftc6d:not(a){cursor:default}.tag.inverted.svelte-tftc6d{color:#333}.svelte-tftc6d:not(a.tag, .tag.clickable){cursor:default}.pull-request-icon.svelte-8ct04d{margin-right:1px}.pull-request-icon.open.svelte-8ct04d{color:#28a745}.pull-request-icon.closed.svelte-8ct04d{color:#cb2431}.pull-request-icon.merged.svelte-8ct04d{color:#6f42c1}.icon.svelte-1wc70x{margin-right:2px;color:#1d76db}.card-status.svelte-ah4rak.svelte-ah4rak{display:flex;flex-direction:row;align-items:stretch;height:3px;width:auto;margin:3px -8px -4px}.state.svelte-ah4rak.svelte-ah4rak{flex:1;background-color:#adb5bd}.state.svelte-ah4rak>span.svelte-ah4rak{display:none}.state.striped.svelte-ah4rak.svelte-ah4rak{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);animation:svelte-ah4rak-progress-bar-stripes 1s linear infinite;background-size:1rem 1rem}.state.success.svelte-ah4rak.svelte-ah4rak{background-color:#4ede9b;box-shadow:0 1px 2px 0px rgba(36, 124, 83, 0.3)}.state.failure.svelte-ah4rak.svelte-ah4rak{background-color:#ea868f;box-shadow:0 1px 2px 0px rgba(203, 70, 83, 0.3)}.state.action-required.svelte-ah4rak.svelte-ah4rak{background-color:#ffda6a;box-shadow:0 1px 2px 0px rgba(230, 181, 32, 0.3)}.state.svelte-ah4rak+.state.svelte-ah4rak{margin-left:1px}@keyframes svelte-ah4rak-progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.assignee.svelte-1v2qyqs.svelte-1v2qyqs{box-sizing:border-box;margin:0;font-size:14px;position:relative;display:inline-block;text-align:center;border-radius:2px;margin-left:3px;transition:margin .1s;height:18px}.assignee.svelte-1v2qyqs img.svelte-1v2qyqs{height:100%;border-radius:2px;vertical-align:unset}.assignee.svelte-1v2qyqs .icon-shadow.svelte-1v2qyqs{position:absolute;display:none;top:0;left:0;height:100%;width:100%;box-shadow:inset 0 0 2px 0 rgba(20, 20, 20, 0.3);border-radius:2px}.assignee.requested-reviewer.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#bf8700;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.commented.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#0dcaf0;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.approved.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#198754;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.requested-changes.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#dc3545;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.svelte-1v2qyqs+.assignee.svelte-1v2qyqs{margin-left:-6px;box-shadow:0 0 0 1px white}.hovered>.header .assignee+.assignee{margin-left:3px !important;box-shadow:none}.card-link:not(:last-child)>.card-status{margin-bottom:-2px !important}.board-card-links.attached .card-link:last-child>.card-status .state:last-child,.board-card>.card-status .state:last-child{border-bottom-right-radius:4px}.board-card-links.attached .card-link:last-child>.card-status .state:first-child,.board-card>.card-status .state:first-child{border-bottom-left-radius:4px}.header.svelte-lrpwe8.svelte-lrpwe8{display:flex;align-items:center;user-select:none}.header.svelte-lrpwe8>.svelte-lrpwe8{flex-shrink:0}.header.svelte-lrpwe8>.collaborator-links.svelte-lrpwe8{display:flex;align-items:center}.issue-number.svelte-lrpwe8.svelte-lrpwe8{font-weight:bold;margin-right:6px;display:flex;align-items:center;text-decoration:none}.short-title.svelte-lrpwe8.svelte-lrpwe8{color:#6c757d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-link.svelte-lrpwe8.svelte-lrpwe8{border-top:solid 1px #F0F0F0;margin-top:2px;padding-top:2px}.card-link.svelte-lrpwe8 .short-title.svelte-lrpwe8{flex:1}.card-link .epic{color:#1d76db}.icon.svelte-1r532dq{margin-right:2px}.icon.issue.open.svelte-1r532dq,.icon.depends-on.closed.svelte-1r532dq{color:#28a745}.icon.issue.closed.svelte-1r532dq,.icon.depends-on.svelte-1r532dq{color:#cb2431}.icon.linked-to.svelte-1r532dq{color:#37ACC8}.icon.svelte-1og232h{vertical-align:initial}ul.svelte-r39x99{list-style:none;margin:0;padding:0}li.svelte-r39x99{padding:0 .8rem;line-height:2em}li.selectable.svelte-r39x99{cursor:pointer}li.selectable.svelte-r39x99:hover,li.selectable.active.svelte-r39x99{background:rgba(55, 172, 200, 0.1)}li.text.svelte-r39x99{color:#6c757d}.matched.svelte-r39x99{background:rgba(55, 172, 200, 0.2);color:#2c8aa0}
1
+ .taskboard.svelte-88s1pm.svelte-88s1pm{height:100vh;display:flex;flex-direction:column}@media all and (max-width: 600px){.board-filter{width:100% !important}.navbar .board-filter-parent{flex:1 !important}.navbar .logo{width:32px;height:32px}}.taskboard-error.svelte-88s1pm.svelte-88s1pm{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center}.taskboard-error.svelte-88s1pm p.svelte-88s1pm{font-size:1.3em;margin-top:1.7rem;margin-bottom:3rem;color:#495057}.taskboard-board.svelte-88s1pm.svelte-88s1pm{display:flex;flex:1;width:100%;padding:3px;padding-top:0;overflow-x:auto}.taskboard-column.svelte-88s1pm.svelte-88s1pm{display:flex;flex-direction:column;min-width:250px;flex:1;border-radius:2px;margin:3px;background:#ebecf0}.taskboard-column.collapsed.svelte-88s1pm.svelte-88s1pm{line-height:2em;min-width:42px;flex:0}.taskboard-column-items.svelte-88s1pm.svelte-88s1pm{flex:1;overflow-y:auto;padding:3px 10px 10px}.taskboard-column-header.svelte-88s1pm.svelte-88s1pm{text-align:center;line-height:2.4em;font-size:1.25em;color:inherit}.taskboard-column-collapse.svelte-88s1pm.svelte-88s1pm{color:#adb5bd;float:left;padding:0 12px;line-height:2.4em;margin-right:-20px;font-size:1.2rem}.taskboard-column-collapse.svelte-88s1pm.svelte-88s1pm:hover{color:#495057}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-collapse.svelte-88s1pm{float:unset;padding:0 12px;margin:0}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-header.svelte-88s1pm{display:flex;flex-direction:column;flex:1}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-name.svelte-88s1pm,.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-issue-count.svelte-88s1pm{transform:rotate(-180deg);writing-mode:vertical-rl}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-name.svelte-88s1pm{order:2}.taskboard-column.collapsed.svelte-88s1pm .taskboard-column-issue-count.svelte-88s1pm{padding:.5em 0;order:0}.taskboard-column-name.svelte-88s1pm.svelte-88s1pm{color:#424657}.taskboard-column-issue-count.svelte-88s1pm.svelte-88s1pm{color:#37ACC8;display:inline-block;padding:0 .25em}.taskboard.svelte-88s1pm.svelte-88s1pm{position:relative}.powered-by.svelte-6impii.svelte-6impii.svelte-6impii{position:absolute;bottom:10px;right:10px;padding:7px;border-radius:4px;opacity:.5;transition:opacity .1s, background .1s;color:#333;z-index:10;align-items:center;display:flex}.powered-by.svelte-6impii svg.svelte-6impii.svelte-6impii{vertical-align:bottom}.powered-by.svelte-6impii:not(:hover) .logo.svelte-6impii.svelte-6impii{color:#999}.powered-by.svelte-6impii.svelte-6impii.svelte-6impii:hover{opacity:1;box-shadow:0 1px 3px rgba(0, 0, 0, 0.3);background:white}.powered-by.svelte-6impii:hover .help.svelte-6impii.svelte-6impii{display:block}.powered-by.svelte-6impii .help.svelte-6impii.svelte-6impii{font-size:.9em;display:none}.powered-by.svelte-6impii .logo.svelte-6impii.svelte-6impii{margin-left:.5em}.powered-by.svelte-6impii .help-item.svelte-6impii.svelte-6impii{margin-left:.5em}.powered-by.svelte-6impii .help-item.svelte-6impii+.help-item.svelte-6impii{margin-left:1em}.powered-by.svelte-6impii .help-item.svelte-6impii.svelte-6impii{display:inline-block}.avatar.svelte-9r4rqh.svelte-9r4rqh{position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:#ccc;width:32px;height:32px;line-height:32px}.avatar-shadow.svelte-9r4rqh.svelte-9r4rqh{position:absolute;top:0;left:0;width:100%;height:100%;box-shadow:inset 0 0 2px 0 rgba(0, 0, 0, 0.1)}.avatar-rounded.svelte-9r4rqh.svelte-9r4rqh{border-radius:50%}.avatar-rounded.svelte-9r4rqh .avatar-shadow.svelte-9r4rqh{border-radius:50%}.loader.svelte-1i1edqp.svelte-1i1edqp{position:absolute;left:50%;top:50%;transform:translate(-50%, -50%);text-align:center;z-index:200;pointer-events:none}.loader.svelte-1i1edqp>.content.svelte-1i1edqp{opacity:0.3;transition:opacity 0.5s}.loader.shown.svelte-1i1edqp>.content.svelte-1i1edqp{opacity:1;animation:svelte-1i1edqp-pulsate 1s infinite;animation-timing-function:ease-in-out}.loader.svelte-1i1edqp:not(.shown)>.content.svelte-1i1edqp{opacity:0}@keyframes svelte-1i1edqp-pulsate{0%{transform:scale(1);opacity:1}50%{transform:scale(0.9);opacity:0.8}100%{transform:scale(1);opacity:1}}.notifications.svelte-1kbv986{position:fixed;z-index:1010;top:24px;right:24px}.dropdown-parent.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{position:relative}.help-dropdown.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{border-radius:4px;margin:0;margin-top:5px;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;width:100%;min-width:0 !important;max-width:none !important;padding:.6em 0;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.1);box-shadow:0 0.1rem 1rem rgba(0, 0, 0, 0.075);position:absolute;top:100%;z-index:100;left:0px;right:auto;display:block}.help-dropdown.svelte-1bk05k0 .category.svelte-1bk05k0.svelte-1bk05k0{color:#37ACC8;font-weight:bold;padding:0 .8rem}.help-dropdown.svelte-1bk05k0 .note.svelte-1bk05k0.svelte-1bk05k0{padding:0 .8rem;color:#6c757d;margin:0}.help-dropdown.svelte-1bk05k0 .note em.svelte-1bk05k0.svelte-1bk05k0{font-style:italic}.help-dropdown.svelte-1bk05k0 .note.svelte-1bk05k0+.note.svelte-1bk05k0{margin-top:5px}.board-filter.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{width:300px}.board-filter.expanded.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{width:500px;max-width:100%}.board-filter.svelte-1bk05k0>input.svelte-1bk05k0.svelte-1bk05k0{width:100%}.icon.svelte-1bk05k0.svelte-1bk05k0.svelte-1bk05k0{color:#dee2e6}.notification.svelte-16ri2nq{box-sizing:border-box;margin:0;padding:0;color:#6c757d;font-size:14px;font-variant:tabular-nums;line-height:1.5;list-style:none;width:384px;max-width:calc(100vw - 32px);padding:16px 24px;overflow:hidden;line-height:1.5;background:#fff;border-radius:3px;box-shadow:0 4px 12px rgba(0, 0, 0, 0.15);border-left:solid 4px #0dcaf0}.notification.error.svelte-16ri2nq{border-left-color:#dc3545}.notification.warning.svelte-16ri2nq{border-left-color:#ffc107}.heading.svelte-16ri2nq{color:#212529;font-weight:normal;font-size:1.2em;margin-bottom:5px}.board-card-container.svelte-2qowi0.svelte-2qowi0{width:100%;margin-bottom:10px}.board-card.svelte-2qowi0.svelte-2qowi0{background:white;border-radius:4px;box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);position:relative;z-index:1;padding:4px 8px;cursor:default}.board-card.svelte-2qowi0 .header.svelte-2qowi0{margin-bottom:7px}.card-link:not(:last-child)>.card-status{margin-bottom:-2px !important}.board-card-links.attached .card-link:last-child>.card-status .state:last-child,.board-card>.card-status .state:last-child{border-bottom-right-radius:4px}.board-card-links.attached .card-link:last-child>.card-status .state:first-child,.board-card>.card-status .state:first-child{border-bottom-left-radius:4px}.board-card-links.svelte-2qowi0.svelte-2qowi0{margin-top:2px}.header.svelte-2qowi0.svelte-2qowi0{display:flex;align-items:center;user-select:none}.header.svelte-2qowi0>.svelte-2qowi0{flex-shrink:0}.header.svelte-2qowi0>.repository.svelte-2qowi0{flex:1}.header.svelte-2qowi0>.collaborator-links.svelte-2qowi0{display:flex;align-items:center}.issue-type.svelte-2qowi0.svelte-2qowi0{margin-right:3px}.issue-type-pull-request.svelte-2qowi0.svelte-2qowi0{color:#6cc644}.issue-number.svelte-2qowi0.svelte-2qowi0{font-weight:bold;margin-right:6px;display:flex;align-items:center;text-decoration:none}.repository.svelte-2qowi0.svelte-2qowi0,.short-title.svelte-2qowi0.svelte-2qowi0{color:#6c757d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.title.svelte-2qowi0.svelte-2qowi0{font-size:1.1em;margin:0 0 9px 0;min-height:30px;line-height:1.2em;color:#495057;overflow:hidden}.footer.svelte-2qowi0.svelte-2qowi0{display:flex;flex-direction:row;flex-wrap:wrap}.links.svelte-2qowi0.svelte-2qowi0{margin-left:auto}.links.svelte-2qowi0 a.svelte-2qowi0{color:#adb5bd}.links.svelte-2qowi0 a.svelte-2qowi0:hover{color:#6c757d}.tag.label,.tag.milestone{margin-right:4px;margin-bottom:4px}.tag.milestone{color:#343a40 !important;border:solid 1px #6c757d}.card-link:first-child{border-top:none !important;margin-top:1px !important}.board-card-links.attached.svelte-2qowi0.svelte-2qowi0{background:#F9F9F9;border-radius:0 0 4px 4px;box-shadow:inset 0 3px 5px -2px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.1);margin-top:-6px;position:relative;padding:7px 8px 4px 8px}.progress.svelte-2qowi0.svelte-2qowi0{display:flex;flex-direction:row;align-items:center;margin-bottom:7px;cursor:pointer}.progress.svelte-2qowi0:hover svg.svelte-2qowi0{color:#6c757d}.progress.svelte-2qowi0 svg.svelte-2qowi0{color:#CCC;transition:color .3s}.progress.svelte-2qowi0 .bar.svelte-2qowi0{border-radius:3px;height:5px;width:80px;background:#EEE;margin:auto 6px}.progress.svelte-2qowi0 .bar .indicator.svelte-2qowi0{border-radius:3px;background:#6c757d;height:100%}.progress.svelte-2qowi0 .text.svelte-2qowi0{margin-left:6px;font-size:0.9rem;color:#6c757d}.dropdown-parent.svelte-15toawx{position:relative}.help-dropdown.svelte-15toawx{border-radius:4px;margin:0;margin-top:5px;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;width:100%;min-width:0 !important;max-width:none !important;padding:.6em 0;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0, 0, 0, 0.1);box-shadow:0 0.1rem 1rem rgba(0, 0, 0, 0.075);position:absolute;top:100%;z-index:100;left:0px;right:auto;display:block}.repository-select.svelte-15toawx{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10}.overlay.svelte-15toawx{width:100%;height:100%;background:rgba(30, 30, 30, 0.3)}.issue-creator.svelte-15toawx{position:absolute;z-index:2;width:500px;max-width:100%;background:white;top:30%;left:50%;transform:translate(-50%);line-height:1.5;border-radius:5px;box-shadow:0 4px 12px rgba(0, 0, 0, 0.15)}.tag.svelte-tftc6d{list-style:none;display:inline-block;height:auto;margin:0 4px 4px 0;padding:1px 7px;font-size:12px;font-weight:500;line-height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:white;background:#fafafa;border-radius:4px;text-decoration:none}.tag.svelte-tftc6d:not(a){cursor:default}.tag.inverted.svelte-tftc6d{color:#333}.svelte-tftc6d:not(a.tag, .tag.clickable){cursor:default}.pull-request-icon.svelte-1570hl6{margin-right:1px}.pull-request-icon.open.svelte-1570hl6{color:#28a745}.pull-request-icon.closed.svelte-1570hl6{color:#cb2431}.pull-request-icon.merged.svelte-1570hl6{color:#6f42c1}.pull-request-icon.draft.svelte-1570hl6{color:#6e7781}.icon.svelte-1wc70x{margin-right:2px;color:#1d76db}.card-status.svelte-ah4rak.svelte-ah4rak{display:flex;flex-direction:row;align-items:stretch;height:3px;width:auto;margin:3px -8px -4px}.state.svelte-ah4rak.svelte-ah4rak{flex:1;background-color:#adb5bd}.state.svelte-ah4rak>span.svelte-ah4rak{display:none}.state.striped.svelte-ah4rak.svelte-ah4rak{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);animation:svelte-ah4rak-progress-bar-stripes 1s linear infinite;background-size:1rem 1rem}.state.success.svelte-ah4rak.svelte-ah4rak{background-color:#4ede9b;box-shadow:0 1px 2px 0px rgba(36, 124, 83, 0.3)}.state.failure.svelte-ah4rak.svelte-ah4rak{background-color:#ea868f;box-shadow:0 1px 2px 0px rgba(203, 70, 83, 0.3)}.state.action-required.svelte-ah4rak.svelte-ah4rak{background-color:#ffda6a;box-shadow:0 1px 2px 0px rgba(230, 181, 32, 0.3)}.state.svelte-ah4rak+.state.svelte-ah4rak{margin-left:1px}@keyframes svelte-ah4rak-progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.assignee.svelte-1v2qyqs.svelte-1v2qyqs{box-sizing:border-box;margin:0;font-size:14px;position:relative;display:inline-block;text-align:center;border-radius:2px;margin-left:3px;transition:margin .1s;height:18px}.assignee.svelte-1v2qyqs img.svelte-1v2qyqs{height:100%;border-radius:2px;vertical-align:unset}.assignee.svelte-1v2qyqs .icon-shadow.svelte-1v2qyqs{position:absolute;display:none;top:0;left:0;height:100%;width:100%;box-shadow:inset 0 0 2px 0 rgba(20, 20, 20, 0.3);border-radius:2px}.assignee.requested-reviewer.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#bf8700;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.commented.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#0dcaf0;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.approved.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#198754;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.requested-changes.svelte-1v2qyqs.svelte-1v2qyqs:before{content:'';display:block;background:#dc3545;box-shadow:0 0 0 2px white;width:6px;height:6px;border-radius:50%;position:absolute;top:-2px;left:-2px;z-index:1}.assignee.svelte-1v2qyqs+.assignee.svelte-1v2qyqs{margin-left:-6px;box-shadow:0 0 0 1px white}.hovered>.header .assignee+.assignee{margin-left:3px !important;box-shadow:none}.card-link:not(:last-child)>.card-status{margin-bottom:-2px !important}.board-card-links.attached .card-link:last-child>.card-status .state:last-child,.board-card>.card-status .state:last-child{border-bottom-right-radius:4px}.board-card-links.attached .card-link:last-child>.card-status .state:first-child,.board-card>.card-status .state:first-child{border-bottom-left-radius:4px}.header.svelte-lrpwe8.svelte-lrpwe8{display:flex;align-items:center;user-select:none}.header.svelte-lrpwe8>.svelte-lrpwe8{flex-shrink:0}.header.svelte-lrpwe8>.collaborator-links.svelte-lrpwe8{display:flex;align-items:center}.issue-number.svelte-lrpwe8.svelte-lrpwe8{font-weight:bold;margin-right:6px;display:flex;align-items:center;text-decoration:none}.short-title.svelte-lrpwe8.svelte-lrpwe8{color:#6c757d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-link.svelte-lrpwe8.svelte-lrpwe8{border-top:solid 1px #F0F0F0;margin-top:2px;padding-top:2px}.card-link.svelte-lrpwe8 .short-title.svelte-lrpwe8{flex:1}.card-link .epic{color:#1d76db}.icon.svelte-1r532dq{margin-right:2px}.icon.issue.open.svelte-1r532dq,.icon.depends-on.closed.svelte-1r532dq{color:#28a745}.icon.issue.closed.svelte-1r532dq,.icon.depends-on.svelte-1r532dq{color:#cb2431}.icon.linked-to.svelte-1r532dq{color:#37ACC8}.icon.svelte-1og232h{vertical-align:initial}ul.svelte-r39x99{list-style:none;margin:0;padding:0}li.svelte-r39x99{padding:0 .8rem;line-height:2em}li.selectable.svelte-r39x99{cursor:pointer}li.selectable.svelte-r39x99:hover,li.selectable.active.svelte-r39x99{background:rgba(55, 172, 200, 0.1)}li.text.svelte-r39x99{color:#6c757d}.matched.svelte-r39x99{background:rgba(55, 172, 200, 0.2);color:#2c8aa0}