@cratis/scene.blueprint.default 4.34.0 → 4.36.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 (140) hide show
  1. package/ComponentName.ts +12 -0
  2. package/defaultBlueprintComponents.ts +5 -1
  3. package/dist/cjs/ComponentName.js +4 -0
  4. package/dist/cjs/ComponentName.js.map +1 -1
  5. package/dist/cjs/defaultBlueprint.js +1 -0
  6. package/dist/cjs/defaultBlueprint.js.map +1 -1
  7. package/dist/cjs/defaultBlueprintComponentMetadata.js +1 -0
  8. package/dist/cjs/defaultBlueprintComponentMetadata.js.map +1 -1
  9. package/dist/cjs/defaultBlueprintComponents.js +9 -1
  10. package/dist/cjs/defaultBlueprintComponents.js.map +1 -1
  11. package/dist/cjs/foundation/ActivityFeed.js +122 -0
  12. package/dist/cjs/foundation/ActivityFeed.js.map +1 -0
  13. package/dist/cjs/foundation/AvatarStack.js +73 -0
  14. package/dist/cjs/foundation/AvatarStack.js.map +1 -0
  15. package/dist/cjs/foundation/ChecklistSection.js +174 -0
  16. package/dist/cjs/foundation/ChecklistSection.js.map +1 -0
  17. package/dist/cjs/foundation/FileUploader.js +218 -0
  18. package/dist/cjs/foundation/FileUploader.js.map +1 -0
  19. package/dist/cjs/foundation/FileUploaderHandler.js +17 -0
  20. package/dist/cjs/foundation/FileUploaderHandler.js.map +1 -0
  21. package/dist/cjs/foundation/activityModel.js +63 -0
  22. package/dist/cjs/foundation/activityModel.js.map +1 -0
  23. package/dist/cjs/foundation/avatarModel.js +42 -0
  24. package/dist/cjs/foundation/avatarModel.js.map +1 -0
  25. package/dist/cjs/foundation/checklistModel.js +59 -0
  26. package/dist/cjs/foundation/checklistModel.js.map +1 -0
  27. package/dist/cjs/foundation/formatting.js +11 -0
  28. package/dist/cjs/foundation/formatting.js.map +1 -1
  29. package/dist/cjs/foundation/foundationComponentMetadata.js +26 -0
  30. package/dist/cjs/foundation/foundationComponentMetadata.js.map +1 -1
  31. package/dist/cjs/foundation/foundationDescriptors.js +128 -0
  32. package/dist/cjs/foundation/foundationDescriptors.js.map +1 -1
  33. package/dist/cjs/foundation/foundationSamples.js +114 -0
  34. package/dist/cjs/foundation/foundationSamples.js.map +1 -1
  35. package/dist/cjs/foundation/foundationStrings.js +15 -0
  36. package/dist/cjs/foundation/foundationStrings.js.map +1 -1
  37. package/dist/cjs/foundation/uploadModel.js +71 -0
  38. package/dist/cjs/foundation/uploadModel.js.map +1 -0
  39. package/dist/cjs/index.js +33 -0
  40. package/dist/cjs/index.js.map +1 -1
  41. package/dist/cjs/preview-host/ApplicationHost.js +48 -27
  42. package/dist/cjs/preview-host/ApplicationHost.js.map +1 -1
  43. package/dist/esm/ComponentName.d.ts +5 -1
  44. package/dist/esm/ComponentName.d.ts.map +1 -1
  45. package/dist/esm/ComponentName.js +4 -0
  46. package/dist/esm/ComponentName.js.map +1 -1
  47. package/dist/esm/defaultBlueprint.js +1 -0
  48. package/dist/esm/defaultBlueprint.js.map +1 -1
  49. package/dist/esm/defaultBlueprintComponentMetadata.js +1 -0
  50. package/dist/esm/defaultBlueprintComponentMetadata.js.map +1 -1
  51. package/dist/esm/defaultBlueprintComponents.d.ts.map +1 -1
  52. package/dist/esm/defaultBlueprintComponents.js +9 -1
  53. package/dist/esm/defaultBlueprintComponents.js.map +1 -1
  54. package/dist/esm/foundation/ActivityFeed.d.ts +3 -0
  55. package/dist/esm/foundation/ActivityFeed.d.ts.map +1 -0
  56. package/dist/esm/foundation/ActivityFeed.js +120 -0
  57. package/dist/esm/foundation/ActivityFeed.js.map +1 -0
  58. package/dist/esm/foundation/AvatarStack.d.ts +3 -0
  59. package/dist/esm/foundation/AvatarStack.d.ts.map +1 -0
  60. package/dist/esm/foundation/AvatarStack.js +71 -0
  61. package/dist/esm/foundation/AvatarStack.js.map +1 -0
  62. package/dist/esm/foundation/ChecklistSection.d.ts +3 -0
  63. package/dist/esm/foundation/ChecklistSection.d.ts.map +1 -0
  64. package/dist/esm/foundation/ChecklistSection.js +172 -0
  65. package/dist/esm/foundation/ChecklistSection.js.map +1 -0
  66. package/dist/esm/foundation/FileUploader.d.ts +3 -0
  67. package/dist/esm/foundation/FileUploader.d.ts.map +1 -0
  68. package/dist/esm/foundation/FileUploader.js +216 -0
  69. package/dist/esm/foundation/FileUploader.js.map +1 -0
  70. package/dist/esm/foundation/FileUploaderHandler.d.ts +8 -0
  71. package/dist/esm/foundation/FileUploaderHandler.d.ts.map +1 -0
  72. package/dist/esm/foundation/FileUploaderHandler.js +14 -0
  73. package/dist/esm/foundation/FileUploaderHandler.js.map +1 -0
  74. package/dist/esm/foundation/Foundation.stories.d.ts +8 -0
  75. package/dist/esm/foundation/Foundation.stories.d.ts.map +1 -1
  76. package/dist/esm/foundation/Foundation.stories.js +8 -0
  77. package/dist/esm/foundation/Foundation.stories.js.map +1 -1
  78. package/dist/esm/foundation/activityModel.d.ts +22 -0
  79. package/dist/esm/foundation/activityModel.d.ts.map +1 -0
  80. package/dist/esm/foundation/activityModel.js +58 -0
  81. package/dist/esm/foundation/activityModel.js.map +1 -0
  82. package/dist/esm/foundation/avatarModel.d.ts +11 -0
  83. package/dist/esm/foundation/avatarModel.d.ts.map +1 -0
  84. package/dist/esm/foundation/avatarModel.js +38 -0
  85. package/dist/esm/foundation/avatarModel.js.map +1 -0
  86. package/dist/esm/foundation/checklistModel.d.ts +17 -0
  87. package/dist/esm/foundation/checklistModel.d.ts.map +1 -0
  88. package/dist/esm/foundation/checklistModel.js +53 -0
  89. package/dist/esm/foundation/checklistModel.js.map +1 -0
  90. package/dist/esm/foundation/formatting.d.ts +1 -0
  91. package/dist/esm/foundation/formatting.d.ts.map +1 -1
  92. package/dist/esm/foundation/formatting.js +11 -1
  93. package/dist/esm/foundation/formatting.js.map +1 -1
  94. package/dist/esm/foundation/foundationComponentMetadata.d.ts.map +1 -1
  95. package/dist/esm/foundation/foundationComponentMetadata.js +26 -0
  96. package/dist/esm/foundation/foundationComponentMetadata.js.map +1 -1
  97. package/dist/esm/foundation/foundationDescriptors.d.ts.map +1 -1
  98. package/dist/esm/foundation/foundationDescriptors.js +128 -0
  99. package/dist/esm/foundation/foundationDescriptors.js.map +1 -1
  100. package/dist/esm/foundation/foundationSamples.d.ts.map +1 -1
  101. package/dist/esm/foundation/foundationSamples.js +114 -0
  102. package/dist/esm/foundation/foundationSamples.js.map +1 -1
  103. package/dist/esm/foundation/foundationStrings.d.ts +15 -0
  104. package/dist/esm/foundation/foundationStrings.d.ts.map +1 -1
  105. package/dist/esm/foundation/foundationStrings.js +15 -0
  106. package/dist/esm/foundation/foundationStrings.js.map +1 -1
  107. package/dist/esm/foundation/index.d.ts +9 -0
  108. package/dist/esm/foundation/index.d.ts.map +1 -1
  109. package/dist/esm/foundation/index.js +9 -0
  110. package/dist/esm/foundation/index.js.map +1 -1
  111. package/dist/esm/foundation/uploadModel.d.ts +31 -0
  112. package/dist/esm/foundation/uploadModel.d.ts.map +1 -0
  113. package/dist/esm/foundation/uploadModel.js +65 -0
  114. package/dist/esm/foundation/uploadModel.js.map +1 -0
  115. package/dist/esm/index.js +10 -1
  116. package/dist/esm/index.js.map +1 -1
  117. package/dist/esm/preview-host/ApplicationHost.d.ts +5 -2
  118. package/dist/esm/preview-host/ApplicationHost.d.ts.map +1 -1
  119. package/dist/esm/preview-host/ApplicationHost.js +50 -29
  120. package/dist/esm/preview-host/ApplicationHost.js.map +1 -1
  121. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  122. package/foundation/ActivityFeed.tsx +61 -0
  123. package/foundation/AvatarStack.tsx +43 -0
  124. package/foundation/ChecklistSection.tsx +80 -0
  125. package/foundation/FileUploader.tsx +122 -0
  126. package/foundation/FileUploaderHandler.tsx +22 -0
  127. package/foundation/Foundation.stories.tsx +8 -0
  128. package/foundation/activityModel.ts +65 -0
  129. package/foundation/avatarModel.ts +36 -0
  130. package/foundation/checklistModel.ts +62 -0
  131. package/foundation/formatting.ts +9 -0
  132. package/foundation/foundationComponentMetadata.ts +4 -0
  133. package/foundation/foundationDescriptors.ts +79 -0
  134. package/foundation/foundationSamples.ts +29 -0
  135. package/foundation/foundationStrings.ts +15 -0
  136. package/foundation/index.ts +9 -0
  137. package/foundation/uploadModel.ts +66 -0
  138. package/package.json +8 -8
  139. package/preview-host/ApplicationHost.tsx +57 -16
  140. package/shell/layout.css +234 -0
