kireji 0.9.0 → 0.10.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.
Files changed (103) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/src/app/kireji/description +1 -1
  4. package/src/app/kireji/issue-tracker/filters/apply.js +29 -0
  5. package/src/app/kireji/issue-tracker/filters/boolean/part.json +10 -0
  6. package/src/app/kireji/issue-tracker/filters/boolean/point.js +7 -0
  7. package/src/app/kireji/issue-tracker/filters/boolean/view-update.js +1 -0
  8. package/src/app/kireji/issue-tracker/filters/constants.js +2 -0
  9. package/src/app/kireji/issue-tracker/filters/dropdown/constants.js +2 -0
  10. package/src/app/kireji/issue-tracker/filters/dropdown/none/part.json +1 -0
  11. package/src/app/kireji/issue-tracker/filters/dropdown/part.html_.js +15 -0
  12. package/src/app/kireji/issue-tracker/filters/dropdown/part.json +3 -0
  13. package/src/app/kireji/issue-tracker/filters/dropdown/priority/part.json +1 -0
  14. package/src/app/kireji/issue-tracker/filters/dropdown/status/part.json +1 -0
  15. package/src/app/kireji/issue-tracker/filters/dropdown/type.d.ts +12 -0
  16. package/src/app/kireji/issue-tracker/filters/dropdown/view-update.js +10 -0
  17. package/src/app/kireji/issue-tracker/filters/order/by/date/part.json +1 -0
  18. package/src/app/kireji/issue-tracker/filters/order/by/part.json +9 -0
  19. package/src/app/kireji/issue-tracker/filters/order/by/priority/part.json +1 -0
  20. package/src/app/kireji/issue-tracker/filters/order/by/status/part.json +1 -0
  21. package/src/app/kireji/issue-tracker/filters/order/by/title/part.json +1 -0
  22. package/src/app/kireji/issue-tracker/filters/order/by/type.d.ts +11 -0
  23. package/src/app/kireji/issue-tracker/filters/order/by/view-update.js +2 -0
  24. package/src/app/kireji/issue-tracker/filters/order/descending/part.json +3 -0
  25. package/src/app/kireji/issue-tracker/filters/order/descending/view-update.js +6 -0
  26. package/src/app/kireji/issue-tracker/filters/order/part.json +3 -0
  27. package/src/app/kireji/issue-tracker/filters/order/type.d.ts +10 -0
  28. package/src/app/kireji/issue-tracker/filters/part.css +149 -0
  29. package/src/app/kireji/issue-tracker/filters/part.html_.js +10 -3
  30. package/src/app/kireji/issue-tracker/filters/part.json +10 -1
  31. package/src/app/kireji/issue-tracker/filters/point.js +27 -0
  32. package/src/app/kireji/issue-tracker/filters/priority/a/part.json +3 -0
  33. package/src/app/kireji/issue-tracker/filters/priority/b/part.json +3 -0
  34. package/src/app/kireji/issue-tracker/filters/priority/c/part.json +3 -0
  35. package/src/app/kireji/issue-tracker/filters/priority/part.json +3 -0
  36. package/src/app/kireji/issue-tracker/filters/priority/type.d.ts +11 -0
  37. package/src/app/kireji/issue-tracker/filters/status/doing/part.json +3 -0
  38. package/src/app/kireji/issue-tracker/filters/status/done/part.json +3 -0
  39. package/src/app/kireji/issue-tracker/filters/status/part.json +8 -0
  40. package/src/app/kireji/issue-tracker/filters/status/to-do/part.json +3 -0
  41. package/src/app/kireji/issue-tracker/filters/status/type.d.ts +11 -0
  42. package/src/app/kireji/issue-tracker/filters/type.d.ts +13 -2
  43. package/src/app/kireji/issue-tracker/filters/view-hydrate.js +15 -0
  44. package/src/app/kireji/issue-tracker/filters/view-update.js +1 -0
  45. package/src/app/kireji/issue-tracker/issues.html_.js +1 -0
  46. package/src/app/kireji/issue-tracker/part.css_.js +1 -1
  47. package/src/app/kireji/issue-tracker/part.html_.js +1 -2
  48. package/src/app/kireji/issue-tracker/pathname-translate-canonical.js +0 -3
  49. package/src/app/kireji/issue-tracker/sections/issues/1776193480/title +1 -1
  50. package/src/app/kireji/issue-tracker/sections/issues/1776205544/links_.js +1 -0
  51. package/src/app/kireji/issue-tracker/sections/issues/1776208669/links_.js +1 -0
  52. package/src/app/kireji/issue-tracker/sections/issues/1776209115/links_.js +3 -0
  53. package/src/app/kireji/issue-tracker/sections/issues/1776211364/description +1 -1
  54. package/src/app/kireji/issue-tracker/sections/issues/1776211364/links_.js +5 -1
  55. package/src/app/kireji/issue-tracker/sections/issues/1776212048/links_.js +3 -0
  56. package/src/app/kireji/issue-tracker/sections/issues/1776212294/links_.js +3 -0
  57. package/src/app/kireji/issue-tracker/sections/issues/1776212412/links_.js +3 -0
  58. package/src/app/kireji/issue-tracker/sections/issues/1776212585/links_.js +3 -0
  59. package/src/app/kireji/issue-tracker/sections/issues/1776212811/links_.js +3 -0
  60. package/src/app/kireji/issue-tracker/sections/issues/1776262432/description +1 -0
  61. package/src/app/kireji/issue-tracker/sections/issues/1776262432/links_.js +8 -0
  62. package/src/app/kireji/issue-tracker/sections/issues/1776262432/part.json +3 -0
  63. package/src/app/kireji/issue-tracker/sections/issues/1776262432/priority +1 -0
  64. package/src/app/kireji/issue-tracker/sections/issues/1776262432/status +1 -0
  65. package/src/app/kireji/issue-tracker/sections/issues/1776262432/title +1 -0
  66. package/src/app/kireji/issue-tracker/sections/issues/1776263309/description +3 -0
  67. package/src/app/kireji/issue-tracker/sections/issues/1776263309/links_.js +3 -0
  68. package/src/app/kireji/issue-tracker/sections/issues/1776263309/part.json +3 -0
  69. package/src/app/kireji/issue-tracker/sections/issues/1776263309/priority +1 -0
  70. package/src/app/kireji/issue-tracker/sections/issues/1776263309/status +1 -0
  71. package/src/app/kireji/issue-tracker/sections/issues/1776263309/title +1 -0
  72. package/src/app/kireji/issue-tracker/sections/issues/1776282415/description +1 -0
  73. package/src/app/kireji/issue-tracker/sections/issues/1776282415/links_.js +3 -0
  74. package/src/app/kireji/issue-tracker/sections/issues/1776282415/part.json +3 -0
  75. package/src/app/kireji/issue-tracker/sections/issues/1776282415/priority +1 -0
  76. package/src/app/kireji/issue-tracker/sections/issues/1776282415/status +1 -0
  77. package/src/app/kireji/issue-tracker/sections/issues/1776282415/title +1 -0
  78. package/src/app/kireji/issue-tracker/sections/issues/1776307785/affects_.js +3 -0
  79. package/src/app/kireji/issue-tracker/sections/issues/1776307785/description +1 -0
  80. package/src/app/kireji/issue-tracker/sections/issues/1776307785/part.json +3 -0
  81. package/src/app/kireji/issue-tracker/sections/issues/1776307785/priority +1 -0
  82. package/src/app/kireji/issue-tracker/sections/issues/1776307785/status +1 -0
  83. package/src/app/kireji/issue-tracker/sections/issues/1776307785/title +1 -0
  84. package/src/app/kireji/issue-tracker/sections/issues/issue/card.html_.js +2 -2
  85. package/src/app/kireji/issue-tracker/sections/issues/issue/date-nice.js +1 -0
  86. package/src/app/kireji/issue-tracker/sections/issues/issue/part.html_.js +3 -2
  87. package/src/app/kireji/issue-tracker/sections/issues/issue/part.json +3 -0
  88. package/src/app/kireji/issue-tracker/sections/issues/issue/type.d.ts +2 -0
  89. package/src/app/kireji/issue-tracker/static.css +125 -33
  90. package/src/app/kireji/issue-tracker/type.d.ts +3 -0
  91. package/src/app/kireji/meta-description +1 -1
  92. package/src/description +1 -1
  93. package/src/landing-model.json +19 -1
  94. package/src/parts/abstract/part/build.js +20 -12
  95. package/src/parts/abstract/part/type.d.ts +5 -3
  96. package/src/parts/desktop/color/part.html_.js +1 -1
  97. package/src/parts/desktop/era/modern/part.css +5 -10
  98. package/src/parts/desktop/era/part.html_.js +1 -1
  99. package/src/parts/desktop/era/vintage/static.css +5 -7
  100. package/src/schema.kireji.json +2 -2
  101. package/src/schema.part.json +8 -1
  102. package/src/static.css +2 -1
  103. package/src/type.d.ts +4 -4
