@tumaet/prompt-ui-components 1.0.10 → 1.1.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/LICENSE +21 -0
- package/README.md +106 -0
- package/dist/components/DynamicIcon.js +34 -0
- package/dist/components/DynamicIcon.js.map +1 -0
- package/dist/components/ExportedApplicationAnswerTable.js +15 -0
- package/dist/components/ExportedApplicationAnswerTable.js.map +1 -0
- package/dist/components/FileList.js +43 -0
- package/dist/components/FileList.js.map +1 -0
- package/dist/components/FileUpload.js +76 -0
- package/dist/components/FileUpload.js.map +1 -0
- package/dist/components/FilterBadge.js +7 -0
- package/dist/components/FilterBadge.js.map +1 -0
- package/dist/components/MissingConfig.js +10 -0
- package/dist/components/MissingConfig.js.map +1 -0
- package/dist/components/MissingSettings.js +8 -0
- package/dist/components/MissingSettings.js.map +1 -0
- package/dist/components/ScoreLevelSelector.js +2 -5
- package/dist/components/ScoreLevelSelector.js.map +1 -1
- package/dist/components/SettingsCard.js +7 -0
- package/dist/components/SettingsCard.js.map +1 -0
- package/dist/components/StudentAvatar.js +11 -0
- package/dist/components/StudentAvatar.js.map +1 -0
- package/dist/components/StudentProfile.js +12 -0
- package/dist/components/StudentProfile.js.map +1 -0
- package/dist/components/StudentProfilePicture.js +13 -0
- package/dist/components/StudentProfilePicture.js.map +1 -0
- package/dist/components/ThemeToggle.js +9 -0
- package/dist/components/ThemeToggle.js.map +1 -0
- package/dist/components/index.js +26 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.js +3 -3
- package/dist/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.js.map +1 -1
- package/dist/components/minimal-tiptap/extensions/code-block-lowlight/code-block-lowlight.js +8 -1
- package/dist/components/minimal-tiptap/extensions/code-block-lowlight/code-block-lowlight.js.map +1 -1
- package/dist/components/minimal-tiptap/extensions/image/image.js +7 -2
- package/dist/components/minimal-tiptap/extensions/image/image.js.map +1 -1
- package/dist/components/minimal-tiptap/extensions/link/link.js +12 -1
- package/dist/components/minimal-tiptap/extensions/link/link.js.map +1 -1
- package/dist/components/minimal-tiptap/extensions/selection/selection.js.map +1 -1
- package/dist/components/pages/CoursePhaseParticipationsTable/CoursePhaseParticipationsTable.js +17 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/CoursePhaseParticipationsTable.js.map +1 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationActions.js +46 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationActions.js.map +1 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationColumns.js +37 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationColumns.js.map +1 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationFilters.js +22 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationFilters.js.map +1 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationRow.js +27 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/table/participationRow.js.map +1 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/utils/downloadParticipations.js +72 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/utils/downloadParticipations.js.map +1 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/utils/updateBatch.js +19 -0
- package/dist/components/pages/CoursePhaseParticipationsTable/utils/updateBatch.js.map +1 -0
- package/dist/components/pages/Mailing/CoursePhaseMailing.js +87 -0
- package/dist/components/pages/Mailing/CoursePhaseMailing.js.map +1 -0
- package/dist/components/pages/Mailing/components/AvailableMailPlaceholders.js +60 -0
- package/dist/components/pages/Mailing/components/AvailableMailPlaceholders.js.map +1 -0
- package/dist/components/pages/Mailing/components/ConfirmSendEmailDialog.js +43 -0
- package/dist/components/pages/Mailing/components/ConfirmSendEmailDialog.js.map +1 -0
- package/dist/components/pages/Mailing/components/MailingEditor.js +25 -0
- package/dist/components/pages/Mailing/components/MailingEditor.js.map +1 -0
- package/dist/components/pages/Mailing/components/ManualMailSending.js +33 -0
- package/dist/components/pages/Mailing/components/ManualMailSending.js.map +1 -0
- package/dist/components/pages/Mailing/components/SettingsCard.js +13 -0
- package/dist/components/pages/Mailing/components/SettingsCard.js.map +1 -0
- package/dist/components/table/GroupActionDialog.js +7 -0
- package/dist/components/table/GroupActionDialog.js.map +1 -0
- package/dist/components/table/PromptTable/filters/TableFiltersMenu.js +1 -1
- package/dist/components/table/PromptTable/filters/TableFiltersMenu.js.map +1 -1
- package/dist/components/table/SortableHeader.js +6 -0
- package/dist/components/table/SortableHeader.js.map +1 -0
- package/dist/contexts/DarkModeProvider.js +56 -0
- package/dist/contexts/DarkModeProvider.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/formatFileSize.js +9 -0
- package/dist/lib/formatFileSize.js.map +1 -0
- package/dist/lib/getCountries.js +15 -0
- package/dist/lib/getCountries.js.map +1 -0
- package/dist/lib/getGravatarUrl.js +7 -0
- package/dist/lib/getGravatarUrl.js.map +1 -0
- package/dist/lib/getStatusBadge.js +27 -0
- package/dist/lib/getStatusBadge.js.map +1 -0
- package/dist/lib/getStatusColor.js +13 -0
- package/dist/lib/getStatusColor.js.map +1 -0
- package/dist/lib/index.js +6 -0
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/openFileDownload.js +17 -0
- package/dist/lib/openFileDownload.js.map +1 -0
- package/dist/lib/translations.json +18 -0
- package/dist/types/components/DynamicIcon.d.ts +6 -0
- package/dist/types/components/ExportedApplicationAnswerTable.d.ts +6 -0
- package/dist/types/components/FileList.d.ts +9 -0
- package/dist/types/components/FileUpload.d.ts +13 -0
- package/dist/types/components/FilterBadge.d.ts +6 -0
- package/dist/types/components/MissingConfig.d.ts +13 -0
- package/dist/types/components/MissingSettings.d.ts +11 -0
- package/dist/types/components/MultiSelect.d.ts +1 -1
- package/dist/types/components/SettingsCard.d.ts +8 -0
- package/dist/types/components/StudentAvatar.d.ts +17 -0
- package/dist/types/components/StudentProfile.d.ts +7 -0
- package/dist/types/components/StudentProfilePicture.d.ts +9 -0
- package/dist/types/components/ThemeToggle.d.ts +1 -0
- package/dist/types/components/index.d.ts +26 -0
- package/dist/types/components/minimal-tiptap/extensions/color/color.d.ts +1 -1
- package/dist/types/components/minimal-tiptap/extensions/image/image.d.ts +1 -1
- package/dist/types/components/minimal-tiptap/extensions/link/link.d.ts +1 -1
- package/dist/types/components/minimal-tiptap/hooks/use-minimal-tiptap.d.ts +1 -1
- package/dist/types/components/pages/CoursePhaseParticipationsTable/CoursePhaseParticipationsTable.d.ts +15 -0
- package/dist/types/components/pages/CoursePhaseParticipationsTable/table/participationActions.d.ts +11 -0
- package/dist/types/components/pages/CoursePhaseParticipationsTable/table/participationColumns.d.ts +3 -0
- package/dist/types/components/pages/CoursePhaseParticipationsTable/table/participationFilters.d.ts +2 -0
- package/dist/types/components/pages/CoursePhaseParticipationsTable/table/participationRow.d.ts +35 -0
- package/dist/types/components/pages/CoursePhaseParticipationsTable/utils/downloadParticipations.d.ts +3 -0
- package/dist/types/components/pages/CoursePhaseParticipationsTable/utils/updateBatch.d.ts +5 -0
- package/dist/types/components/pages/Mailing/CoursePhaseMailing.d.ts +6 -0
- package/dist/types/components/pages/Mailing/components/AvailableMailPlaceholders.d.ts +12 -0
- package/dist/types/components/pages/Mailing/components/ConfirmSendEmailDialog.d.ts +8 -0
- package/dist/types/components/pages/Mailing/components/MailingEditor.d.ts +12 -0
- package/dist/types/components/pages/Mailing/components/ManualMailSending.d.ts +7 -0
- package/dist/types/components/pages/Mailing/components/SettingsCard.d.ts +7 -0
- package/dist/types/components/table/GroupActionDialog.d.ts +11 -0
- package/dist/types/components/table/SortableHeader.d.ts +4 -0
- package/dist/types/components/ui/alert.d.ts +1 -1
- package/dist/types/components/ui/badge.d.ts +1 -1
- package/dist/types/components/ui/button.d.ts +1 -1
- package/dist/types/components/ui/label.d.ts +1 -1
- package/dist/types/components/ui/sheet.d.ts +1 -1
- package/dist/types/components/ui/sidebar.d.ts +1 -1
- package/dist/types/components/ui/toast.d.ts +1 -1
- package/dist/types/components/ui/toggle-group.d.ts +2 -2
- package/dist/types/components/ui/toggle.d.ts +2 -2
- package/dist/types/contexts/DarkModeProvider.d.ts +11 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/lib/formatFileSize.d.ts +1 -0
- package/dist/types/lib/getCountries.d.ts +5 -0
- package/dist/types/lib/getGravatarUrl.d.ts +1 -0
- package/dist/types/lib/getStatusBadge.d.ts +3 -0
- package/dist/types/lib/getStatusColor.d.ts +2 -0
- package/dist/types/lib/index.d.ts +6 -0
- package/dist/types/lib/openFileDownload.d.ts +6 -0
- package/package.json +54 -36
- package/tailwind-config.js +50 -0
- package/readme.md +0 -36
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 TUM Applied Education Technologies
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# prompt-ui-components
|
|
2
|
+
|
|
3
|
+
A shared UI component library for the **AET Prompt** system, built on [shadcn/ui](https://ui.shadcn.dev/).
|
|
4
|
+
|
|
5
|
+
Components are designed for **Module Federation** singleton usage, which ensures:
|
|
6
|
+
- A **consistent UI experience** across microfrontends
|
|
7
|
+
- **Reduced bundle size** by avoiding duplicate component loading
|
|
8
|
+
- **Unified UI state** such as shared toast handling across apps
|
|
9
|
+
|
|
10
|
+
For shared state primitives and shared TypeScript interfaces, use [`@tumaet/prompt-shared-state`](https://github.com/prompt-edu/prompt-shared-state).
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Package
|
|
15
|
+
|
|
16
|
+
`@tumaet/prompt-ui-components` provides:
|
|
17
|
+
- **36+ shadcn/ui base components** (buttons, dialogs, forms, tables, etc.)
|
|
18
|
+
- **PromptTable** — advanced data table with sorting, filtering, pagination, row selection, and URL-synced state
|
|
19
|
+
- **MinimalTiptapEditor** — rich text editor with toolbar, code highlighting, image support, and link management
|
|
20
|
+
- **Custom components** — date pickers, multi-select, management page headers, score level selectors, and more
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
This project uses **Yarn 4** as specified in the `packageManager` field of each `package.json`. To work with this repository, enable Corepack, which will automatically use the correct Yarn version.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
corepack enable
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Corepack is included by default with Node.js 16.9+ and 14.19+. If you see an error like:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
error This project's package.json defines "packageManager": "yarn@4.13.0". However the current global version of Yarn is 1.22.22.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Run `corepack enable` to fix it.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Development
|
|
43
|
+
|
|
44
|
+
### Building Locally
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
yarn install
|
|
48
|
+
yarn build
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Linting
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# From within the package directory
|
|
55
|
+
yarn lint
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Testing Before Release
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
yarn build
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Publishing Packages
|
|
67
|
+
|
|
68
|
+
The package is published to npm when you create a GitHub release.
|
|
69
|
+
|
|
70
|
+
### 1. Update Package Version
|
|
71
|
+
|
|
72
|
+
Ensure `package.json` has the version number matching your intended release tag.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
yarn version patch # 1.2.3 -> 1.2.4
|
|
76
|
+
# or: yarn version minor (1.2.3 -> 1.3.0)
|
|
77
|
+
# or: yarn version major (1.2.3 -> 2.0.0)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Or edit the `package.json` file manually.
|
|
81
|
+
|
|
82
|
+
### 2. Create a GitHub Release
|
|
83
|
+
|
|
84
|
+
1. Go to the [Releases page](../../releases)
|
|
85
|
+
2. Click **"Create a new release"**
|
|
86
|
+
3. Create a new tag with the format `v{version}` (for example, `v1.2.3`)
|
|
87
|
+
4. Set the release title and add release notes
|
|
88
|
+
5. Click **"Publish release"**
|
|
89
|
+
|
|
90
|
+
### 3. Automated Publishing
|
|
91
|
+
|
|
92
|
+
Once you publish the release, the GitHub Actions workflow:
|
|
93
|
+
|
|
94
|
+
1. **Validates** that `package.json` matches the release tag
|
|
95
|
+
2. **Builds** the package
|
|
96
|
+
3. **Publishes** `@tumaet/prompt-ui-components` to npm
|
|
97
|
+
|
|
98
|
+
If there is a version mismatch, the workflow fails with a clear error.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Package Information
|
|
103
|
+
|
|
104
|
+
| Package | Latest Version | Description |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| [@tumaet/prompt-ui-components](https://www.npmjs.com/package/@tumaet/prompt-ui-components) |  | Reusable React UI components |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as LucideIcons from 'lucide-react';
|
|
3
|
+
const fallback = _jsx("div", { style: { width: 24, height: 24 } });
|
|
4
|
+
const iconRegistry = new Map();
|
|
5
|
+
const registerIcon = (name, icon) => {
|
|
6
|
+
iconRegistry.set(name, icon);
|
|
7
|
+
iconRegistry.set(name.toLowerCase(), icon);
|
|
8
|
+
};
|
|
9
|
+
const toKebabCase = (value) => value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
10
|
+
const toPascalCase = (value) => value
|
|
11
|
+
.split(/[-_\s]+/)
|
|
12
|
+
.filter(Boolean)
|
|
13
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
|
|
14
|
+
.join('');
|
|
15
|
+
for (const [exportName, icon] of Object.entries(LucideIcons)) {
|
|
16
|
+
if (typeof icon !== 'function' && typeof icon !== 'object') {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
registerIcon(exportName, icon);
|
|
20
|
+
registerIcon(toKebabCase(exportName), icon);
|
|
21
|
+
}
|
|
22
|
+
const DynamicIcon = ({ name, ...props }) => {
|
|
23
|
+
const normalizedName = name.trim();
|
|
24
|
+
const LucideIcon = iconRegistry.get(normalizedName) ??
|
|
25
|
+
iconRegistry.get(normalizedName.toLowerCase()) ??
|
|
26
|
+
iconRegistry.get(toPascalCase(normalizedName));
|
|
27
|
+
if (!LucideIcon) {
|
|
28
|
+
console.error(`Icon "${name}" does not exist in lucide-react`);
|
|
29
|
+
return fallback;
|
|
30
|
+
}
|
|
31
|
+
return _jsx(LucideIcon, { ...props });
|
|
32
|
+
};
|
|
33
|
+
export default DynamicIcon;
|
|
34
|
+
//# sourceMappingURL=DynamicIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicIcon.js","sourceRoot":"","sources":["../../src/components/DynamicIcon.tsx"],"names":[],"mappings":";AAEA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAA;AAE3C,MAAM,QAAQ,GAAG,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAI,CAAA;AAQ1D,MAAM,YAAY,GAAG,IAAI,GAAG,EAA+B,CAAA;AAE3D,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,IAAyB,EAAE,EAAE;IAC/D,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AAEjG,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CACrC,KAAK;KACF,KAAK,CAAC,SAAS,CAAC;KAChB,MAAM,CAAC,OAAO,CAAC;KACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KACzE,IAAI,CAAC,EAAE,CAAC,CAAA;AAEb,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7D,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3D,SAAQ;IACV,CAAC;IAED,YAAY,CAAC,UAAU,EAAE,IAA2B,CAAC,CAAA;IACrD,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,IAA2B,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,EAAa,EAAE,EAAE;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAElC,MAAM,UAAU,GACd,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC;QAChC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAC9C,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;IAEhD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,kCAAkC,CAAC,CAAA;QAC9D,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,KAAC,UAAU,OAAK,KAAK,GAAI,CAAA;AAClC,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { Badge, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../components';
|
|
4
|
+
import { AlignLeft, CheckSquare } from 'lucide-react';
|
|
5
|
+
export const ExportedApplicationAnswerTable = ({ applicationAnswers, }) => {
|
|
6
|
+
const orderedAnswers = useMemo(() => {
|
|
7
|
+
if (!applicationAnswers)
|
|
8
|
+
return [];
|
|
9
|
+
return applicationAnswers?.sort((a, b) => a.orderNum - b.orderNum);
|
|
10
|
+
}, [applicationAnswers]);
|
|
11
|
+
return (_jsx("div", { className: 'overflow-x-auto', children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { className: 'w-1/12', children: "Type" }), _jsx(TableHead, { className: 'w-1/5', children: "Key" }), _jsx(TableHead, { children: "Answer" })] }) }), _jsx(TableBody, { children: orderedAnswers.map((answer, index) => {
|
|
12
|
+
return (_jsxs(TableRow, { className: index % 2 === 0 ? 'bg-muted/50' : '', children: [_jsx(TableCell, { children: answer.type === 'multiselect' ? (_jsx(CheckSquare, { className: 'h-4 w-4 text-muted-foreground' })) : (_jsx(AlignLeft, { className: 'h-4 w-4 text-muted-foreground' })) }), _jsx(TableCell, { className: 'font-medium', children: _jsx("div", { className: 'flex items-center space-x-2', children: _jsx("span", { children: answer.key }) }) }), _jsx(TableCell, { children: Array.isArray(answer.answer) ? (_jsx("div", { children: answer.answer.map((item, idx) => (_jsx(Badge, { className: 'mr-1', children: item }, idx))) })) : (_jsx("p", { className: 'whitespace-pre-wrap break-words', children: answer.answer })) })] }, answer.key));
|
|
13
|
+
}) })] }) }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=ExportedApplicationAnswerTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportedApplicationAnswerTable.js","sourceRoot":"","sources":["../../src/components/ExportedApplicationAnswerTable.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAMrD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,EAC7C,kBAAkB,GACkB,EAAE,EAAE;IACxC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,IAAI,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAA;QAClC,OAAO,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAA;IACpE,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAA;IAExB,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC9B,MAAC,KAAK,eACJ,KAAC,WAAW,cACV,MAAC,QAAQ,eACP,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,qBAAiB,EAC9C,KAAC,SAAS,IAAC,SAAS,EAAC,OAAO,oBAAgB,EAC5C,KAAC,SAAS,yBAAmB,IACpB,GACC,EACd,KAAC,SAAS,cACP,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;wBACpC,OAAO,CACL,MAAC,QAAQ,IAAkB,SAAS,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aACxE,KAAC,SAAS,cACP,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,CAC/B,KAAC,WAAW,IAAC,SAAS,EAAC,+BAA+B,GAAG,CAC1D,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,SAAS,EAAC,+BAA+B,GAAG,CACxD,GACS,EAEZ,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,YAChC,cAAK,SAAS,EAAC,6BAA6B,YAC1C,yBAAO,MAAM,CAAC,GAAG,GAAQ,GACrB,GACI,EACZ,KAAC,SAAS,cACP,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC9B,wBACG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAChC,KAAC,KAAK,IAAW,SAAS,EAAC,MAAM,YAC9B,IAAI,IADK,GAAG,CAEP,CACT,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,iCAAiC,YAAE,MAAM,CAAC,MAAM,GAAK,CACnE,GACS,KA1BC,MAAM,CAAC,GAAG,CA2Bd,CACZ,CAAA;oBACH,CAAC,CAAC,GACQ,IACN,GACJ,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Download, Trash2, File } from 'lucide-react';
|
|
4
|
+
import { Button, Card, CardContent, DeleteConfirmation } from '../components';
|
|
5
|
+
import { cn } from '../lib/utils';
|
|
6
|
+
import { formatFileSize } from '../lib/formatFileSize';
|
|
7
|
+
import { openFileDownload } from '../lib/openFileDownload';
|
|
8
|
+
export const FileList = ({ files, onDelete, allowDelete = false, className, }) => {
|
|
9
|
+
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
|
10
|
+
const [fileToDelete, setFileToDelete] = useState(null);
|
|
11
|
+
const handleDownload = async (file) => {
|
|
12
|
+
try {
|
|
13
|
+
await openFileDownload({ downloadUrl: file.downloadUrl, fileName: file.originalFilename });
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.error('Download failed:', error);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const promptDelete = (fileId) => {
|
|
20
|
+
setFileToDelete(fileId);
|
|
21
|
+
setDeleteDialogOpen(true);
|
|
22
|
+
};
|
|
23
|
+
const handleDeleteConfirmation = async (confirmed) => {
|
|
24
|
+
if (confirmed && fileToDelete && onDelete) {
|
|
25
|
+
try {
|
|
26
|
+
await onDelete(fileToDelete);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error('Delete failed:', error);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
setFileToDelete(null);
|
|
33
|
+
};
|
|
34
|
+
const formatDate = (dateString) => {
|
|
35
|
+
const date = new Date(dateString);
|
|
36
|
+
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
|
|
37
|
+
};
|
|
38
|
+
if (!files || files.length === 0) {
|
|
39
|
+
return (_jsxs("div", { className: cn('text-center py-8 text-gray-500', className), children: [_jsx(File, { className: 'h-12 w-12 mx-auto mb-2 opacity-50' }), _jsx("p", { className: 'text-sm', children: "No files uploaded yet" })] }));
|
|
40
|
+
}
|
|
41
|
+
return (_jsxs("div", { className: cn('space-y-2', className), children: [files.map((file) => (_jsx(Card, { children: _jsx(CardContent, { className: 'p-4', children: _jsxs("div", { className: 'flex items-center justify-between', children: [_jsxs("div", { className: 'flex items-center gap-3 flex-1 min-w-0', children: [_jsx("div", { className: 'p-2 bg-primary/10 rounded', children: _jsx(File, { className: 'h-5 w-5 text-primary' }) }), _jsxs("div", { className: 'flex-1 min-w-0', children: [_jsx("p", { className: 'text-sm font-medium truncate', children: file.originalFilename }), _jsxs("div", { className: 'flex items-center gap-2 text-xs text-gray-500', children: [_jsx("span", { children: formatFileSize(file.sizeBytes) }), _jsx("span", { children: "\u2022" }), _jsx("span", { children: formatDate(file.createdAt) })] }), file.description && (_jsx("p", { className: 'text-xs text-gray-600 mt-1', children: file.description }))] })] }), _jsxs("div", { className: 'flex items-center gap-2', children: [_jsx(Button, { type: 'button', size: 'sm', variant: 'outline', onClick: () => handleDownload(file), disabled: !file.downloadUrl, children: _jsx(Download, { className: 'h-4 w-4' }) }), allowDelete && onDelete && (_jsx(Button, { type: 'button', size: 'sm', variant: 'outline', onClick: () => promptDelete(file.id), children: _jsx(Trash2, { className: 'h-4 w-4' }) }))] })] }) }) }, file.id))), _jsx(DeleteConfirmation, { isOpen: deleteDialogOpen, setOpen: setDeleteDialogOpen, onClick: handleDeleteConfirmation, deleteMessage: 'Are you sure you want to delete this file?' }), ' '] }));
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=FileList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileList.js","sourceRoot":"","sources":["../../src/components/FileList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Upload, X, File, Loader2 } from 'lucide-react';
|
|
4
|
+
import { useFileUpload } from '@tumaet/prompt-shared-state';
|
|
5
|
+
import { Button, Progress, Card, CardContent } from '../components';
|
|
6
|
+
import { cn } from '../lib/utils';
|
|
7
|
+
import { formatFileSize } from '../lib/formatFileSize';
|
|
8
|
+
export const FileUpload = ({ coursePhaseId, description, tags, accept, maxSizeMB = 50, onSuccess, onError, className, }) => {
|
|
9
|
+
const [selectedFile, setSelectedFile] = React.useState(null);
|
|
10
|
+
const [dragActive, setDragActive] = React.useState(false);
|
|
11
|
+
const fileInputRef = React.useRef(null);
|
|
12
|
+
const { upload, uploadProgress, isUploading } = useFileUpload({
|
|
13
|
+
onSuccess: (data) => {
|
|
14
|
+
setSelectedFile(null);
|
|
15
|
+
if (fileInputRef.current) {
|
|
16
|
+
fileInputRef.current.value = '';
|
|
17
|
+
}
|
|
18
|
+
onSuccess?.(data);
|
|
19
|
+
},
|
|
20
|
+
onError: (error) => {
|
|
21
|
+
console.error('Upload failed:', error);
|
|
22
|
+
onError?.(error);
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
const handleDrag = (e) => {
|
|
26
|
+
e.preventDefault();
|
|
27
|
+
e.stopPropagation();
|
|
28
|
+
if (e.type === 'dragenter' || e.type === 'dragover') {
|
|
29
|
+
setDragActive(true);
|
|
30
|
+
}
|
|
31
|
+
else if (e.type === 'dragleave') {
|
|
32
|
+
setDragActive(false);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const handleDrop = (e) => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
e.stopPropagation();
|
|
38
|
+
setDragActive(false);
|
|
39
|
+
if (e.dataTransfer.files && e.dataTransfer.files[0]) {
|
|
40
|
+
handleFile(e.dataTransfer.files[0]);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
const handleChange = (e) => {
|
|
44
|
+
e.preventDefault();
|
|
45
|
+
if (e.target.files && e.target.files[0]) {
|
|
46
|
+
handleFile(e.target.files[0]);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const handleFile = (file) => {
|
|
50
|
+
// Check file size
|
|
51
|
+
const fileSizeMB = file.size / (1024 * 1024);
|
|
52
|
+
if (fileSizeMB > maxSizeMB) {
|
|
53
|
+
setSelectedFile(null);
|
|
54
|
+
if (fileInputRef.current) {
|
|
55
|
+
fileInputRef.current.value = '';
|
|
56
|
+
}
|
|
57
|
+
onError?.(new Error(`File size exceeds ${maxSizeMB}MB limit`));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setSelectedFile(file);
|
|
61
|
+
upload.mutate({
|
|
62
|
+
file,
|
|
63
|
+
coursePhaseId,
|
|
64
|
+
description,
|
|
65
|
+
tags,
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
const handleRemove = () => {
|
|
69
|
+
setSelectedFile(null);
|
|
70
|
+
if (fileInputRef.current) {
|
|
71
|
+
fileInputRef.current.value = '';
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
return (_jsx("div", { className: cn('w-full', className), children: !selectedFile ? (_jsxs("div", { className: cn('relative border-2 border-dashed rounded-lg p-8 text-center transition-colors', dragActive ? 'border-primary bg-primary/5' : 'border-gray-300 hover:border-primary', isUploading && 'pointer-events-none opacity-50'), onDragEnter: handleDrag, onDragLeave: handleDrag, onDragOver: handleDrag, onDrop: handleDrop, children: [_jsx("input", { ref: fileInputRef, type: 'file', className: 'hidden', onChange: handleChange, accept: accept, disabled: isUploading }), _jsxs("div", { className: 'flex flex-col items-center gap-4', children: [_jsx("div", { className: 'p-4 bg-primary/10 rounded-full', children: _jsx(Upload, { className: 'h-8 w-8 text-primary' }) }), _jsxs("div", { className: 'space-y-2', children: [_jsx("p", { className: 'text-sm font-medium', children: "Drag and drop your file here, or click to browse" }), _jsxs("p", { className: 'text-xs text-gray-500', children: ["Maximum file size: ", maxSizeMB, "MB"] })] }), _jsx(Button, { type: 'button', variant: 'outline', onClick: () => fileInputRef.current?.click(), disabled: isUploading, children: "Select File" })] })] })) : (_jsx(Card, { children: _jsxs(CardContent, { className: 'p-4', children: [_jsxs("div", { className: 'flex items-center justify-between', children: [_jsxs("div", { className: 'flex items-center gap-3 flex-1', children: [_jsx("div", { className: 'p-2 bg-primary/10 rounded', children: _jsx(File, { className: 'h-5 w-5 text-primary' }) }), _jsxs("div", { className: 'flex-1 min-w-0', children: [_jsx("p", { className: 'text-sm font-medium truncate', children: selectedFile.name }), _jsx("p", { className: 'text-xs text-gray-500', children: formatFileSize(selectedFile.size) })] })] }), _jsxs("div", { className: 'flex items-center gap-2', children: [!isUploading && (_jsx(Button, { type: 'button', size: 'sm', variant: 'ghost', onClick: handleRemove, disabled: isUploading, children: _jsx(X, { className: 'h-4 w-4' }) })), isUploading && _jsx(Loader2, { className: 'h-5 w-5 animate-spin text-primary' })] })] }), isUploading && uploadProgress > 0 && (_jsxs("div", { className: 'mt-4', children: [_jsx(Progress, { value: uploadProgress, className: 'h-2' }), _jsxs("p", { className: 'text-xs text-gray-500 mt-1 text-right', children: [uploadProgress, "%"] })] }))] }) })) }));
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=FileUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUpload.js","sourceRoot":"","sources":["../../src/components/FileUpload.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Badge } from '../components';
|
|
3
|
+
import { X } from 'lucide-react';
|
|
4
|
+
export const FilterBadge = ({ label, onRemove }) => {
|
|
5
|
+
return (_jsxs(Badge, { variant: 'secondary', className: 'cursor-pointer flex items-center gap-1', onClick: onRemove, children: [_jsx(X, { className: 'h-3 w-3' }), label] }));
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=FilterBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterBadge.js","sourceRoot":"","sources":["../../src/components/FilterBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAOhC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAoB,EAAE,EAAE;IACnE,OAAO,CACL,MAAC,KAAK,IACJ,OAAO,EAAC,WAAW,EACnB,SAAS,EAAC,wCAAwC,EAClD,OAAO,EAAE,QAAQ,aAEjB,KAAC,CAAC,IAAC,SAAS,EAAC,SAAS,GAAG,EACxB,KAAK,IACA,CACT,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Alert, AlertDescription, AlertTitle, Button, Card, CardContent, CardHeader, CardTitle, } from '../components';
|
|
3
|
+
import { AlertTriangle } from 'lucide-react';
|
|
4
|
+
import { useNavigate } from 'react-router-dom';
|
|
5
|
+
export const MissingConfig = ({ elements }) => {
|
|
6
|
+
const navigate = useNavigate();
|
|
7
|
+
return (_jsx(_Fragment, { children: elements.length > 0 && (_jsxs(Card, { className: 'mb-6 border-l-4 border-l-yellow-400', children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: 'flex items-center', children: [_jsx(AlertTriangle, { className: 'mr-2 text-yellow-500' }), "Missing Configurations"] }) }), _jsx(CardContent, { children: _jsx("div", { className: 'space-y-2', children: elements.map((config) => (_jsxs(Alert, { className: 'flex items-start', children: [_jsx("div", { className: 'flex-grow', children: _jsxs("div", { className: 'flex items-center', children: [_jsx(config.icon, { className: 'h-4 w-4 text-yellow-500 mr-2 mt-1' }), _jsxs("div", { children: [_jsxs(AlertTitle, { className: 'mb-1', children: ["Missing: ", config.title] }), _jsx(AlertDescription, { children: config.description ||
|
|
8
|
+
`Please configure the ${config.title.toLowerCase()} to ensure proper functionality.` })] })] }) }), config.hide && (_jsx(Button, { variant: 'outline', size: 'sm', onClick: config.hide, className: 'ml-4 mt-1 whitespace-nowrap', children: "Hide Warning" })), _jsx(Button, { variant: 'outline', size: 'sm', onClick: () => navigate(config.link), className: 'ml-4 mt-1 whitespace-nowrap', children: "Configure" })] }, config.title))) }) })] })) }));
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=MissingConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MissingConfig.js","sourceRoot":"","sources":["../../src/components/MissingConfig.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAc9C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAsB,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,OAAO,CACL,4BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,MAAC,IAAI,IAAC,SAAS,EAAC,qCAAqC,aACnD,KAAC,UAAU,cACT,MAAC,SAAS,IAAC,SAAS,EAAC,mBAAmB,aACtC,KAAC,aAAa,IAAC,SAAS,EAAC,sBAAsB,GAAG,8BAExC,GACD,EACb,KAAC,WAAW,cACV,cAAK,SAAS,EAAC,WAAW,YACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACxB,MAAC,KAAK,IAAoB,SAAS,EAAC,kBAAkB,aACpD,cAAK,SAAS,EAAC,WAAW,YACxB,eAAK,SAAS,EAAC,mBAAmB,aAChC,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAC,mCAAmC,GAAG,EAC7D,0BACE,MAAC,UAAU,IAAC,SAAS,EAAC,MAAM,0BAAW,MAAM,CAAC,KAAK,IAAc,EACjE,KAAC,gBAAgB,cACd,MAAM,CAAC,WAAW;4DACjB,wBAAwB,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,kCAAkC,GACrE,IACf,IACF,GACF,EACL,MAAM,CAAC,IAAI,IAAI,CACd,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,MAAM,CAAC,IAAI,EACpB,SAAS,EAAC,6BAA6B,6BAGhC,CACV,EACD,KAAC,MAAM,IACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EACpC,SAAS,EAAC,6BAA6B,0BAGhC,KA9BC,MAAM,CAAC,KAAK,CA+BhB,CACT,CAAC,GACE,GACM,IACT,CACR,GACA,CACJ,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Alert, AlertDescription, AlertTitle, Card, CardContent, CardHeader, CardTitle, } from '../components';
|
|
3
|
+
import { AlertTriangle } from 'lucide-react';
|
|
4
|
+
export const MissingSettings = ({ elements }) => {
|
|
5
|
+
return (_jsx(_Fragment, { children: elements.length > 0 && (_jsxs(Card, { className: 'mb-6 border-l-4 border-l-yellow-400', children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: 'flex items-center', children: [_jsx(AlertTriangle, { className: 'mr-2 text-yellow-500' }), "Missing Configurations"] }) }), _jsx(CardContent, { children: _jsx("div", { className: 'space-y-2', children: elements.map((config) => (_jsx(Alert, { className: 'flex items-start', children: _jsx("div", { className: 'flex-grow', children: _jsxs("div", { className: 'flex items-center', children: [_jsx(config.icon, { className: 'h-4 w-4 text-yellow-500 mr-2 mt-1' }), _jsxs("div", { children: [_jsxs(AlertTitle, { className: 'mb-1', children: ["Missing: ", config.title] }), _jsx(AlertDescription, { children: config.description ||
|
|
6
|
+
`Please configure the ${config.title.toLowerCase()} to ensure proper functionality.` })] })] }) }) }, config.title))) }) })] })) }));
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=MissingSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MissingSettings.js","sourceRoot":"","sources":["../../src/components/MissingSettings.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,SAAS,GACV,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAa5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE;IACpE,OAAO,CACL,4BACG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,MAAC,IAAI,IAAC,SAAS,EAAC,qCAAqC,aACnD,KAAC,UAAU,cACT,MAAC,SAAS,IAAC,SAAS,EAAC,mBAAmB,aACtC,KAAC,aAAa,IAAC,SAAS,EAAC,sBAAsB,GAAG,8BAExC,GACD,EACb,KAAC,WAAW,cACV,cAAK,SAAS,EAAC,WAAW,YACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACxB,KAAC,KAAK,IAAoB,SAAS,EAAC,kBAAkB,YACpD,cAAK,SAAS,EAAC,WAAW,YACxB,eAAK,SAAS,EAAC,mBAAmB,aAChC,KAAC,MAAM,CAAC,IAAI,IAAC,SAAS,EAAC,mCAAmC,GAAG,EAC7D,0BACE,MAAC,UAAU,IAAC,SAAS,EAAC,MAAM,0BAAW,MAAM,CAAC,KAAK,IAAc,EACjE,KAAC,gBAAgB,cACd,MAAM,CAAC,WAAW;wDACjB,wBAAwB,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,kCAAkC,GACrE,IACf,IACF,GACF,IAZI,MAAM,CAAC,KAAK,CAahB,CACT,CAAC,GACE,GACM,IACT,CACR,GACA,CACJ,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -11,11 +11,8 @@ export const ScoreLevelSelector = ({ selectedScore, onScoreChange, completed, de
|
|
|
11
11
|
const isSelected = selectedScore === level;
|
|
12
12
|
const descriptionID = `score-level-${level}-description`;
|
|
13
13
|
const label = labelsByLevel?.[level] ?? config.title;
|
|
14
|
-
const levelIndicators = showIndicators ? indicators?.[level] ?? [] : [];
|
|
15
|
-
return (_jsxs("div", { className: cn('relative', hideUnselectedOnDesktop &&
|
|
16
|
-
selectedScore !== undefined &&
|
|
17
|
-
!isSelected &&
|
|
18
|
-
'lg:hidden'), children: [levelIndicators.length > 0 && (_jsx("div", { className: 'absolute -top-6 left-0 z-10 w-full', children: _jsx("div", { className: 'flex items-center justify-center gap-2 text-left', children: levelIndicators.map((indicator, index) => (_jsx("span", { className: 'flex items-center', children: indicator }, `${level}-indicator-${index}`))) }) })), _jsxs("button", { type: 'button', onClick: () => onScoreChange(level), disabled: completed, "aria-pressed": isSelected, "aria-disabled": completed, "aria-label": `Select ${label} score level`, "aria-describedby": descriptionID, className: cn('flex h-full w-full flex-col justify-start rounded-lg border-2 p-3 text-left text-sm transition-all', !isSelected && 'hover:bg-gray-100 dark:hover:bg-gray-800', isSelected
|
|
14
|
+
const levelIndicators = showIndicators ? (indicators?.[level] ?? []) : [];
|
|
15
|
+
return (_jsxs("div", { className: cn('relative', hideUnselectedOnDesktop && selectedScore !== undefined && !isSelected && 'lg:hidden'), children: [levelIndicators.length > 0 && (_jsx("div", { className: 'absolute -top-6 left-0 z-10 w-full', children: _jsx("div", { className: 'flex items-center justify-center gap-2 text-left', children: levelIndicators.map((indicator, index) => (_jsx("span", { className: 'flex items-center', children: indicator }, `${level}-indicator-${index}`))) }) })), _jsxs("button", { type: 'button', onClick: () => onScoreChange(level), disabled: completed, "aria-pressed": isSelected, "aria-disabled": completed, "aria-label": `Select ${label} score level`, "aria-describedby": descriptionID, className: cn('flex h-full w-full flex-col justify-start rounded-lg border-2 p-3 text-left text-sm transition-all', !isSelected && 'hover:bg-gray-100 dark:hover:bg-gray-800', isSelected
|
|
19
16
|
? cn(config.textColor, config.selectedBg)
|
|
20
17
|
: 'bg-gray-50 dark:bg-gray-900', !completed && 'focus:ring-2 focus:ring-gray-400 focus:ring-offset-2', completed && 'cursor-not-allowed opacity-80', hasIndicators && 'mt-2', !selectedScore && config.border), children: [_jsxs("div", { className: 'mb-1 flex justify-between', children: [_jsx("span", { className: 'font-semibold', children: label }), completed && isSelected && (_jsx("span", { className: 'flex items-center gap-1', children: _jsx(LockIcon, { className: cn('h-4 w-4 text-muted-foreground', isSelected && 'dark:text-gray-200') }) }))] }), _jsx("p", { id: descriptionID, className: cn('line-clamp-3 text-muted-foreground', isSelected && 'dark:text-gray-200'), children: descriptionsByLevel[level] })] })] }, level));
|
|
21
18
|
}) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScoreLevelSelector.js","sourceRoot":"","sources":["../../src/components/ScoreLevelSelector.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAcjD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAiB,CAAA;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,aAAa,EACb,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,cAAc,GAAG,IAAI,EACrB,UAAU,EACV,uBAAuB,GAAG,IAAI,EAC9B,SAAS,GACe,EAAE,EAAE;IAC5B,MAAM,aAAa,GACjB,cAAc,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAEvF,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,YACtB,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;YACpC,MAAM,UAAU,GAAG,aAAa,KAAK,KAAK,CAAA;YAC1C,MAAM,aAAa,GAAG,eAAe,KAAK,cAAc,CAAA;YACxD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAA;YACpD,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"ScoreLevelSelector.js","sourceRoot":"","sources":["../../src/components/ScoreLevelSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Card, CardDescription, CardHeader, CardTitle, Collapsible, CollapsibleContent, CollapsibleTrigger, } from '../components';
|
|
3
|
+
import { ChevronRight } from 'lucide-react';
|
|
4
|
+
export function SettingsCard({ children, icon, title, description }) {
|
|
5
|
+
return (_jsx(Card, { className: 'w-full', children: _jsxs(Collapsible, { children: [_jsx(CollapsibleTrigger, { className: 'group w-full', children: _jsx(CardHeader, { className: 'py-3 px-4', children: _jsxs("div", { className: 'flex items-center gap-3', children: [_jsx("div", { className: 'p-2 bg-gray-50 dark:bg-gray-900/30 rounded-lg text-gray-600 dark:text-gray-400', children: icon }), _jsxs("div", { className: 'flex-1 text-left', children: [_jsx(CardTitle, { className: 'text-lg text-gray-900 dark:text-gray-100', children: title }), _jsx(CardDescription, { className: 'mt-1 text-gray-600 dark:text-gray-400', children: description })] }), _jsx(ChevronRight, { className: '\n h-4 w-4 text-gray-400\n transition-transform duration-200\n group-data-[state=open]:rotate-90\n ' })] }) }) }), _jsxs(CollapsibleContent, { children: [_jsx("hr", {}), _jsx("div", { className: 'pt-4', children: children })] })] }) }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=SettingsCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsCard.js","sourceRoot":"","sources":["../../src/components/SettingsCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,IAAI,EACJ,eAAe,EACf,UAAU,EACV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAQ3C,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAqB;IACpF,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,YACtB,MAAC,WAAW,eACV,KAAC,kBAAkB,IAAC,SAAS,EAAC,cAAc,YAC1C,KAAC,UAAU,IAAC,SAAS,EAAC,WAAW,YAC/B,eAAK,SAAS,EAAC,yBAAyB,aAEtC,cAAK,SAAS,EAAC,gFAAgF,YAC5F,IAAI,GACD,EAGN,eAAK,SAAS,EAAC,kBAAkB,aAC/B,KAAC,SAAS,IAAC,SAAS,EAAC,0CAA0C,YAAE,KAAK,GAAa,EACnF,KAAC,eAAe,IAAC,SAAS,EAAC,uCAAuC,YAC/D,WAAW,GACI,IACd,EAGN,KAAC,YAAY,IACX,SAAS,EAAC,uKAIT,GACD,IACE,GACK,GACM,EAErB,MAAC,kBAAkB,eACjB,cAAM,EACN,cAAK,SAAS,EAAC,MAAM,YAAE,QAAQ,GAAO,IACnB,IACT,GACT,CACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Link } from 'react-router-dom';
|
|
3
|
+
import { ProfilePicture } from './StudentProfilePicture';
|
|
4
|
+
export const StudentAvatar = ({ student }) => {
|
|
5
|
+
const avatar = (_jsxs(_Fragment, { children: [_jsx(ProfilePicture, { email: student.email, firstName: student.firstName, lastName: student.lastName, size: 'sm' }), _jsxs("span", { className: 'text-xs transition-colors', children: [student.firstName, " ", student.lastName] })] }));
|
|
6
|
+
return student.id ? (_jsx(Link, { to: `/management/students/${student.id}`, className: 'flex items-center gap-2 hover:text-blue-500', children: avatar })) : (avatar);
|
|
7
|
+
};
|
|
8
|
+
export const RenderStudents = ({ students, fallback, className = '', }) => {
|
|
9
|
+
return (_jsx("div", { className: className, children: students.length === 0 ? (fallback) : (_jsx("ul", { className: 'flex flex-wrap gap-x-2', children: students.map((student) => (_jsx("li", { children: _jsx(StudentAvatar, { student: student }) }, student.id ?? student.email))) })) }));
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=StudentAvatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudentAvatar.js","sourceRoot":"","sources":["../../src/components/StudentAvatar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAaxD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,OAAO,EAAsB,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,CACb,8BACE,KAAC,cAAc,IACb,KAAK,EAAE,OAAO,CAAC,KAAK,EACpB,SAAS,EAAE,OAAO,CAAC,SAAS,EAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,IAAI,EAAC,IAAI,GACT,EAEF,gBAAM,SAAS,EAAC,2BAA2B,aACxC,OAAO,CAAC,SAAS,OAAG,OAAO,CAAC,QAAQ,IAChC,IACN,CACJ,CAAA;IAED,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAClB,KAAC,IAAI,IACH,EAAE,EAAE,wBAAwB,OAAO,CAAC,EAAE,EAAE,EACxC,SAAS,EAAC,6CAA6C,YAEtD,MAAM,GACF,CACR,CAAC,CAAC,CAAC,CACF,MAAM,CACP,CAAA;AACH,CAAC,CAAA;AACD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,SAAS,GAAG,EAAE,GAKf,EAAE,EAAE;IACH,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,YACtB,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,QAAQ,CACT,CAAC,CAAC,CAAC,CACF,aAAI,SAAS,EAAC,wBAAwB,YACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,uBACE,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAI,IAD5B,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,KAAK,CAE/B,CACN,CAAC,GACC,CACN,GACG,CACP,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getGenderString, getStudyDegreeString, } from '@tumaet/prompt-shared-state';
|
|
3
|
+
import { Mail, Flag, Book, GraduationCap, Calendar, Hash, Users, KeyRound } from 'lucide-react';
|
|
4
|
+
import { Card, CardContent, CardHeader } from '../components';
|
|
5
|
+
import { getCountryName } from '../lib/getCountries';
|
|
6
|
+
import translations from '../lib/translations.json';
|
|
7
|
+
import { getStatusColor } from '../lib/getStatusColor';
|
|
8
|
+
import { ProfilePicture } from './StudentProfilePicture';
|
|
9
|
+
export const StudentProfile = ({ student, status }) => {
|
|
10
|
+
return (_jsxs(Card, { className: 'relative overflow-hidden', children: [_jsx("div", { className: `h-16 ${status ? getStatusColor(status) : 'bg-gray-100 dark:bg-muted'}` }), _jsx("div", { className: 'mb-4', children: _jsx(ProfilePicture, { email: student.email, firstName: student.firstName, lastName: student.lastName, size: 'lg', className: 'absolute border-4 border-background rounded-full transform left-3 -translate-y-1/2' }) }), _jsx(CardHeader, { children: _jsx("div", { className: 'flex flex-col sm:flex-row items-center', children: _jsxs("div", { className: 'flex-1 text-start sm:text-left', children: [_jsx("div", { className: 'flex flex-col items-start sm:items-start pt-6', children: _jsxs("h1", { className: 'text-2xl font-bold', children: [student.firstName, " ", student.lastName] }) }), _jsxs("div", { className: 'mt-2 grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-muted-foreground', children: [_jsxs("div", { className: 'space-y-1', children: [_jsxs("p", { className: 'flex items-center justify-center sm:justify-start', children: [_jsx(Mail, { className: 'w-4 h-4 mr-2' }), _jsx("span", { className: 'truncate', children: student.email })] }), student.nationality && (_jsxs("p", { className: 'flex items-center justify-center sm:justify-start', children: [_jsx(Flag, { className: 'w-4 h-4 mr-2' }), getCountryName(student.nationality)] })), student.gender && (_jsxs("p", { className: 'flex items-center justify-center sm:justify-start', children: [_jsx(Users, { className: 'w-4 h-4 mr-2' }), getGenderString(student.gender)] }))] }), _jsxs("div", { className: 'space-y-1', children: [student.universityLogin && (_jsxs("p", { className: 'flex items-center justify-center sm:justify-start', children: [_jsx(KeyRound, { className: 'w-4 h-4 mr-2' }), _jsxs("strong", { className: 'mr-1', children: [translations.university['login-name'], ":"] }), student.universityLogin] })), student.matriculationNumber && (_jsxs("p", { className: 'flex items-center justify-center sm:justify-start', children: [_jsx(Hash, { className: 'w-4 h-4 mr-2' }), _jsx("strong", { className: 'mr-1', children: "Matriculation:" }), student.matriculationNumber] }))] })] })] }) }) }), _jsx(CardContent, { children: _jsxs("div", { className: 'grid grid-cols-1 sm:grid-cols-3 gap-4 text-sm', children: [_jsxs("div", { className: 'flex items-center', children: [_jsx(Book, { className: 'w-5 h-5 mr-2 text-primary' }), _jsx("strong", { className: 'mr-2', children: "Program:" }), _jsx("span", { className: 'text-muted-foreground', children: student.studyProgram || 'N/A' })] }), _jsxs("div", { className: 'flex items-center', children: [_jsx(GraduationCap, { className: 'w-5 h-5 mr-2 text-primary' }), _jsx("strong", { className: 'mr-2', children: "Degree:" }), _jsx("span", { className: 'text-muted-foreground', children: getStudyDegreeString(student.studyDegree) || 'N/A' })] }), _jsxs("div", { className: 'flex items-center', children: [_jsx(Calendar, { className: 'w-5 h-5 mr-2 text-primary' }), _jsx("strong", { className: 'mr-2', children: "Semester:" }), _jsx("span", { className: 'text-muted-foreground', children: student.currentSemester || 'N/A' })] })] }) })] }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=StudentProfile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudentProfile.js","sourceRoot":"","sources":["../../src/components/StudentProfile.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Avatar, AvatarImage, AvatarFallback } from '../components';
|
|
3
|
+
import { getGravatarUrl } from '../lib/getGravatarUrl';
|
|
4
|
+
const sizeStyles = {
|
|
5
|
+
lg: 'h-24 w-24 text-xl',
|
|
6
|
+
md: 'h-10 w-10 text-sm',
|
|
7
|
+
sm: 'h-6 w-6 text-[0.7em]',
|
|
8
|
+
};
|
|
9
|
+
export function ProfilePicture({ email, firstName, lastName, size = 'md', className = '', }) {
|
|
10
|
+
const initials = (firstName?.charAt(0) || 'N') + (lastName?.charAt(0) || 'A');
|
|
11
|
+
return (_jsxs(Avatar, { className: `${sizeStyles[size]} ${className}`, children: [_jsx(AvatarImage, { src: getGravatarUrl(email), alt: lastName }), _jsx(AvatarFallback, { className: 'w-full h-full flex items-center justify-center font-bold', children: initials })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=StudentProfilePicture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudentProfilePicture.js","sourceRoot":"","sources":["../../src/components/StudentProfilePicture.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAIrD,MAAM,UAAU,GAA+B;IAC7C,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,mBAAmB;IACvB,EAAE,EAAE,sBAAsB;CAC3B,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,SAAS,EACT,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,EAAE,GAOf;IACC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IAE7E,OAAO,CACL,MAAC,MAAM,IAAC,SAAS,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,aACnD,KAAC,WAAW,IAAC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAI,EAC1D,KAAC,cAAc,IAAC,SAAS,EAAC,0DAA0D,YACjF,QAAQ,GACM,IACV,CACV,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Moon, Sun, Monitor } from 'lucide-react';
|
|
3
|
+
import { Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '../components';
|
|
4
|
+
import { useDarkMode } from '../contexts/DarkModeProvider';
|
|
5
|
+
export function ThemeToggle() {
|
|
6
|
+
const { theme, setTheme } = useDarkMode();
|
|
7
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: 'outline', size: 'icon', className: 'w-[120px]', children: [theme === 'light' && _jsx(Sun, { className: 'h-4 w-4' }), theme === 'dark' && _jsx(Moon, { className: 'h-4 w-4' }), theme === 'system' && _jsx(Monitor, { className: 'h-4 w-4' }), _jsx("span", { className: 'ml-2', children: theme?.charAt(0).toUpperCase() + theme?.slice(1) })] }) }), _jsxs(DropdownMenuContent, { align: 'end', children: [_jsxs(DropdownMenuItem, { onClick: () => setTheme('light'), children: [_jsx(Sun, { className: 'mr-2 h-4 w-4' }), _jsx("span", { children: "Light" })] }), _jsxs(DropdownMenuItem, { onClick: () => setTheme('dark'), children: [_jsx(Moon, { className: 'mr-2 h-4 w-4' }), _jsx("span", { children: "Dark" })] }), _jsxs(DropdownMenuItem, { onClick: () => setTheme('system'), children: [_jsx(Monitor, { className: 'mr-2 h-4 w-4' }), _jsx("span", { children: "System" })] })] })] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ThemeToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeToggle.js","sourceRoot":"","sources":["../../src/components/ThemeToggle.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEjD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAA;IAEzC,OAAO,CACL,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,MAAC,MAAM,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,aACxD,KAAK,KAAK,OAAO,IAAI,KAAC,GAAG,IAAC,SAAS,EAAC,SAAS,GAAG,EAChD,KAAK,KAAK,MAAM,IAAI,KAAC,IAAI,IAAC,SAAS,EAAC,SAAS,GAAG,EAChD,KAAK,KAAK,QAAQ,IAAI,KAAC,OAAO,IAAC,SAAS,EAAC,SAAS,GAAG,EACtD,eAAM,SAAS,EAAC,MAAM,YAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAQ,IACzE,GACW,EACtB,MAAC,mBAAmB,IAAC,KAAK,EAAC,KAAK,aAC9B,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,aAChD,KAAC,GAAG,IAAC,SAAS,EAAC,cAAc,GAAG,EAChC,mCAAkB,IACD,EACnB,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,aAC/C,KAAC,IAAI,IAAC,SAAS,EAAC,cAAc,GAAG,EACjC,kCAAiB,IACA,EACnB,MAAC,gBAAgB,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aACjD,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,GAAG,EACpC,oCAAmB,IACF,IACC,IACT,CAChB,CAAA;AACH,CAAC"}
|
package/dist/components/index.js
CHANGED
|
@@ -13,4 +13,30 @@ export * from './SaveChangesAlert';
|
|
|
13
13
|
export * from './ScoreLevelSelector';
|
|
14
14
|
export * from './UnauthorizedPage';
|
|
15
15
|
export * from './getLevelConfig';
|
|
16
|
+
export { default as DynamicIcon } from './DynamicIcon';
|
|
17
|
+
export * from './ExportedApplicationAnswerTable';
|
|
18
|
+
export * from './FileList';
|
|
19
|
+
export * from './FileUpload';
|
|
20
|
+
export * from './FilterBadge';
|
|
21
|
+
export * from './MissingConfig';
|
|
22
|
+
export * from './MissingSettings';
|
|
23
|
+
export * from './SettingsCard';
|
|
24
|
+
export * from './StudentAvatar';
|
|
25
|
+
export * from './StudentProfile';
|
|
26
|
+
export * from './StudentProfilePicture';
|
|
27
|
+
export * from './ThemeToggle';
|
|
28
|
+
export * from './pages/CoursePhaseParticipationsTable/CoursePhaseParticipationsTable';
|
|
29
|
+
export * from './pages/CoursePhaseParticipationsTable/table/participationActions';
|
|
30
|
+
export * from './pages/CoursePhaseParticipationsTable/table/participationColumns';
|
|
31
|
+
export * from './pages/CoursePhaseParticipationsTable/table/participationFilters';
|
|
32
|
+
export * from './pages/CoursePhaseParticipationsTable/table/participationRow';
|
|
33
|
+
export * from './pages/CoursePhaseParticipationsTable/utils/downloadParticipations';
|
|
34
|
+
export * from './pages/CoursePhaseParticipationsTable/utils/updateBatch';
|
|
35
|
+
export * from './pages/Mailing/CoursePhaseMailing';
|
|
36
|
+
export * from './pages/Mailing/components/AvailableMailPlaceholders';
|
|
37
|
+
export * from './pages/Mailing/components/ConfirmSendEmailDialog';
|
|
38
|
+
export * from './pages/Mailing/components/MailingEditor';
|
|
39
|
+
export * from './pages/Mailing/components/ManualMailSending';
|
|
40
|
+
export { SettingsCard as MailingSettingsCard } from './pages/Mailing/components/SettingsCard';
|
|
41
|
+
export * from './table/GroupActionDialog';
|
|
16
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAA;AACpB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAA;AACpB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,cAAc,kCAAkC,CAAA;AAChD,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,uEAAuE,CAAA;AACrF,cAAc,mEAAmE,CAAA;AACjF,cAAc,mEAAmE,CAAA;AACjF,cAAc,mEAAmE,CAAA;AACjF,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qEAAqE,CAAA;AACnF,cAAc,0DAA0D,CAAA;AACxE,cAAc,oCAAoC,CAAA;AAClD,cAAc,sDAAsD,CAAA;AACpE,cAAc,mDAAmD,CAAA;AACjE,cAAc,0CAA0C,CAAA;AACxD,cAAc,8CAA8C,CAAA;AAC5D,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAC7F,cAAc,2BAA2B,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-shadow */
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import { BubbleMenu } from '@tiptap/react';
|
|
4
|
+
import { BubbleMenu } from '@tiptap/react/menus';
|
|
5
5
|
import { LinkEditBlock } from '../link/link-edit-block';
|
|
6
6
|
import { LinkPopoverBlock } from '../link/link-popover-block';
|
|
7
7
|
export const LinkBubbleMenu = ({ editor }) => {
|
|
@@ -57,9 +57,9 @@ export const LinkBubbleMenu = ({ editor }) => {
|
|
|
57
57
|
setShowEdit(false);
|
|
58
58
|
updateLinkState();
|
|
59
59
|
}, [editor, updateLinkState]);
|
|
60
|
-
return (_jsx(BubbleMenu, { editor: editor, shouldShow: shouldShow,
|
|
60
|
+
return (_jsx(BubbleMenu, { editor: editor, shouldShow: shouldShow, options: {
|
|
61
61
|
placement: 'bottom-start',
|
|
62
|
-
|
|
62
|
+
onHide: () => setShowEdit(false),
|
|
63
63
|
}, children: showEdit ? (_jsx(LinkEditBlock, { defaultUrl: linkAttrs.href, defaultText: selectedText, defaultIsNewTab: linkAttrs.target === '_blank', onSave: onSetLink, className: 'w-full min-w-80 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none' })) : (_jsx(LinkPopoverBlock, { onClear: onUnsetLink, url: linkAttrs.href, onEdit: handleEdit })) }));
|
|
64
64
|
};
|
|
65
65
|
//# sourceMappingURL=link-bubble-menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-bubble-menu.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.tsx"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"link-bubble-menu.js","sourceRoot":"","sources":["../../../../../src/components/minimal-tiptap/components/bubble-menu/link-bubble-menu.tsx"],"names":[],"mappings":"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"}
|