@@ -0,0 +1,216 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState, useRef } from 'react';
3
+ import { useValueOutput } from '@cratis/scene.react';
4
+ import { readOptionalString } from '../shell/elementProperties.js';
5
+ import { ActionButton } from './ActionButton.js';
6
+ import { readComponentState, ComponentState } from './ComponentState.js';
7
+ import { useFileUploaderHandler } from './FileUploaderHandler.js';
8
+ import { FoundationIcon } from './FoundationIcon.js';
9
+ import { readLocale } from './formatting.js';
10
+ import { readFoundationStrings, formatText } from './foundationStrings.js';
11
+ import { readPermissionRule } from './PermissionRule.js';
12
+ import { FoundationFrame } from './StateFrame.js';
13
+ import { formatBytes, UploadStatus, checkSelection, UploadRefusal } from './uploadModel.js';
14
+
15
+ /**
16
+ * The `fileUploader` component: a drop zone and a button to choose files, checked against type and size before anything is sent.
17
+ *
18
+ * `accept` is an `accept` list, `maxSizeMb` the largest file, and `multiple` whether more than one is allowed. The zone is a real file
19
+ * input behind a labelled button, so it works from the keyboard and with a screen reader; dropping onto it does the same as choosing.
20
+ * Refusals are announced with their reason. Accepted files are listed with a remove button and a status in words; the selection
21
+ * (name, size, type) is published as the `value` output. With a `FileUploaderHandlerProvider` in scope the files are sent through it and
22
+ * marked uploading, done or failed; without one the component only collects. `actionPermission` gates choosing files.
23
+ */ function FileUploader({ element, interactions, bindingOutputs }) {
24
+ const strings = readFoundationStrings(element);
25
+ const locale = readLocale(element);
26
+ const handler = useFileUploaderHandler();
27
+ const [entries, setEntries] = useState([]);
28
+ const [problems, setProblems] = useState([]);
29
+ const [dragging, setDragging] = useState(false);
30
+ const input = useRef(null);
31
+ const accept = readOptionalString(element, 'accept') ?? '';
32
+ const maximumBytes = (typeof element.properties.maxSizeMb === 'number' ? element.properties.maxSizeMb : 0) * 1024 * 1024;
33
+ const multiple = element.properties.multiple !== false;
34
+ const rule = readPermissionRule(element, 'actionPermission');
35
+ const state = readComponentState(element, true);
36
+ const serverUrl = readOptionalString(element, 'serverUrl');
37
+ useValueOutput(bindingOutputs, entries.map((entry)=>({
38
+ name: entry.file.name,
39
+ size: entry.file.size,
40
+ type: entry.file.type,
41
+ status: entry.status
42
+ })));
43
+ const send = async (files)=>{
44
+ if (!handler) return;
45
+ const mark = (status)=>setEntries((current)=>current.map((entry)=>files.includes(entry.file) ? {
46
+ ...entry,
47
+ status
48
+ } : entry));
49
+ mark(UploadStatus.Uploading);
50
+ try {
51
+ await handler(files, serverUrl);
52
+ mark(UploadStatus.Done);
53
+ } catch {
54
+ mark(UploadStatus.Failed);
55
+ }
56
+ };
57
+ const take = (chosen)=>{
58
+ const { accepted, refused } = checkSelection(chosen, {
59
+ accept,
60
+ maximumBytes,
61
+ multiple
62
+ }, entries.length);
63
+ setProblems(refused.map(({ file, reason })=>reason === UploadRefusal.WrongType ? formatText(strings.uploadWrongType, {
64
+ name: file.name
65
+ }) : reason === UploadRefusal.TooLarge ? formatText(strings.uploadTooLarge, {
66
+ name: file.name,
67
+ limit: formatBytes(maximumBytes, locale)
68
+ }) : strings.uploadSingle));
69
+ if (accepted.length === 0) return;
70
+ setEntries((current)=>[
71
+ ...current,
72
+ ...accepted.map((file)=>({
73
+ file,
74
+ status: UploadStatus.Queued
75
+ }))
76
+ ]);
77
+ interactions?.onChange?.();
78
+ void send(accepted);
79
+ };
80
+ const choose = (event)=>{
81
+ take(Array.from(event.target.files ?? []));
82
+ event.target.value = '';
83
+ };
84
+ const drop = (event)=>{
85
+ event.preventDefault();
86
+ setDragging(false);
87
+ if (rule === 'enabled') take(Array.from(event.dataTransfer.files));
88
+ };
89
+ const statusText = {
90
+ queued: strings.uploadQueued,
91
+ uploading: strings.uploadUploading,
92
+ done: strings.uploadDone,
93
+ failed: strings.uploadFailed
94
+ };
95
+ const limits = [
96
+ accept ? formatText(strings.uploadAccepts, {
97
+ types: accept
98
+ }) : '',
99
+ maximumBytes > 0 ? formatText(strings.uploadLimits, {
100
+ limit: formatBytes(maximumBytes, locale)
101
+ }) : ''
102
+ ].filter(Boolean).join(' · ');
103
+ return /*#__PURE__*/ jsx(FoundationFrame, {
104
+ element: element,
105
+ interactions: interactions,
106
+ name: "file-uploader",
107
+ state: state,
108
+ skeleton: [
109
+ 100,
110
+ 40
111
+ ],
112
+ children: state !== ComponentState.Loading && /*#__PURE__*/ jsxs(Fragment, {
113
+ children: [
114
+ /*#__PURE__*/ jsxs("div", {
115
+ className: "foundation-dropzone",
116
+ "data-dragging": dragging,
117
+ onDragOver: (event)=>{
118
+ event.preventDefault();
119
+ setDragging(true);
120
+ },
121
+ onDragLeave: ()=>setDragging(false),
122
+ onDrop: drop,
123
+ children: [
124
+ /*#__PURE__*/ jsx(FoundationIcon, {
125
+ name: "upload"
126
+ }),
127
+ /*#__PURE__*/ jsx("span", {
128
+ children: strings.uploadDrop
129
+ }),
130
+ /*#__PURE__*/ jsx("input", {
131
+ ref: input,
132
+ className: "foundation-visually-hidden",
133
+ type: "file",
134
+ tabIndex: -1,
135
+ accept: accept || undefined,
136
+ multiple: multiple,
137
+ disabled: rule !== 'enabled',
138
+ onChange: choose,
139
+ "aria-hidden": "true"
140
+ }),
141
+ /*#__PURE__*/ jsx(ActionButton, {
142
+ rule: rule,
143
+ emphasis: "secondary",
144
+ disabledReason: strings.disabledNoPermission,
145
+ onClick: ()=>input.current?.click(),
146
+ children: strings.uploadBrowse
147
+ }),
148
+ limits && /*#__PURE__*/ jsx("span", {
149
+ className: "foundation-count",
150
+ children: limits
151
+ })
152
+ ]
153
+ }),
154
+ /*#__PURE__*/ jsx("div", {
155
+ "aria-live": "polite",
156
+ className: "foundation-upload-problems",
157
+ children: problems.map((problem)=>/*#__PURE__*/ jsx("p", {
158
+ className: "foundation-message-text",
159
+ "data-tone": "danger",
160
+ children: problem
161
+ }, problem))
162
+ }),
163
+ entries.length > 0 && /*#__PURE__*/ jsx("ul", {
164
+ className: "foundation-upload-list",
165
+ "aria-label": strings.uploadSelected,
166
+ children: entries.map((entry, index)=>/*#__PURE__*/ jsxs("li", {
167
+ className: "foundation-upload-item",
168
+ "data-status": entry.status,
169
+ children: [
170
+ /*#__PURE__*/ jsx(FoundationIcon, {
171
+ name: "file"
172
+ }),
173
+ /*#__PURE__*/ jsx("span", {
174
+ className: "foundation-upload-name",
175
+ children: entry.file.name
176
+ }),
177
+ /*#__PURE__*/ jsx("span", {
178
+ className: "foundation-count",
179
+ children: formatBytes(entry.file.size, locale)
180
+ }),
181
+ /*#__PURE__*/ jsx("span", {
182
+ className: "foundation-upload-status",
183
+ children: statusText[entry.status]
184
+ }),
185
+ entry.status === UploadStatus.Failed && /*#__PURE__*/ jsx("button", {
186
+ type: "button",
187
+ className: "foundation-link",
188
+ onClick: ()=>void send([
189
+ entry.file
190
+ ]),
191
+ children: strings.retry
192
+ }),
193
+ /*#__PURE__*/ jsx("button", {
194
+ type: "button",
195
+ className: "foundation-icon-button",
196
+ "aria-label": formatText(strings.uploadRemove, {
197
+ name: entry.file.name
198
+ }),
199
+ onClick: ()=>{
200
+ setEntries((current)=>current.filter((existing)=>existing !== entry));
201
+ interactions?.onChange?.();
202
+ },
203
+ children: /*#__PURE__*/ jsx(FoundationIcon, {
204
+ name: "close"
205
+ })
206
+ })
207
+ ]
208
+ }, entry.file.name + index))
209
+ })
210
+ ]
211
+ })
212
+ });
213
+ }
214
+
215
+ export { FileUploader };
216
+ //# sourceMappingURL=FileUploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploader.js","sources":["../../../foundation/FileUploader.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ChangeEvent, DragEvent, useRef, useState } from 'react';\nimport { RegisteredComponentProps, useValueOutput } from '@cratis/scene.react';\nimport { readOptionalString } from '../shell/elementProperties';\nimport { ActionButton } from './ActionButton';\nimport { ComponentState, readComponentState } from './ComponentState';\nimport { useFileUploaderHandler } from './FileUploaderHandler';\nimport { FoundationIcon } from './FoundationIcon';\nimport { readLocale } from './formatting';\nimport { formatText, readFoundationStrings } from './foundationStrings';\nimport { readPermissionRule } from './PermissionRule';\nimport { FoundationFrame } from './StateFrame';\nimport { UploadRefusal, UploadStatus, checkSelection, formatBytes } from './uploadModel';\n\ninterface Entry {\n file: File;\n status: UploadStatus;\n}\n\n/**\n * The `fileUploader` component: a drop zone and a button to choose files, checked against type and size before anything is sent.\n *\n * `accept` is an `accept` list, `maxSizeMb` the largest file, and `multiple` whether more than one is allowed. The zone is a real file\n * input behind a labelled button, so it works from the keyboard and with a screen reader; dropping onto it does the same as choosing.\n * Refusals are announced with their reason. Accepted files are listed with a remove button and a status in words; the selection\n * (name, size, type) is published as the `value` output. With a `FileUploaderHandlerProvider` in scope the files are sent through it and\n * marked uploading, done or failed; without one the component only collects. `actionPermission` gates choosing files.\n */\nexport function FileUploader({ element, interactions, bindingOutputs }: RegisteredComponentProps) {\n const strings = readFoundationStrings(element);\n const locale = readLocale(element);\n const handler = useFileUploaderHandler();\n const [entries, setEntries] = useState<Entry[]>([]);\n const [problems, setProblems] = useState<string[]>([]);\n const [dragging, setDragging] = useState(false);\n const input = useRef<HTMLInputElement>(null);\n const accept = readOptionalString(element, 'accept') ?? '';\n const maximumBytes = (typeof element.properties.maxSizeMb === 'number' ? element.properties.maxSizeMb : 0) * 1024 * 1024;\n const multiple = element.properties.multiple !== false;\n const rule = readPermissionRule(element, 'actionPermission');\n const state = readComponentState(element, true);\n const serverUrl = readOptionalString(element, 'serverUrl');\n\n useValueOutput(bindingOutputs, entries.map(entry => ({ name: entry.file.name, size: entry.file.size, type: entry.file.type, status: entry.status })));\n\n const send = async (files: File[]) => {\n if (!handler) return;\n const mark = (status: UploadStatus) => setEntries(current => current.map(entry => (files.includes(entry.file) ? { ...entry, status } : entry)));\n mark(UploadStatus.Uploading);\n try {\n await handler(files, serverUrl);\n mark(UploadStatus.Done);\n } catch {\n mark(UploadStatus.Failed);\n }\n };\n\n const take = (chosen: File[]) => {\n const { accepted, refused } = checkSelection(chosen, { accept, maximumBytes, multiple }, entries.length);\n setProblems(refused.map(({ file, reason }) => reason === UploadRefusal.WrongType ? formatText(strings.uploadWrongType, { name: file.name })\n : reason === UploadRefusal.TooLarge ? formatText(strings.uploadTooLarge, { name: file.name, limit: formatBytes(maximumBytes, locale) }) : strings.uploadSingle));\n if (accepted.length === 0) return;\n\n setEntries(current => [...current, ...accepted.map(file => ({ file, status: UploadStatus.Queued }))]);\n interactions?.onChange?.();\n void send(accepted);\n };\n\n const choose = (event: ChangeEvent<HTMLInputElement>) => {\n take(Array.from(event.target.files ?? []));\n event.target.value = '';\n };\n const drop = (event: DragEvent) => {\n event.preventDefault();\n setDragging(false);\n if (rule === 'enabled') take(Array.from(event.dataTransfer.files));\n };\n const statusText: Record<UploadStatus, string> = {\n queued: strings.uploadQueued, uploading: strings.uploadUploading, done: strings.uploadDone, failed: strings.uploadFailed,\n };\n const limits = [accept ? formatText(strings.uploadAccepts, { types: accept }) : '', maximumBytes > 0 ? formatText(strings.uploadLimits, { limit: formatBytes(maximumBytes, locale) }) : ''].filter(Boolean).join(' · ');\n\n return (\n <FoundationFrame element={element} interactions={interactions} name='file-uploader' state={state} skeleton={[100, 40]}>\n {state !== ComponentState.Loading && (\n <>\n <div className='foundation-dropzone' data-dragging={dragging} onDragOver={event => { event.preventDefault(); setDragging(true); }} onDragLeave={() => setDragging(false)} onDrop={drop}>\n <FoundationIcon name='upload' />\n <span>{strings.uploadDrop}</span>\n <input ref={input} className='foundation-visually-hidden' type='file' tabIndex={-1} accept={accept || undefined} multiple={multiple} disabled={rule !== 'enabled'} onChange={choose} aria-hidden='true' />\n <ActionButton rule={rule} emphasis='secondary' disabledReason={strings.disabledNoPermission} onClick={() => input.current?.click()}>\n {strings.uploadBrowse}\n </ActionButton>\n {limits && <span className='foundation-count'>{limits}</span>}\n </div>\n <div aria-live='polite' className='foundation-upload-problems'>\n {problems.map(problem => <p key={problem} className='foundation-message-text' data-tone='danger'>{problem}</p>)}\n </div>\n {entries.length > 0 && (\n <ul className='foundation-upload-list' aria-label={strings.uploadSelected}>\n {entries.map((entry, index) => (\n <li key={entry.file.name + index} className='foundation-upload-item' data-status={entry.status}>\n <FoundationIcon name='file' />\n <span className='foundation-upload-name'>{entry.file.name}</span>\n <span className='foundation-count'>{formatBytes(entry.file.size, locale)}</span>\n <span className='foundation-upload-status'>{statusText[entry.status]}</span>\n {entry.status === UploadStatus.Failed && <button type='button' className='foundation-link' onClick={() => void send([entry.file])}>{strings.retry}</button>}\n <button type='button' className='foundation-icon-button' aria-label={formatText(strings.uploadRemove, { name: entry.file.name })}\n onClick={() => { setEntries(current => current.filter(existing => existing !== entry)); interactions?.onChange?.(); }}>\n <FoundationIcon name='close' />\n </button>\n </li>\n ))}\n </ul>\n )}\n </>\n )}\n </FoundationFrame>\n );\n}\n"],"names":["FileUploader","element","interactions","bindingOutputs","strings","readFoundationStrings","locale","readLocale","handler","useFileUploaderHandler","entries","setEntries","useState","problems","setProblems","dragging","setDragging","input","useRef","accept","readOptionalString","maximumBytes","properties","maxSizeMb","multiple","rule","readPermissionRule","state","readComponentState","serverUrl","useValueOutput","map","entry","name","file","size","type","status","send","files","mark","current","includes","UploadStatus","Uploading","Done","Failed","take","chosen","accepted","refused","checkSelection","length","reason","UploadRefusal","WrongType","formatText","uploadWrongType","TooLarge","uploadTooLarge","limit","formatBytes","uploadSingle","Queued","onChange","choose","event","Array","from","target","value","drop","preventDefault","dataTransfer","statusText","queued","uploadQueued","uploading","uploadUploading","done","uploadDone","failed","uploadFailed","limits","uploadAccepts","types","uploadLimits","filter","Boolean","join","_jsx","FoundationFrame","skeleton","ComponentState","Loading","_jsxs","_Fragment","div","className","data-dragging","onDragOver","onDragLeave","onDrop","FoundationIcon","span","uploadDrop","ref","tabIndex","undefined","disabled","aria-hidden","ActionButton","emphasis","disabledReason","disabledNoPermission","onClick","click","uploadBrowse","aria-live","problem","p","data-tone","ul","aria-label","uploadSelected","index","li","data-status","button","retry","uploadRemove","existing"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ export type FileUploaderHandler = (files: File[], serverUrl?: string) => Promise<void>;
3
+ export declare function FileUploaderHandlerProvider({ handler, children }: {
4
+ handler?: FileUploaderHandler;
5
+ children: ReactNode;
6
+ }): import("react").JSX.Element;
7
+ export declare const useFileUploaderHandler: () => FileUploaderHandler | undefined;
8
+ //# sourceMappingURL=FileUploaderHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploaderHandler.d.ts","sourceRoot":"","sources":["../../../foundation/FileUploaderHandler.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAQ7D,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAKvF,wBAAgB,2BAA2B,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAExH;AAGD,eAAO,MAAM,sBAAsB,QAAO,mBAAmB,GAAG,SAAgC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useContext, createContext } from 'react';
3
+
4
+ const Context = /*#__PURE__*/ createContext(undefined);
5
+ /** Provides the upload handler to the file uploaders below it. */ function FileUploaderHandlerProvider({ handler, children }) {
6
+ return /*#__PURE__*/ jsx(Context.Provider, {
7
+ value: handler,
8
+ children: children
9
+ });
10
+ }
11
+ /** The handler in scope, if any. */ const useFileUploaderHandler = ()=>useContext(Context);
12
+
13
+ export { FileUploaderHandlerProvider, useFileUploaderHandler };
14
+ //# sourceMappingURL=FileUploaderHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploaderHandler.js","sources":["../../../foundation/FileUploaderHandler.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { ReactNode, createContext, useContext } from 'react';\n\n/**\n * What sends the accepted files somewhere: a host's server client, kept out of the portable package.\n *\n * The signature is the one `@cratis/scene.primereact` uses for its `fileUpload`, so a host hands the same function to both. A handler that\n * rejects marks the files as failed, with a retry; without a handler the uploader only collects and publishes the selection.\n */\nexport type FileUploaderHandler = (files: File[], serverUrl?: string) => Promise<void>;\n\nconst Context = createContext<FileUploaderHandler | undefined>(undefined);\n\n/** Provides the upload handler to the file uploaders below it. */\nexport function FileUploaderHandlerProvider({ handler, children }: { handler?: FileUploaderHandler; children: ReactNode }) {\n return <Context.Provider value={handler}>{children}</Context.Provider>;\n}\n\n/** The handler in scope, if any. */\nexport const useFileUploaderHandler = (): FileUploaderHandler | undefined => useContext(Context);\n"],"names":["Context","createContext","undefined","FileUploaderHandlerProvider","handler","children","_jsx","Provider","value","useFileUploaderHandler","useContext"],"mappings":";;;AAaA,MAAMA,wBAAUC,aAAAA,CAA+CC,SAAAA,CAAAA;AAE/D,mEACO,SAASC,2BAAAA,CAA4B,EAAEC,OAAO,EAAEC,QAAQ,EAA0D,EAAA;IACrH,qBAAOC,GAAA,CAACN,QAAQO,QAAQ,EAAA;QAACC,KAAAA,EAAOJ,OAAAA;AAAUC,QAAAA,QAAAA,EAAAA;;AAC9C;AAEA,qCACO,MAAMI,sBAAAA,GAAyB,IAAuCC,WAAWV,OAAAA;;"}
@@ -34,4 +34,12 @@ export declare const ColumnChooserLight: Story;
34
34
  export declare const ColumnChooserDark: Story;