@@ -0,0 +1 @@
1
+ Implement the full operating system experience for the Demo Ecosystem. This issue links together a collection of smaller issues that relate to various features of the operating system that need to be completed in order to make it feel well-rounded.
@@ -0,0 +1,8 @@
1
+ return [
2
+ kirejiIssues[1776212811],
3
+ kirejiIssues[1776212585],
4
+ kirejiIssues[1776212412],
5
+ kirejiIssues[1776212294],
6
+ kirejiIssues[1776212048],
7
+ kirejiIssues[1776211364]
8
+ ]
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "issue.."
3
+ }
@@ -0,0 +1 @@
1
+ Complete Operating System
@@ -0,0 +1,3 @@
1
+ Mobile user interface/usability requires some additional feature support on top of the desktop architecture. This means making special consideration for the lack of a keyboard and the tap feature. Where possible, employ the same usability solutions across both platforms for a consistent look-and-feel across devices. For example, a tall and narrow browser window should look the same as the equivalent portrait layout on a mobile device. Where possible, let click-and-drag on screen feel and behave like tab-and-drag on mobile.
2
+
3
+ This is an overall issue that links together all mobile-specific issues.
@@ -0,0 +1,3 @@
1
+ return [
2
+ kirejiIssues[1776209115],
3
+ ]
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "issue.."
3
+ }
@@ -0,0 +1 @@
1
+ Improve Mobile Usability
@@ -0,0 +1 @@
1
+ In the Issue Tracker app, implement filters over the issue list. Make sure that the filters and list look and feel good in both vintage and modern era for both light and dark color modes on both mobile and desktop.
@@ -0,0 +1,3 @@
1
+ return [
2
+ _.app.kireji.issueTracker
3
+ ]
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "issue.."
3
+ }
@@ -0,0 +1,3 @@
1
+ return [
2
+ _.app.kireji.issueTracker
3
+ ]
@@ -0,0 +1 @@
1
+ In both vintage and modern modes, the issue modal of the issue tracker doesn't look finished. It's especially clear in vintage, though; the exit button in the top right can lead to accidentally clicking the actual exit button, closing the tracker app completely. Tidy up the UI and make the modal feel like a complete feature.
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "issue.."
3
+ }
@@ -0,0 +1 @@
1
+ Improve Issue Modal
@@ -1,8 +1,8 @@
1
1
  return (
2
2
  `<a ${_.pointAttr()} href=${kirejiIssue.canonicalURL} class="issue-row" data-id="${kirejiIssue.key}" data-priority="${kirejiIssue.priority}" data-status="${kirejiIssue.status}">` + (
3
- // `<span class="issue-id">${issue.key}</span>` +
4
3
  `<span class="issue-title">${kirejiIssue.title}</span>` +
5
4
  `<span class="issue-priority">${kirejiIssue.priority}</span>` +
6
- `<span class="issue-status">${kirejiIssue.status}</span>`
5
+ `<span class="issue-status">${kirejiIssue.status}</span>` +
6
+ `<span class="issue-date">${kirejiIssue.niceDate(kirejiIssue.key)}</span>`
7
7
  ) + "</a>"
8
8
  )