35
35
  export declare const SavedViewsMenuLight: Story;
36
36
  export declare const SavedViewsMenuDark: Story;
37
+ export declare const ChecklistLight: Story;
38
+ export declare const ChecklistDark: Story;
39
+ export declare const ActivityFeedLight: Story;
40
+ export declare const ActivityFeedDark: Story;
41
+ export declare const AvatarStackLight: Story;
42
+ export declare const AvatarStackDark: Story;
43
+ export declare const FileUploaderLight: Story;
44
+ export declare const FileUploaderDark: Story;
37
45
  //# sourceMappingURL=Foundation.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Foundation.stories.d.ts","sourceRoot":"","sources":["../../../foundation/Foundation.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,QAAA,MAAM,IAAI;;;;QAGQ,MAAM;;CACiB,CAAC;eAE3B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,KAAyE,CAAC;AACxG,eAAO,MAAM,cAAc,EAAE,KAAwE,CAAC;AACtG,eAAO,MAAM,aAAa,EAAE,KAAuE,CAAC;AACpG,eAAO,MAAM,YAAY,EAAE,KAAsE,CAAC;AAClG,eAAO,MAAM,mBAAmB,EAAE,KAAiJ,CAAC;AACpL,eAAO,MAAM,cAAc,EAAE,KAAwE,CAAC;AACtG,eAAO,MAAM,aAAa,EAAE,KAAuE,CAAC;AACpG,eAAO,MAAM,eAAe,EAAE,KAAyE,CAAC;AACxG,eAAO,MAAM,cAAc,EAAE,KAAwE,CAAC;AACtG,eAAO,MAAM,cAAc,EAAE,KAA2E,CAAC;AACzG,eAAO,MAAM,aAAa,EAAE,KAA0E,CAAC;AACvG,eAAO,MAAM,aAAa,EAAE,KAAwG,CAAC;AACrI,eAAO,MAAM,YAAY,EAAE,KAAuG,CAAC;AACnI,eAAO,MAAM,iBAAiB,EAAE,KAA4G,CAAC;AAC7I,eAAO,MAAM,gBAAgB,EAAE,KAA2G,CAAC;AAC3I,eAAO,MAAM,eAAe,EAAE,KAA0G,CAAC;AACzI,eAAO,MAAM,cAAc,EAAE,KAAyG,CAAC;AACvI,eAAO,MAAM,gBAAgB,EAAE,KAA2N,CAAC;AAC3P,eAAO,MAAM,eAAe,EAAE,KAA0N,CAAC;AACzP,eAAO,MAAM,kBAAkB,EAAE,KAA4E,CAAC;AAC9G,eAAO,MAAM,iBAAiB,EAAE,KAA2E,CAAC;AAC5G,eAAO,MAAM,kBAAkB,EAAE,KAA4E,CAAC;AAC9G,eAAO,MAAM,iBAAiB,EAAE,KAA2E,CAAC;AAC5G,eAAO,MAAM,mBAAmB,EAAE,KAA6E,CAAC;AAChH,eAAO,MAAM,kBAAkB,EAAE,KAA4E,CAAC"}