@@ -0,0 +1 @@
1
+ return new Date(UNIX_TIMESTAMP * 1000).toLocaleString("en-US", { dateStyle: "medium" })
@@ -1,3 +1,4 @@
1
+ const linkedIssues = kirejiIssue.links.map(linked => linked["card.html"]).join("")
1
2
  return (
2
3
  `<h1>${kirejiIssue.title}</h1>` +
3
4
  `<button ${kirejiIssue.pointAttr("close")} class=exit-button>✕</button>` +
@@ -6,7 +7,7 @@ return (
6
7
  `<b>Priority:</b> <span class="issue-priority">${kirejiIssue.priority}</span>\n\n` +
7
8
  `<b>Status:</b> <span class="issue-status">${kirejiIssue.status}</span>\n\n` +
8
9
  `<b>Description:</b>\n${kirejiIssue.description}\n\n` +
9
- `<b>Affected Parts:</b>\n<span class="issue-affects">${kirejiIssue.affects.map(affected => affected.host).join(", ") || "None"}</span>\n\n` +
10
- `<b>Linked Issues:</b>\n<span class="issue-links">${kirejiIssue.links.map(linked => linked["card.html"]).join("<br>") || "None"}</span>`
10
+ `<b>Affected Parts:</b>\n<span class="issue-affects">${kirejiIssue.affects.map(affected => affected === _ ? "ecosystem" : affected.host).join(", ") || "None"}</span>\n\n` +
11
+ `<b>Linked Issues:</b>${linkedIssues ? `\n<span class="issue-links">${linkedIssues}</span>` : " None"}`
11
12
  ) + "</p>"
12
13
  )
@@ -4,6 +4,9 @@
4
4
  "close": [
5
5
  "POINTER_EVENT",
6
6
  "TARGET_ELEMENT"
7
+ ],
8
+ "date-nice": [
9
+ "UNIX_TIMESTAMP"
7
10
  ]
8
11
  }
9
12
  }
@@ -8,6 +8,8 @@ declare interface IKirejiIssue
8
8
  readonly affects: IPartAny[]
9
9
  readonly links: IKirejiIssue[]
10
10
  readonly "card.html": string
11
+ /** Outputs unix timestamps as a human-readable date, for consistent date formats across the notebook. */
12
+ readonly niceDate(UNIX_TIMESTAMP: string | number): string
11
13
  }
12
14
 
13
15
  declare const kirejiIssue: IKirejiIssue
@@ -1,22 +1,18 @@
1
- body:not(.dark) #issue-tracker_kireji_app {
1
+ body.modern:not(.dark) #issue-tracker_kireji_app {
2
2
  background-color: white;
3
3
  }
4
4
 
5
5
  #issue-tracker_kireji_app {
6
- --max-width: 696px;
7
- --outer-pad: calc((var(--app-width) - var(--rounded-width)) / 2);
8
- --rounded-width: calc(min(calc(round(down, var(--app-width), var(--spacing)) - (2 * var(--spacing))), var(--max-width)) - 4px);
9
- padding: var(--padding) var(--outer-pad);
10
6
  display: flex;
11
7
  flex-flow: column nowrap;
12
8
  }
13
9
 
10
+ body.modern #issue-tracker_kireji_app {
11
+ padding: var(--spacing);
12
+ }
13
+
14
14
  #kireji-issue-modal {
15
15
  position: absolute;
16
- left: calc(3 * var(--spacing));
17
- right: calc(3 * var(--spacing));
18
- top: calc(2 * var(--spacing));
19
- bottom: calc(2 * var(--spacing));
20
16
  background-color: var(--bg);
21
17
  padding: var(--spacing);
22
18
  display: flex;
@@ -24,6 +20,20 @@ body:not(.dark) #issue-tracker_kireji_app {
24
20
  flex-flow: column nowrap;
25
21
  }
26
22
 
23
+ body.modern #kireji-issue-modal {
24
+ left: calc(3 * var(--spacing));
25
+ right: calc(3 * var(--spacing));
26
+ top: calc(2 * var(--spacing));
27
+ bottom: calc(2 * var(--spacing));
28
+ }
29
+
30
+ body.vintage #kireji-issue-modal {
31
+ left: 0;
32
+ right: 0;
33
+ top: 0;
34
+ bottom: 0;
35
+ }
36
+
27
37
  #kireji-issue-modal .exit-button {
28
38
  position: absolute;
29
39
  right: var(--spacing);
@@ -41,10 +51,14 @@ body.modern #kireji-issue-modal {
41
51
  border-radius: calc(var(--spacing) / 2);
42
52
  }
43
53
 
44
- body:not(.dark) #kireji-issue-modal {
54
+ body.modern:not(.dark) #kireji-issue-modal {
45
55
  background-color: white;
46
56
  }
47
57
 
58
+ body.vintage #kireji-issue-modal {
59
+ background-color: var(--bg);
60
+ }
61
+
48
62
  #issue-tracker_kireji_app:has(#kireji-issue-modal:not(:empty)) {
49
63
  pointer-events: none;
50
64
  color: var(--fg-mode);
@@ -75,10 +89,13 @@ body:not(.dark) #kireji-issue-modal {
75
89
  overflow: hidden;
76
90
  text-overflow: ellipsis;
77
91
  white-space: pre;
92
+ }
93
+
94
+ body.modern #issue-tracker_kireji_app .issue-title {
78
95
  font-weight: 500;
79
96
  }
80
97
 
81
- #issue-tracker_kireji_app .issue-table>scroller->scroll-content {
98
+ #issue-tracker_kireji_app :is(.issue-table>scroller->scroll-content, .issue-links) {
82
99
  display: flex;