1
+ {"version":3,"file":"Foundation.stories.d.ts","sourceRoot":"","sources":["../../../foundation/Foundation.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,QAAA,MAAM,IAAI;;;;QAGQ,MAAM;;CACiB,CAAC;eAE3B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,KAAyE,CAAC;AACxG,eAAO,MAAM,cAAc,EAAE,KAAwE,CAAC;AACtG,eAAO,MAAM,aAAa,EAAE,KAAuE,CAAC;AACpG,eAAO,MAAM,YAAY,EAAE,KAAsE,CAAC;AAClG,eAAO,MAAM,mBAAmB,EAAE,KAAiJ,CAAC;AACpL,eAAO,MAAM,cAAc,EAAE,KAAwE,CAAC;AACtG,eAAO,MAAM,aAAa,EAAE,KAAuE,CAAC;AACpG,eAAO,MAAM,eAAe,EAAE,KAAyE,CAAC;AACxG,eAAO,MAAM,cAAc,EAAE,KAAwE,CAAC;AACtG,eAAO,MAAM,cAAc,EAAE,KAA2E,CAAC;AACzG,eAAO,MAAM,aAAa,EAAE,KAA0E,CAAC;AACvG,eAAO,MAAM,aAAa,EAAE,KAAwG,CAAC;AACrI,eAAO,MAAM,YAAY,EAAE,KAAuG,CAAC;AACnI,eAAO,MAAM,iBAAiB,EAAE,KAA4G,CAAC;AAC7I,eAAO,MAAM,gBAAgB,EAAE,KAA2G,CAAC;AAC3I,eAAO,MAAM,eAAe,EAAE,KAA0G,CAAC;AACzI,eAAO,MAAM,cAAc,EAAE,KAAyG,CAAC;AACvI,eAAO,MAAM,gBAAgB,EAAE,KAA2N,CAAC;AAC3P,eAAO,MAAM,eAAe,EAAE,KAA0N,CAAC;AACzP,eAAO,MAAM,kBAAkB,EAAE,KAA4E,CAAC;AAC9G,eAAO,MAAM,iBAAiB,EAAE,KAA2E,CAAC;AAC5G,eAAO,MAAM,kBAAkB,EAAE,KAA4E,CAAC;AAC9G,eAAO,MAAM,iBAAiB,EAAE,KAA2E,CAAC;AAC5G,eAAO,MAAM,mBAAmB,EAAE,KAA6E,CAAC;AAChH,eAAO,MAAM,kBAAkB,EAAE,KAA4E,CAAC;AAC9G,eAAO,MAAM,cAAc,EAAE,KAA+E,CAAC;AAC7G,eAAO,MAAM,aAAa,EAAE,KAA8E,CAAC;AAC3G,eAAO,MAAM,iBAAiB,EAAE,KAA2E,CAAC;AAC5G,eAAO,MAAM,gBAAgB,EAAE,KAA0E,CAAC;AAC1G,eAAO,MAAM,gBAAgB,EAAE,KAA0E,CAAC;AAC1G,eAAO,MAAM,eAAe,EAAE,KAAyE,CAAC;AACxG,eAAO,MAAM,iBAAiB,EAAE,KAA2E,CAAC;AAC5G,eAAO,MAAM,gBAAgB,EAAE,KAA0E,CAAC"}
@@ -31,4 +31,12 @@ export const ColumnChooserLight = { args: { component: ComponentName.ColumnChoos
31
31
  export const ColumnChooserDark = { args: { component: ComponentName.ColumnChooser, theme: 'dark' } };
32
32
  export const SavedViewsMenuLight = { args: { component: ComponentName.SavedViewsMenu, theme: 'light' } };
33
33
  export const SavedViewsMenuDark = { args: { component: ComponentName.SavedViewsMenu, theme: 'dark' } };
34
+ export const ChecklistLight = { args: { component: ComponentName.ChecklistSection, theme: 'light' } };
35
+ export const ChecklistDark = { args: { component: ComponentName.ChecklistSection, theme: 'dark' } };
36
+ export const ActivityFeedLight = { args: { component: ComponentName.ActivityFeed, theme: 'light' } };
37
+ export const ActivityFeedDark = { args: { component: ComponentName.ActivityFeed, theme: 'dark' } };
38
+ export const AvatarStackLight = { args: { component: ComponentName.AvatarStack, theme: 'light' } };
39
+ export const AvatarStackDark = { args: { component: ComponentName.AvatarStack, theme: 'dark' } };
40
+ export const FileUploaderLight = { args: { component: ComponentName.FileUploader, theme: 'light' } };
41
+ export const FileUploaderDark = { args: { component: ComponentName.FileUploader, theme: 'dark' } };
34
42
  //# sourceMappingURL=Foundation.stories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Foundation.stories.js","sourceRoot":"","sources":["../../../foundation/Foundation.stories.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Foundation.stories.js","sourceRoot":"","sources":["../../../foundation/Foundation.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,MAAM,IAAI,GAAG;IACT,KAAK,EAAE,iCAAiC;IACxC,SAAS,EAAE,gBAAgB;IAC3B,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;CACC,CAAC;AAE1C,eAAe,IAAI,CAAC;AAIpB,MAAM,CAAC,MAAM,eAAe,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AACxG,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AACtG,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AACpG,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AAClG,MAAM,CAAC,MAAM,mBAAmB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACpL,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AACtG,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AACpG,MAAM,CAAC,MAAM,eAAe,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AACxG,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AACtG,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AACzG,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AACvG,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACrI,MAAM,CAAC,MAAM,YAAY,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnI,MAAM,CAAC,MAAM,iBAAiB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC7I,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC3I,MAAM,CAAC,MAAM,eAAe,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzI,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACvI,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAC3P,MAAM,CAAC,MAAM,eAAe,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACzP,MAAM,CAAC,MAAM,kBAAkB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AAC5G,MAAM,CAAC,MAAM,kBAAkB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC9G,MAAM,CAAC,MAAM,iBAAiB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AAC5G,MAAM,CAAC,MAAM,mBAAmB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAChH,MAAM,CAAC,MAAM,kBAAkB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AAC9G,MAAM,CAAC,MAAM,cAAc,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC7G,MAAM,CAAC,MAAM,aAAa,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AAC3G,MAAM,CAAC,MAAM,iBAAiB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC5G,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AAC1G,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC1G,MAAM,CAAC,MAAM,eAAe,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;AACxG,MAAM,CAAC,MAAM,iBAAiB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC;AAC5G,MAAM,CAAC,MAAM,gBAAgB,GAAU,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare enum ActivityKind {
2
+ Comment = "comment",
3
+ Change = "change",
4
+ Status = "status",
5
+ System = "system"
6
+ }
7
+ export interface ActivityEntry {
8
+ id: string;
9
+ actor: string;
10
+ action: string;
11
+ kind: ActivityKind;
12
+ at: string;
13
+ body?: string;
14
+ }
15
+ export interface ActivityDay {
16
+ day: string;
17
+ entries: ActivityEntry[];
18
+ }
19
+ export declare function readActivity(value: unknown): ActivityEntry[];
20
+ export declare function dayOf(at: string, timeZone?: string): string;
21
+ export declare function groupByDay(entries: ActivityEntry[], ascending?: boolean, timeZone?: string): ActivityDay[];
22
+ //# sourceMappingURL=activityModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activityModel.d.ts","sourceRoot":"","sources":["../../../foundation/activityModel.ts"],"names":[],"mappings":"AAIA,oBAAY,YAAY;IACpB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;CACpB;AAGD,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,WAAW,WAAW;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,aAAa,EAAE,CAAC;CAC5B;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,EAAE,CAgB5D;AAGD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,SAAS,UAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAYxG"}
@@ -0,0 +1,58 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** What kind of thing happened, which decides the icon and the word that tells it apart without color. */ var ActivityKind = /*#__PURE__*/ function(ActivityKind) {
4
+ ActivityKind["Comment"] = "comment";
5
+ ActivityKind["Change"] = "change";
6
+ ActivityKind["Status"] = "status";
7
+ ActivityKind["System"] = "system";
8
+ return ActivityKind;
9
+ }({});
10
+ /** Reads entries out of a property value, dropping those without an id or a time that parses. */ function readActivity(value) {
11
+ if (!Array.isArray(value)) return [];
12
+ return value.flatMap((entry)=>{
13
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];
14
+ const { id, actor, action, kind, at, body } = entry;
15
+ if (typeof id !== 'string' || typeof at !== 'string' || Number.isNaN(new Date(at).getTime())) return [];
16
+ return [
17
+ {
18
+ id,
19
+ at,
20
+ actor: typeof actor === 'string' ? actor : '',
21
+ action: typeof action === 'string' ? action : '',
22
+ kind: Object.values(ActivityKind).includes(kind) ? kind : "system",
23
+ ...typeof body === 'string' && body.length > 0 ? {
24
+ body
25
+ } : {}
26
+ }
27
+ ];
28
+ });
29
+ }
30
+ /** The calendar day of an instant in a time zone, as `YYYY-MM-DD`. */ function dayOf(at, timeZone) {
31
+ return new Intl.DateTimeFormat('en-CA', {
32
+ timeZone,
33
+ year: 'numeric',
34
+ month: '2-digit',
35
+ day: '2-digit'
36
+ }).format(new Date(at));
37
+ }
38
+ /** Sorts the entries by time (newest first unless `ascending`) and groups them by calendar day, so a long feed has headings to scan by. */ function groupByDay(entries, ascending = false, timeZone) {
39
+ const sorted = [
40
+ ...entries
41
+ ].sort((first, second)=>(new Date(first.at).getTime() - new Date(second.at).getTime()) * (ascending ? 1 : -1));
42
+ const days = [];
43
+ for (const entry of sorted){
44
+ const day = dayOf(entry.at, timeZone);
45
+ const last = days[days.length - 1];
46
+ if (last?.day === day) last.entries.push(entry);
47
+ else days.push({
48
+ day,
49
+ entries: [
50
+ entry
51
+ ]
52
+ });
53
+ }
54
+ return days;
55
+ }
56
+
57
+ export { ActivityKind, dayOf, groupByDay, readActivity };
58
+ //# sourceMappingURL=activityModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activityModel.js","sources":["../../../foundation/activityModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** What kind of thing happened, which decides the icon and the word that tells it apart without color. */\nexport enum ActivityKind {\n Comment = 'comment',\n Change = 'change',\n Status = 'status',\n System = 'system',\n}\n\n/** One thing that happened to a record. */\nexport interface ActivityEntry {\n id: string;\n actor: string;\n action: string;\n kind: ActivityKind;\n at: string;\n body?: string;\n}\n\n/** The entries of one day, in the order the feed shows them. */\nexport interface ActivityDay {\n day: string;\n entries: ActivityEntry[];\n}\n\n/** Reads entries out of a property value, dropping those without an id or a time that parses. */\nexport function readActivity(value: unknown): ActivityEntry[] {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((entry): ActivityEntry[] => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];\n const { id, actor, action, kind, at, body } = entry as Record<string, unknown>;\n if (typeof id !== 'string' || typeof at !== 'string' || Number.isNaN(new Date(at).getTime())) return [];\n\n return [{\n id, at,\n actor: typeof actor === 'string' ? actor : '',\n action: typeof action === 'string' ? action : '',\n kind: (Object.values(ActivityKind) as string[]).includes(kind as string) ? (kind as ActivityKind) : ActivityKind.System,\n ...(typeof body === 'string' && body.length > 0 ? { body } : {}),\n }];\n });\n}\n\n/** The calendar day of an instant in a time zone, as `YYYY-MM-DD`. */\nexport function dayOf(at: string, timeZone?: string): string {\n return new Intl.DateTimeFormat('en-CA', { timeZone, year: 'numeric', month: '2-digit', day: '2-digit' }).format(new Date(at));\n}\n\n/** Sorts the entries by time (newest first unless `ascending`) and groups them by calendar day, so a long feed has headings to scan by. */\nexport function groupByDay(entries: ActivityEntry[], ascending = false, timeZone?: string): ActivityDay[] {\n const sorted = [...entries].sort((first, second) => (new Date(first.at).getTime() - new Date(second.at).getTime()) * (ascending ? 1 : -1));\n const days: ActivityDay[] = [];\n\n for (const entry of sorted) {\n const day = dayOf(entry.at, timeZone);\n const last = days[days.length - 1];\n if (last?.day === day) last.entries.push(entry);\n else days.push({ day, entries: [entry] });\n }\n\n return days;\n}\n"],"names":["ActivityKind","readActivity","value","Array","isArray","flatMap","entry","id","actor","action","kind","at","body","Number","isNaN","Date","getTime","Object","values","includes","length","dayOf","timeZone","Intl","DateTimeFormat","year","month","day","format","groupByDay","entries","ascending","sorted","sort","first","second","days","last","push"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface AvatarPerson {
2
+ name: string;
3
+ imageUrl?: string;
4
+ }
5
+ export declare function readPeople(value: unknown): AvatarPerson[];
6
+ export declare function initialsOf(name: string): string;
7
+ export declare function visiblePeople(people: AvatarPerson[], maximum: number): {
8
+ shown: AvatarPerson[];
9
+ hidden: number;
10
+ };
11
+ //# sourceMappingURL=avatarModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatarModel.d.ts","sourceRoot":"","sources":["../../../foundation/avatarModel.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,EAAE,CASzD;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGhH"}
@@ -0,0 +1,38 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** A person shown as an avatar. */ /** Reads people out of a property value, dropping entries without a name. */ function readPeople(value) {
4
+ if (!Array.isArray(value)) return [];
5
+ return value.flatMap((entry)=>{
6
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];
7
+ const { name, imageUrl } = entry;
8
+ if (typeof name !== 'string' || name.trim().length === 0) return [];
9
+ return [
10
+ {
11
+ name: name.trim(),
12
+ ...typeof imageUrl === 'string' && imageUrl.length > 0 ? {
13
+ imageUrl
14
+ } : {}
15
+ }
16
+ ];
17
+ });
18
+ }
19
+ /** The initials of a name: the first letter of the first and last words, so "Ada King Lovelace" is AL and "Ada" is A. */ function initialsOf(name) {
20
+ const words = name.split(/\s+/).filter((word)=>word.length > 0);
21
+ if (words.length === 0) return '';
22
+ const first = Array.from(words[0])[0] ?? '';
23
+ const last = words.length > 1 ? Array.from(words[words.length - 1])[0] ?? '' : '';
24
+ return `${first}${last}`.toLocaleUpperCase();
25
+ }
26
+ /** Splits people into those shown and how many are folded into the "+N" chip; at least one is always shown when there are any. */ function visiblePeople(people, maximum) {
27
+ const limit = Math.max(1, Math.floor(maximum));
28
+ return people.length <= limit ? {
29
+ shown: people,
30
+ hidden: 0
31
+ } : {
32
+ shown: people.slice(0, limit),
33
+ hidden: people.length - limit
34
+ };
35
+ }
36
+
37
+ export { initialsOf, readPeople, visiblePeople };
38
+ //# sourceMappingURL=avatarModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatarModel.js","sources":["../../../foundation/avatarModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** A person shown as an avatar. */\nexport interface AvatarPerson {\n name: string;\n imageUrl?: string;\n}\n\n/** Reads people out of a property value, dropping entries without a name. */\nexport function readPeople(value: unknown): AvatarPerson[] {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((entry): AvatarPerson[] => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];\n const { name, imageUrl } = entry as Record<string, unknown>;\n if (typeof name !== 'string' || name.trim().length === 0) return [];\n return [{ name: name.trim(), ...(typeof imageUrl === 'string' && imageUrl.length > 0 ? { imageUrl } : {}) }];\n });\n}\n\n/** The initials of a name: the first letter of the first and last words, so \"Ada King Lovelace\" is AL and \"Ada\" is A. */\nexport function initialsOf(name: string): string {\n const words = name.split(/\\s+/).filter(word => word.length > 0);\n if (words.length === 0) return '';\n\n const first = Array.from(words[0])[0] ?? '';\n const last = words.length > 1 ? Array.from(words[words.length - 1])[0] ?? '' : '';\n return `${first}${last}`.toLocaleUpperCase();\n}\n\n/** Splits people into those shown and how many are folded into the \"+N\" chip; at least one is always shown when there are any. */\nexport function visiblePeople(people: AvatarPerson[], maximum: number): { shown: AvatarPerson[]; hidden: number } {\n const limit = Math.max(1, Math.floor(maximum));\n return people.length <= limit ? { shown: people, hidden: 0 } : { shown: people.slice(0, limit), hidden: people.length - limit };\n}\n"],"names":["readPeople","value","Array","isArray","flatMap","entry","name","imageUrl","trim","length","initialsOf","words","split","filter","word","first","from","last","toLocaleUpperCase","visiblePeople","people","maximum","limit","Math","max","floor","shown","hidden","slice"],"mappings":"AAAA;AACA;AAEA,kHAOO,SAASA,WAAWC,KAAc,EAAA;AACrC,IAAA,IAAI,CAACC,KAAAA,CAAMC,OAAO,CAACF,KAAAA,CAAAA,EAAQ,OAAO,EAAE;IAEpC,OAAOA,KAAAA,CAAMG,OAAO,CAAC,CAACC,KAAAA,GAAAA;QAClB,IAAI,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,IAAQH,MAAMC,OAAO,CAACE,KAAAA,CAAAA,EAAQ,OAAO,EAAE;AAClF,QAAA,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAGF,KAAAA;QAC3B,IAAI,OAAOC,IAAAA,KAAS,QAAA,IAAYA,IAAAA,CAAKE,IAAI,GAAGC,MAAM,KAAK,CAAA,EAAG,OAAO,EAAE;QACnE,OAAO;AAAC,YAAA;AAAEH,gBAAAA,IAAAA,EAAMA,KAAKE,IAAI,EAAA;AAAI,gBAAA,GAAI,OAAOD,QAAAA,KAAa,QAAA,IAAYA,QAAAA,CAASE,MAAM,GAAG,CAAA,GAAI;AAAEF,oBAAAA;AAAS,iBAAA,GAAI;AAAI;AAAE,SAAA;AAChH,IAAA,CAAA,CAAA;AACJ;AAEA,0HACO,SAASG,UAAAA,CAAWJ,IAAY,EAAA;IACnC,MAAMK,KAAAA,GAAQL,IAAAA,CAAKM,KAAK,CAAC,KAAA,CAAA,CAAOC,MAAM,CAACC,CAAAA,IAAAA,GAAQA,IAAAA,CAAKL,MAAM,GAAG,CAAA,CAAA;AAC7D,IAAA,IAAIE,KAAAA,CAAMF,MAAM,KAAK,CAAA,EAAG,OAAO,EAAA;IAE/B,MAAMM,KAAAA,GAAQb,KAAAA,CAAMc,IAAI,CAACL,KAAK,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,IAAI,EAAA;AACzC,IAAA,MAAMM,OAAON,KAAAA,CAAMF,MAAM,GAAG,CAAA,GAAIP,KAAAA,CAAMc,IAAI,CAACL,KAAK,CAACA,KAAAA,CAAMF,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,IAAI,EAAA,GAAK,EAAA;AAC/E,IAAA,OAAO,CAAA,EAAGM,KAAAA,CAAAA,EAAQE,IAAAA,CAAAA,CAAM,CAACC,iBAAiB,EAAA;AAC9C;AAEA,mIACO,SAASC,aAAAA,CAAcC,MAAsB,EAAEC,OAAe,EAAA;AACjE,IAAA,MAAMC,QAAQC,IAAAA,CAAKC,GAAG,CAAC,CAAA,EAAGD,IAAAA,CAAKE,KAAK,CAACJ,OAAAA,CAAAA,CAAAA;IACrC,OAAOD,MAAAA,CAAOX,MAAM,IAAIa,KAAAA,GAAQ;QAAEI,KAAAA,EAAON,MAAAA;QAAQO,MAAAA,EAAQ;KAAE,GAAI;QAAED,KAAAA,EAAON,MAAAA,CAAOQ,KAAK,CAAC,CAAA,EAAGN,KAAAA,CAAAA;QAAQK,MAAAA,EAAQP,MAAAA,CAAOX,MAAM,GAAGa;AAAM,KAAA;AAClI;;"}
@@ -0,0 +1,17 @@
1
+ export interface ChecklistItem {
2
+ id: string;
3
+ label: string;
4
+ owner?: string;
5
+ due?: string;
6
+ done: boolean;
7
+ }
8
+ export interface ChecklistGroup {
9
+ title: string;
10
+ items: ChecklistItem[];
11
+ }
12
+ export declare function readChecklist(value: unknown): ChecklistGroup[];
13
+ export declare const completed: (group: ChecklistGroup) => number;
14
+ export declare function isOverdue(item: ChecklistItem, now: Date): boolean;
15
+ export declare const toggleTask: (groups: ChecklistGroup[], id: string) => ChecklistGroup[];
16
+ export declare const doneTaskIds: (groups: ChecklistGroup[]) => string[];
17
+ //# sourceMappingURL=checklistModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklistModel.d.ts","sourceRoot":"","sources":["../../../foundation/checklistModel.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACjB;AAGD,MAAM,WAAW,cAAc;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B;AAGD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAkB9D;AAGD,eAAO,MAAM,SAAS,UAAW,cAAc,KAAG,MAAsD,CAAC;AAGzG,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,GAAG,OAAO,CASjE;AAGD,eAAO,MAAM,UAAU,WAAY,cAAc,EAAE,MAAM,MAAM,KAAG,cAAc,EAG/D,CAAC;AAGlB,eAAO,MAAM,WAAW,WAAY,cAAc,EAAE,KAAG,MAAM,EAAyF,CAAC"}
@@ -0,0 +1,53 @@
1
+ // Copyright (c) Cratis. All rights reserved.
2
+ // Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
+ /** One task of a checklist. */ /** Reads checklist groups out of a property value; a task needs an id and a label, and is open unless it says it is done. */ function readChecklist(value) {
4
+ if (!Array.isArray(value)) return [];
5
+ return value.flatMap((entry)=>{
6
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];
7
+ const { title, items } = entry;
8
+ if (typeof title !== 'string' || !Array.isArray(items)) return [];
9
+ return [
10
+ {
11
+ title,
12
+ items: items.flatMap((item)=>{
13
+ if (typeof item !== 'object' || item === null || Array.isArray(item)) return [];
14
+ const { id, label, owner, due, done } = item;
15
+ if (typeof id !== 'string' || typeof label !== 'string') return [];
16
+ return [
17
+ {
18
+ id,
19
+ label,
20
+ done: done === true,
21
+ ...typeof owner === 'string' ? {
22
+ owner
23
+ } : {},
24
+ ...typeof due === 'string' ? {
25
+ due
26
+ } : {}
27
+ }
28
+ ];
29
+ })
30
+ }
31
+ ];
32
+ });
33
+ }
34
+ /** How many of a group's tasks are done. */ const completed = (group)=>group.items.filter((item)=>item.done).length;
35
+ /** Whether an open task is past its due date, today counting as not yet late. */ function isOverdue(item, now) {
36
+ if (item.done || item.due === undefined) return false;
37
+ const due = new Date(item.due);
38
+ if (Number.isNaN(due.getTime())) return false;
39
+ const endOfDue = new Date(due);
40
+ endOfDue.setUTCHours(23, 59, 59, 999);
41
+ return endOfDue.getTime() < now.getTime();
42
+ }
43
+ /** Marks one task done or open, leaving every other as it was. */ const toggleTask = (groups, id)=>groups.map((group)=>group.items.some((item)=>item.id === id) ? {
44
+ ...group,
45
+ items: group.items.map((item)=>item.id === id ? {
46
+ ...item,
47
+ done: !item.done
48
+ } : item)
49
+ } : group);
50
+ /** The ids of every done task: what the checklist publishes. */ const doneTaskIds = (groups)=>groups.flatMap((group)=>group.items.filter((item)=>item.done).map((item)=>item.id));
51
+
52
+ export { completed, doneTaskIds, isOverdue, readChecklist, toggleTask };
53
+ //# sourceMappingURL=checklistModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklistModel.js","sources":["../../../foundation/checklistModel.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\n/** One task of a checklist. */\nexport interface ChecklistItem {\n id: string;\n label: string;\n owner?: string;\n due?: string;\n done: boolean;\n}\n\n/** A titled group of tasks. */\nexport interface ChecklistGroup {\n title: string;\n items: ChecklistItem[];\n}\n\n/** Reads checklist groups out of a property value; a task needs an id and a label, and is open unless it says it is done. */\nexport function readChecklist(value: unknown): ChecklistGroup[] {\n if (!Array.isArray(value)) return [];\n\n return value.flatMap((entry): ChecklistGroup[] => {\n if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) return [];\n const { title, items } = entry as Record<string, unknown>;\n if (typeof title !== 'string' || !Array.isArray(items)) return [];\n\n return [{\n title,\n items: items.flatMap((item): ChecklistItem[] => {\n if (typeof item !== 'object' || item === null || Array.isArray(item)) return [];\n const { id, label, owner, due, done } = item as Record<string, unknown>;\n if (typeof id !== 'string' || typeof label !== 'string') return [];\n return [{ id, label, done: done === true, ...(typeof owner === 'string' ? { owner } : {}), ...(typeof due === 'string' ? { due } : {}) }];\n }),\n }];\n });\n}\n\n/** How many of a group's tasks are done. */\nexport const completed = (group: ChecklistGroup): number => group.items.filter(item => item.done).length;\n\n/** Whether an open task is past its due date, today counting as not yet late. */\nexport function isOverdue(item: ChecklistItem, now: Date): boolean {\n if (item.done || item.due === undefined) return false;\n\n const due = new Date(item.due);\n if (Number.isNaN(due.getTime())) return false;\n\n const endOfDue = new Date(due);\n endOfDue.setUTCHours(23, 59, 59, 999);\n return endOfDue.getTime() < now.getTime();\n}\n\n/** Marks one task done or open, leaving every other as it was. */\nexport const toggleTask = (groups: ChecklistGroup[], id: string): ChecklistGroup[] =>\n groups.map(group => (group.items.some(item => item.id === id)\n ? { ...group, items: group.items.map(item => (item.id === id ? { ...item, done: !item.done } : item)) }\n : group));\n\n/** The ids of every done task: what the checklist publishes. */\nexport const doneTaskIds = (groups: ChecklistGroup[]): string[] => groups.flatMap(group => group.items.filter(item => item.done).map(item => item.id));\n"],"names":["readChecklist","value","Array","isArray","flatMap","entry","title","items","item","id","label","owner","due","done","completed","group","filter","length","isOverdue","now","undefined","Date","Number","isNaN","getTime","endOfDue","setUTCHours","toggleTask","groups","map","some","doneTaskIds"],"mappings":"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"}
@@ -10,4 +10,5 @@ export declare function isRightToLeft(locale: string): boolean;
10
10
  export declare function formatNumber(value: number, locale: string, format?: NumberFormat, currency?: string, maximumFractionDigits?: number): string;
11
11
  export declare function readNumberFormat(element: ExternalComponent, property?: string): NumberFormat;
12
12
  export declare function formatDate(value: unknown, locale: string, withTime?: boolean): string;
13
+ export declare function formatDay(day: string, locale: string): string;
13
14
  //# sourceMappingURL=formatting.d.ts.map