83
100
  flex-flow: column nowrap;
84
101
  width: 100%;
@@ -87,68 +104,124 @@ body:not(.dark) #kireji-issue-modal {
87
104
  #issue-tracker_kireji_app .issue-row {
88
105
  position: relative;
89
106
  display: flex;
90
- gap: var(--spacing);
91
- cursor: pointer;
92
107
  text-decoration: none;
93
108
  color: inherit;
94
- padding: calc(var(--spacing) / 2);
95
109
  }
96
110
 
97
- #issue-tracker_kireji_app .issue-row:hover {
98
- background-color: var(--accent-mode-est);
111
+ body.modern #issue-tracker_kireji_app .issue-row {
112
+ padding: calc(var(--spacing) / 2) 0;
113
+ }
114
+
115
+ body.modern #issue-tracker_kireji_app .issue-row:not(.header) {
99
116
  border-radius: calc(var(--spacing) / 3);
117
+ cursor: pointer;
100
118
  }
101
119
 
102
- #issue-tracker_kireji_app :is(.issue-status, .issue-priority) {
103
- width: var(--spacing);
104
- text-align: center;
105
- font-weight: 600;
106
- border-radius: calc(var(--spacing) / 4);
120
+ body.modern #issue-tracker_kireji_app .issue-row:not(.header):hover {
121
+ background-color: var(--accent-mode-est);
122
+ }
123
+
124
+ body.vintage #issue-tracker_kireji_app .issue-row>* {
125
+ padding: 4px;
126
+ }
127
+
128
+ #issue-tracker_kireji_app .issue-row>* {
129
+ line-height: var(--spacing);
130
+ }
131
+
132
+ body.vintage #issue-tracker_kireji_app .issue-row:not(.header):hover {
133
+ background-color: var(--accent);
134
+ color: white;
135
+ }
136
+
137
+ body.vintage.dark #issue-tracker_kireji_app .issue-row:not(.header):hover {
138
+ color: black;
139
+ }
140
+
141
+ #issue-tracker_kireji_app :is(.issue-status, .issue-priority, .issue-date) {
142
+ width: var(--column-width);
107
143
  display: inline-block;
108
144
  }
109
145
 
110
- #issue-tracker_kireji_app .issue-status {
146
+ #issue-tracker_kireji_app .issue-row>span {
147
+ position: relative;
148
+ }
149
+
150
+ body.vintage #issue-tracker_kireji_app .issue-date {
151
+ --column-width: calc(7 * var(--spacing));
152
+ }
153
+
154
+ body.modern #issue-tracker_kireji_app .issue-date {
155
+ --column-width: calc(7 * var(--spacing));
156
+ }
157
+
158
+ body.vintage #issue-tracker_kireji_app .issue-status {
159
+ --column-width: 76px;
160
+ }
161
+
162
+ body.modern #issue-tracker_kireji_app .issue-status {
163
+ --column-width: calc(6 * var(--spacing));
164
+ }
165
+
166
+ body.vintage #issue-tracker_kireji_app .issue-priority {
167
+ --column-width: 42px;
168
+ }
169
+
170
+ body.modern #issue-tracker_kireji_app .issue-priority {
171
+ --column-width: calc(4 * var(--spacing));
172
+ }
173
+
174
+ body.modern #issue-tracker_kireji_app :not(.header)>:is(.issue-status, .issue-priority, .issue-date) {
175
+ border-radius: calc(var(--spacing) / 4);
176
+ font-weight: 600;
177
+ font-size: calc(var(--spacing) * .7);
178
+ text-align: center;
179
+ line-height: inherit;
180
+ }
181
+
182
+ #issue-tracker_kireji_app :is(.issue-status, .issue-date) {
183
+ white-space: nowrap;
184
+ }
185
+
186
+ body.modern #issue-tracker_kireji_app :not(.header)>.issue-status {
111
187
  color: steelblue;
112
188
  background-color: powderblue;
113
- width: calc(5 * var(--spacing));
114
- font-size: calc(var(--spacing) * .7);
115
- line-height: var(--spacing);
116
189
  }
117
190
 
118
- body.dark #issue-tracker_kireji_app .issue-status {
191
+ body.modern.dark #issue-tracker_kireji_app :not(.header)>.issue-status {
119
192
  color: powderblue;
120
193
  background-color: steelblue;
121
194
  }
122
195
 
123
- #issue-tracker_kireji_app [data-status="doing"] .issue-status {
196
+ body.modern #issue-tracker_kireji_app :not(.header)[data-status="doing"]>.issue-status {
124
197
  color: brown;
125
198
  background-color: wheat;
126
199
  }
127
200
 
128
- body.dark #issue-tracker_kireji_app [data-status="doing"] .issue-status {
201
+ body.modern.dark #issue-tracker_kireji_app :not(.header)[data-status="doing"]>.issue-status {
129
202
  color: wheat;
130
203
  background-color: peru;
131
204
  }
132
205
 
133
- #issue-tracker_kireji_app [data-status="done"] .issue-status {
206
+ body.modern #issue-tracker_kireji_app :not(.header)[data-status="done"]>.issue-status {
134
207
  color: seagreen;
135
208
  background-color: palegreen;
136
209
  }
137
210
 
138
- body.dark #issue-tracker_kireji_app [data-status="done"] .issue-status {
211
+ body.modern.dark #issue-tracker_kireji_app :not(.header)[data-status="done"]>.issue-status {
139
212
  color: palegreen;
140
213
  background-color: seagreen;
141
214
  }
142
215
 
143
- #issue-tracker_kireji_app [data-priority="A"] .issue-priority {
216
+ body.modern #issue-tracker_kireji_app :not(.header)[data-priority="A"]>.issue-priority {
144
217
  color: red;
145
218
  }
146
219
 
147
- #issue-tracker_kireji_app [data-priority="B"] .issue-priority {
220
+ body.modern #issue-tracker_kireji_app :not(.header)[data-priority="B"]>.issue-priority {
148
221
  color: orange;
149
222
  }
150
223
 
151
- #issue-tracker_kireji_app [data-priority="C"] .issue-priority {
224
+ body.modern #issue-tracker_kireji_app :not(.header)[data-priority="C"]>.issue-priority {
152
225
  color: green;
153
226
  }
154
227
 
@@ -156,8 +229,27 @@ body.dark #issue-tracker_kireji_app [data-status="done"] .issue-status {
156
229
  min-height: 0;
157
230
  position: relative;
158
231
  overflow: hidden;
232
+ flex: 1;
159
233
  }
160
234
 
161
235
  #kireji-issue-modal .issue-row {
162
236
  pointer-events: all;
237
+ }
238
+
239
+ body.vintage #issue-tracker_kireji_app {
240
+ padding: 2px;
241
+ box-shadow: var(--deep-inset);
242
+ }
243
+
244
+ body.vintage #issue-tracker_kireji_app :is(.issue-table, .issue-links) {
245
+ background: white;
246
+ }
247
+
248
+ body.vintage.dark #issue-tracker_kireji_app :is(.issue-table, .issue-links) {
249
+ background: black;
250
+ }
251
+
252
+ body.vintage #issue-tracker_kireji_app .issue-links {
253
+ padding: 2px;
254
+ box-shadow: var(--deep-inset);
163
255
  }
@@ -5,6 +5,9 @@ declare interface IKirejiIssueTrackerApp
5
5
  readonly scroller: IScroller<IKirejiIssueTrackerApp>
6
6
  readonly sections: IKirejiIssueSections
7
7
  readonly filters: IKirejiIssueFilters
8
+
9
+ // Serialized Properties.
10
+ readonly "issues.html": string
8
11
  }
9
12
 
10
13
  declare const kirejiIssueTracker: IKirejiIssueTrackerApp
@@ -1 +1 @@
1
- This is a work-in-progress IDE. Everything is currently read-only. Explore the component model and hash function that power the Kireji Demo App Ecosystem.
1
+ This is a work-in-progress IDE. Everything is currently read-only. Explore the component model and hash function that power the Kireji Demo Ecosystem.
package/src/description CHANGED
@@ -1,4 +1,4 @@
1
- This part represents the root of the Kireji Demo App Ecosystem. Its domain name is the empty string ("", representing the DNS root), and all of its subparts represent top-level domains (TLDs) like ".com" and ".io".
1
+ This part represents the root of the Kireji Demo Ecosystem. Its domain name is the empty string ("", representing the DNS root), and all of its subparts represent top-level domains (TLDs) like ".com" and ".io".
2
2
 
3
3
  It forms the root of the runtime state space used to compute a two-way minimal perfect hash function (MPHF) across all hosted applications. When serialized, it inlines all metadata and file structure compiled from the repository at build time.
4
4
 
@@ -16,7 +16,25 @@
16
16
  }
17
17
  },
18
18
  "issue-tracker": {
19
- "sections": "summary"
19
+ "sections": "summary",
20
+ "filters": {
21
+ "dropdown": "none",
22
+ "order": {
23
+ "descending": true,
24
+ "by": "date"
25
+ },
26
+ "priority": {
27
+ "a": true,
28
+ "b": true,
29
+ "c": true
30
+ },
31
+ "status": {
32
+ "doing": true,
33
+ "done": false,
34
+ "to-do": true
35
+ }
36
+ },
37
+ "scroller": 0
20
38
  },
21
39
  "sidebar": {
22
40
  "outliner-domains": {
@@ -1,15 +1,23 @@
1
- /* Sort ascending by cardinality to optimize Route ID encoding:
2
- 1. In mix parts, using the largest factor as the most significant digit
3
- prevents its large cardinality from being a multiplier for other factors.
4
- 2. In match parts, placing larger arms at the end of the address space
5
- prevents their large cardinalities from being offsets for smaller arms. */
6
- part.subparts.sort((a, b) => {
7
- /* Relational comparisons are used to avoid BigInt subtraction which
8
- would unnecessarily compute and store a third BigInt. */
9
- if (a.cardinality < b.cardinality) return -1
10
- if (a.cardinality > b.cardinality) return 1
11
- return 0
12
- })
1
+ part.subparts.sort((() => {
2
+
3
+ if (Array.isArray(part.manifest.order)) {
4
+ // If there is a custom order defined, just used that.
5
+ return (a, b) => part.manifest.order.indexOf(a.key) - part.manifest.order.indexOf(b.key)
6
+ }
7
+
8
+ /* Otherwise, sort ascending by cardinality to optimize Route ID encoding:
9
+ 1. In mix parts, using the largest factor as the most significant digit
10
+ prevents its large cardinality from being a multiplier for other factors.
11
+ 2. In match parts, placing larger arms at the end of the address space
12
+ prevents their large cardinalities from being offsets for smaller arms. */
13
+ return (a, b) => {
14
+ /* Relational comparisons are used to avoid BigInt subtraction which
15
+ would unnecessarily compute and store a third BigInt. */
16
+ if (a.cardinality < b.cardinality) return -1
17
+ if (a.cardinality > b.cardinality) return 1
18
+ return 0
19
+ }
20
+ })())
13
21
 
14
22
  part.define({
15
23
  dirty: { value: false, writable: true },
@@ -201,10 +201,12 @@ declare type IRuntimePropertyDefinition<TOwner, TValue> = {
201
201
  declare interface IPartManifest {
202
202
  /** Whether or not the part should be considered a subpart of its parent part (abstract = false) or an uninstanceable prototype for other parts (abstract = true). */
203
203
  readonly abstract?: boolean
204
- /** Whether or not the part will be instanced (inherit = false) or retained (inherit = true) during the create step. */
205
- readonly inherit?: boolean
206
204
  /** The list of methods that the part adds. The prototype of the methods object is set to the part's prototype's manifest methods object. If no object is defined in a manifest, the empty object will be created automatically. */
207
- readonly methods: Record<string, string[]>
205
+ readonly methods?: Record<string, string[]>
206
+ /** The relative or absolute host name of the part that this part inherits from. The default value is `part`. */
207
+ readonly extends?: string
208
+ /** An optional string array of subpart keys representing the explicit order that the subparts should take in the part's subpart array. This affects how parts are iterated over and how they are integrated into the hash function. */
209
+ readonly order?: string[]
208
210
  }
209
211
 
210
212
  declare type IPartAny =
@@ -1,4 +1,4 @@
1
- return `<span ${color.pointAttr()} id="color-control" tabIndex=0 data-state="${color.arm.stateData}">
1
+ return `<span ${color.pointAttr()} id="color-control" tabIndex=0 data-state="${color.arm.stateData}" class="toggle-control">
2
2
  <span class="label">${color.title}:</span><flex-spacer></flex-spacer>
3
3
  <span class="base"><span class="handle"></span></span>
4
4
  </span>`
@@ -28,14 +28,12 @@ title-bar>.part-icon {
28
28
  margin: calc(var(--spacing) / 2);
29
29
  }
30
30
 
31
- #color-control,
32
- #era-control {
31
+ .toggle-control {
33
32
  cursor: pointer;
34
33
  position: relative;
35
34
  }
36
35
 
37
- #color-control .base,
38
- #era-control .base {
36
+ .toggle-control .base {
39
37
  width: 100%;
40
38
  border-radius: var(--spacing);
41
39
  background: var(--light-bg);
@@ -149,7 +147,8 @@ task-menu>* {
149
147
  background-color: var(--bg-dark);
150
148
  }
151
149
 
152
- #settings>span {
150
+ #settings>span,
151
+ .toggle-control {
153
152
  gap: 1ch;
154
153
  height: var(--spacing);
155
154
  box-sizing: content-box;
@@ -174,14 +173,10 @@ task-menu>* {
174
173
  }
175
174
 
176
175
 
177
- #settings>span[data-state="enabled"] .handle {
176
+ .toggle-control[data-state="enabled"] .handle {
178
177
  left: calc(var(--spacing) + 2px);
179
178
  }
180
179
 
181
- #settings>span[data-state="partial"] .handle {
182
- left: calc(.5 * var(--spacing) + 2px);
183
- }
184
-
185
180
  .task-link[data-here]>a::before {
186
181
  content: "";
187
182
  position: absolute;
@@ -1,4 +1,4 @@
1
- return `<span ${era.pointAttr()} id="era-control" tabIndex=0 data-state="${era.arm.stateData}">
1
+ return `<span ${era.pointAttr()} id="era-control" tabIndex=0 data-state="${era.arm.stateData}" class="toggle-control">
2
2
  <span class="label">${era.title}:</span><flex-spacer></flex-spacer>
3
3
  <span class="base"><span class="handle"></span></span>
4
4
  </span>`
@@ -60,16 +60,14 @@ scroll-bar>thumb- {
60
60
  --thumb-start: var(--scrollbar-width);
61
61
  }
62
62
 
63
- #color-control .base,
64
- #era-control .base {
63
+ .toggle-control .base {
65
64
  background: white;
66
65
  width: 16px;
67
66
  height: 16px;
68
67
  box-shadow: var(--deep-inset);
69
68
  }
70
69
 
71
- #color-control .base::after,
72
- #era-control .base::after {
70
+ .toggle-control .base::after {
73
71
  content: "";
74
72
  display: block;
75
73
  width: 16px;
@@ -81,11 +79,11 @@ scroll-bar>thumb- {
81
79
  color: black;
82
80
  }
83
81
 
84
- #settings>span[data-state="enabled"] .base::after {
82
+ .toggle-control[data-state="enabled"] .base::after {
85
83
  content: "✓";
86
84
  }
87
85
 
88
- #settings>span[data-state="partial"] .base::after {
86
+ .toggle-control[data-state="partial"] .base::after {
89
87
  content: "–";
90
88
  }
91
89
 
@@ -190,7 +188,7 @@ body {
190
188
  inset 2px 2px var(--bg-light-est);
191
189
  --default-font-size: 11px;
192
190
  font: var(--default-font-size) var(--system-ui);
193
- image-rendering: pixelated;
191
+ /*image-rendering: pixelated;*/
194
192
  }
195
193
 
196
194
  body,
@@ -109,7 +109,7 @@
109
109
  },
110
110
  {
111
111
  "const": "demo",
112
- "description": "kireji.app will always be included (used only for Demo App Ecosystem)."
112
+ "description": "kireji.app will always be included (used only for Demo Ecosystem)."
113
113
  }
114
114
  ]
115
115
  },
@@ -134,7 +134,7 @@
134
134
  },
135
135
  {
136
136
  "const": "demo",
137
- "description": "The full desktop experience will always be included (used only for Demo App Ecosystem)."
137
+ "description": "The full desktop experience will always be included (used only for Demo Ecosystem)."
138
138
  }
139
139
  ]
140
140
  },
@@ -5,7 +5,7 @@
5
5
  "type": "object",
6
6
  "properties": {
7
7
  "abstract": {
8
- "description": "If true, this part serves as a base and cannot be instantiated directly.",
8
+ "description": "Whether or not the part should be considered a subpart of its parent part (abstract = false) or an uninstanceable prototype for other parts (abstract = true).",
9
9
  "type": "boolean"
10
10
  },
11
11
  "extends": {
@@ -22,6 +22,13 @@
22
22
  "type": "string"
23
23
  }
24
24
  }
25
+ },
26
+ "order": {
27
+ "description": "An optional string array of subpart keys representing the explicit order that the subparts should take in the part's subpart array.\nThis affects how parts are iterated over and how they are integrated into the hash function.",
28
+ "type": "array",
29
+ "items": {
30
+ "type": "string"
31
+ }
25
32
  }
26
33
  },
27
34
  "additionalProperties": {