@public-ui/sample-react 1.7.0-rc.5
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/.eslintignore +1 -0
- package/.eslintrc.js +27 -0
- package/.gitignore +41 -0
- package/.prettierignore +4 -0
- package/package.json +66 -0
- package/prettier.config.js +6 -0
- package/public/index.html +28 -0
- package/src/App.tsx +259 -0
- package/src/declare.d.ts +4 -0
- package/src/main.ts +7 -0
- package/src/react.main.tsx +56 -0
- package/src/routes-test.ts +79 -0
- package/src/samples/abbr/basic.html +6 -0
- package/src/samples/abbr/basic.tsx +39 -0
- package/src/samples/abbr/routes.ts +9 -0
- package/src/samples/accordion/basic.tsx +18 -0
- package/src/samples/accordion/header.tsx +17 -0
- package/src/samples/accordion/headlines.tsx +27 -0
- package/src/samples/accordion/list.tsx +32 -0
- package/src/samples/accordion/routes.ts +17 -0
- package/src/samples/alert/basic.tsx +37 -0
- package/src/samples/alert/card-msg.tsx +11 -0
- package/src/samples/alert/html.tsx +29 -0
- package/src/samples/alert/routes.ts +15 -0
- package/src/samples/avatar/basic.tsx +10 -0
- package/src/samples/avatar/routes.ts +8 -0
- package/src/samples/badge/basic.tsx +18 -0
- package/src/samples/badge/button.tsx +25 -0
- package/src/samples/badge/routes.ts +12 -0
- package/src/samples/breadcrumb/basic.tsx +53 -0
- package/src/samples/breadcrumb/routes.ts +9 -0
- package/src/samples/button/basic.tsx +29 -0
- package/src/samples/button/hide-label.tsx +31 -0
- package/src/samples/button/icons.tsx +27 -0
- package/src/samples/button/routes.ts +18 -0
- package/src/samples/button/width.tsx +30 -0
- package/src/samples/button-group/basic.tsx +13 -0
- package/src/samples/button-group/routes.ts +9 -0
- package/src/samples/button-link/basic.tsx +23 -0
- package/src/samples/button-link/icons.tsx +37 -0
- package/src/samples/button-link/image.tsx +14 -0
- package/src/samples/button-link/routes.ts +18 -0
- package/src/samples/button-link/target.tsx +16 -0
- package/src/samples/card/basic.tsx +12 -0
- package/src/samples/card/confirm.tsx +19 -0
- package/src/samples/card/flex.tsx +44 -0
- package/src/samples/card/routes.ts +18 -0
- package/src/samples/card/selection.tsx +70 -0
- package/src/samples/details/basic.tsx +19 -0
- package/src/samples/details/routes.ts +9 -0
- package/src/samples/form/routes.ts +5 -0
- package/src/samples/handout/basic.tsx +1013 -0
- package/src/samples/handout/routes.ts +9 -0
- package/src/samples/heading/badged.tsx +27 -0
- package/src/samples/heading/basic.tsx +15 -0
- package/src/samples/heading/paragraph.tsx +45 -0
- package/src/samples/heading/routes.ts +15 -0
- package/src/samples/icon/basic.tsx +17 -0
- package/src/samples/icon/routes.ts +9 -0
- package/src/samples/indented-text/basic.tsx +24 -0
- package/src/samples/indented-text/routes.ts +9 -0
- package/src/samples/input-checkbox/basic.tsx +37 -0
- package/src/samples/input-checkbox/routes.ts +9 -0
- package/src/samples/input-color/basic.tsx +29 -0
- package/src/samples/input-color/routes.ts +9 -0
- package/src/samples/input-date/basic.tsx +20 -0
- package/src/samples/input-date/routes.ts +9 -0
- package/src/samples/input-email/basic.tsx +30 -0
- package/src/samples/input-email/routes.ts +9 -0
- package/src/samples/input-file/basic.tsx +25 -0
- package/src/samples/input-file/routes.ts +9 -0
- package/src/samples/input-number/basic.tsx +30 -0
- package/src/samples/input-number/routes.ts +9 -0
- package/src/samples/input-password/basic.tsx +41 -0
- package/src/samples/input-password/routes.ts +9 -0
- package/src/samples/input-radio/basic.tsx +46 -0
- package/src/samples/input-radio/horizontal.tsx +42 -0
- package/src/samples/input-radio/routes.ts +14 -0
- package/src/samples/input-radio/select.tsx +18 -0
- package/src/samples/input-range/basic.tsx +29 -0
- package/src/samples/input-range/routes.ts +9 -0
- package/src/samples/input-text/basic.tsx +72 -0
- package/src/samples/input-text/blur.tsx +16 -0
- package/src/samples/input-text/focus.tsx +24 -0
- package/src/samples/input-text/hidden-label.tsx +66 -0
- package/src/samples/input-text/routes.ts +16 -0
- package/src/samples/link/basic.tsx +23 -0
- package/src/samples/link/icons.tsx +37 -0
- package/src/samples/link/image.tsx +20 -0
- package/src/samples/link/routes.ts +18 -0
- package/src/samples/link/target.tsx +15 -0
- package/src/samples/link-button/basic.tsx +22 -0
- package/src/samples/link-button/routes.ts +9 -0
- package/src/samples/link-group/routes.ts +5 -0
- package/src/samples/nav/active.tsx +88 -0
- package/src/samples/nav/aria-current.tsx +22 -0
- package/src/samples/nav/basic.tsx +62 -0
- package/src/samples/nav/horizontal.tsx +59 -0
- package/src/samples/nav/routes.ts +18 -0
- package/src/samples/pagination/basic.tsx +12 -0
- package/src/samples/pagination/routes.ts +9 -0
- package/src/samples/popover/basic.tsx +36 -0
- package/src/samples/popover/routes.ts +8 -0
- package/src/samples/progress/basic.tsx +11 -0
- package/src/samples/progress/routes.ts +9 -0
- package/src/samples/select/basic.tsx +51 -0
- package/src/samples/select/routes.ts +9 -0
- package/src/samples/skip-nav/basic.tsx +33 -0
- package/src/samples/skip-nav/routes.ts +9 -0
- package/src/samples/spin/basic.tsx +6 -0
- package/src/samples/spin/custom.css +52 -0
- package/src/samples/spin/custom.tsx +11 -0
- package/src/samples/spin/cycle.tsx +6 -0
- package/src/samples/spin/routes.ts +13 -0
- package/src/samples/split-button/basic.tsx +46 -0
- package/src/samples/split-button/routes.ts +8 -0
- package/src/samples/table/badge-size.tsx +51 -0
- package/src/samples/table/render-cell.tsx +48 -0
- package/src/samples/table/routes.ts +15 -0
- package/src/samples/table/sort-date.tsx +33 -0
- package/src/samples/table/test-data.ts +66 -0
- package/src/samples/textarea/adjust-height.tsx +22 -0
- package/src/samples/textarea/basic.tsx +11 -0
- package/src/samples/textarea/disabled.tsx +10 -0
- package/src/samples/textarea/placeholder.tsx +10 -0
- package/src/samples/textarea/readonly.tsx +10 -0
- package/src/samples/textarea/resize.tsx +13 -0
- package/src/samples/textarea/routes.ts +27 -0
- package/src/samples/textarea/rows.tsx +10 -0
- package/src/samples/toast/basic.tsx +21 -0
- package/src/samples/toast/routes.ts +8 -0
- package/src/samples/version/basic.tsx +6 -0
- package/src/samples/version/context.tsx +12 -0
- package/src/samples/version/routes.ts +12 -0
- package/src/shares/constants.ts +2 -0
- package/src/shares/react-roots.ts +10 -0
- package/src/shares/routes.ts +87 -0
- package/src/shares/store.ts +85 -0
- package/src/shares/theme.ts +103 -0
- package/src/shares/types.ts +4 -0
- package/src/style.scss +89 -0
- package/test-build.sh +2 -0
- package/tsconfig.json +32 -0
- package/unocss.config.ts +7 -0
- package/webpack.config.js +14 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRoot, Root } from 'react-dom/client';
|
|
2
|
+
|
|
3
|
+
const REACT18_ROOTS = new WeakMap<Element | DocumentFragment, Root>();
|
|
4
|
+
|
|
5
|
+
export const getRoot = (el: Element | DocumentFragment): Root => {
|
|
6
|
+
if (REACT18_ROOTS.has(el) === false) {
|
|
7
|
+
REACT18_ROOTS.set(el, createRoot(el));
|
|
8
|
+
}
|
|
9
|
+
return REACT18_ROOTS.get(el) as Root;
|
|
10
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ABBR_ROUTES } from '../samples/abbr/routes';
|
|
2
|
+
import { ACCORDION_ROUTES } from '../samples/accordion/routes';
|
|
3
|
+
import { ALERT_ROUTES } from '../samples/alert/routes';
|
|
4
|
+
import { AVATAR_ROUTES } from '../samples/avatar/routes';
|
|
5
|
+
import { BADGE_ROUTES } from '../samples/badge/routes';
|
|
6
|
+
import { BREADCRUMB_ROUTES } from '../samples/breadcrumb/routes';
|
|
7
|
+
import { BUTTON_GROUP_ROUTES } from '../samples/button-group/routes';
|
|
8
|
+
import { BUTTON_LINK_ROUTES } from '../samples/button-link/routes';
|
|
9
|
+
import { BUTTON_ROUTES } from '../samples/button/routes';
|
|
10
|
+
import { CARD_ROUTES } from '../samples/card/routes';
|
|
11
|
+
import { DETAILS_ROUTES } from '../samples/details/routes';
|
|
12
|
+
import { FORM_ROUTES } from '../samples/form/routes';
|
|
13
|
+
import { HANDOUT_ROUTES } from '../samples/handout/routes';
|
|
14
|
+
import { HEADING_ROUTES } from '../samples/heading/routes';
|
|
15
|
+
import { ICON_ROUTES } from '../samples/icon/routes';
|
|
16
|
+
import { INDENTED_ROUTES } from '../samples/indented-text/routes';
|
|
17
|
+
import { INPUT_CHECKBOX_ROUTES } from '../samples/input-checkbox/routes';
|
|
18
|
+
import { INPUT_COLOR_ROUTES } from '../samples/input-color/routes';
|
|
19
|
+
import { INPUT_DATE_ROUTES } from '../samples/input-date/routes';
|
|
20
|
+
import { INPUT_EMAIL_ROUTES } from '../samples/input-email/routes';
|
|
21
|
+
import { INPUT_FILE_ROUTES } from '../samples/input-file/routes';
|
|
22
|
+
import { INPUT_NUMBER_ROUTES } from '../samples/input-number/routes';
|
|
23
|
+
import { INPUT_PASSWORD_ROUTES } from '../samples/input-password/routes';
|
|
24
|
+
import { INPUT_RADIO_ROUTES } from '../samples/input-radio/routes';
|
|
25
|
+
import { INPUT_RANGE_ROUTES } from '../samples/input-range/routes';
|
|
26
|
+
import { INPUT_TEXT_ROUTES } from '../samples/input-text/routes';
|
|
27
|
+
import { LINK_BUTTON_ROUTES } from '../samples/link-button/routes';
|
|
28
|
+
import { LINK_GROUP_ROUTES } from '../samples/link-group/routes';
|
|
29
|
+
import { LINK_ROUTES } from '../samples/link/routes';
|
|
30
|
+
import { NAV_ROUTES } from '../samples/nav/routes';
|
|
31
|
+
import { PAGINATION_ROUTES } from '../samples/pagination/routes';
|
|
32
|
+
import { POPOVER_ROUTES } from '../samples/popover/routes';
|
|
33
|
+
import { PROGRESS_ROUTES } from '../samples/progress/routes';
|
|
34
|
+
import { SELECT_ROUTES } from '../samples/select/routes';
|
|
35
|
+
import { SKIP_NAV_ROUTES } from '../samples/skip-nav/routes';
|
|
36
|
+
import { SPIN_ROUTES } from '../samples/spin/routes';
|
|
37
|
+
import { SPLIT_BUTTON_ROUTES } from '../samples/split-button/routes';
|
|
38
|
+
import { TABLE_ROUTES } from '../samples/table/routes';
|
|
39
|
+
import { TEXTAREA_ROUTES } from '../samples/textarea/routes';
|
|
40
|
+
import { TOAST_ROUTES } from '../samples/toast/routes';
|
|
41
|
+
import { VERSION_ROUTES } from '../samples/version/routes';
|
|
42
|
+
import { Routes } from './types';
|
|
43
|
+
|
|
44
|
+
export const ROUTES: Routes = {
|
|
45
|
+
...HANDOUT_ROUTES,
|
|
46
|
+
...ABBR_ROUTES,
|
|
47
|
+
...ACCORDION_ROUTES,
|
|
48
|
+
...ALERT_ROUTES,
|
|
49
|
+
...AVATAR_ROUTES,
|
|
50
|
+
...BADGE_ROUTES,
|
|
51
|
+
...BREADCRUMB_ROUTES,
|
|
52
|
+
...BUTTON_ROUTES,
|
|
53
|
+
...BUTTON_LINK_ROUTES,
|
|
54
|
+
...BUTTON_GROUP_ROUTES,
|
|
55
|
+
...CARD_ROUTES,
|
|
56
|
+
...DETAILS_ROUTES,
|
|
57
|
+
...FORM_ROUTES,
|
|
58
|
+
...HEADING_ROUTES,
|
|
59
|
+
...ICON_ROUTES,
|
|
60
|
+
...INDENTED_ROUTES,
|
|
61
|
+
...INPUT_CHECKBOX_ROUTES,
|
|
62
|
+
...INPUT_COLOR_ROUTES,
|
|
63
|
+
...INPUT_DATE_ROUTES,
|
|
64
|
+
...INPUT_EMAIL_ROUTES,
|
|
65
|
+
...INPUT_FILE_ROUTES,
|
|
66
|
+
...INPUT_NUMBER_ROUTES,
|
|
67
|
+
...INPUT_PASSWORD_ROUTES,
|
|
68
|
+
...INPUT_RADIO_ROUTES,
|
|
69
|
+
...INPUT_RANGE_ROUTES,
|
|
70
|
+
...INPUT_TEXT_ROUTES,
|
|
71
|
+
...LINK_ROUTES,
|
|
72
|
+
...LINK_BUTTON_ROUTES,
|
|
73
|
+
...LINK_GROUP_ROUTES,
|
|
74
|
+
...NAV_ROUTES,
|
|
75
|
+
...PAGINATION_ROUTES,
|
|
76
|
+
...POPOVER_ROUTES,
|
|
77
|
+
...PROGRESS_ROUTES,
|
|
78
|
+
...SELECT_ROUTES,
|
|
79
|
+
...SELECT_ROUTES,
|
|
80
|
+
...SKIP_NAV_ROUTES,
|
|
81
|
+
...SPIN_ROUTES,
|
|
82
|
+
...SPLIT_BUTTON_ROUTES,
|
|
83
|
+
...TABLE_ROUTES,
|
|
84
|
+
...TEXTAREA_ROUTES,
|
|
85
|
+
...TOAST_ROUTES,
|
|
86
|
+
...VERSION_ROUTES,
|
|
87
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { isTheme, Store, Theme } from './theme';
|
|
2
|
+
import PackageJson from '../../node_modules/@public-ui/components/package.json';
|
|
3
|
+
import { THEME_OPTIONS } from './theme';
|
|
4
|
+
import { Option } from '@public-ui/components';
|
|
5
|
+
|
|
6
|
+
const STORE_IDENTIFIER = `public-ui.v${PackageJson.version}`;
|
|
7
|
+
|
|
8
|
+
class StaticStorage {
|
|
9
|
+
private readonly store: Map<string, string> = new Map();
|
|
10
|
+
|
|
11
|
+
public setItem(key: string, value: string) {
|
|
12
|
+
this.store.set(key, value);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public getItem(key: string) {
|
|
16
|
+
return this.store.get(key) || null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const STORE: Store = {
|
|
21
|
+
darkMode: false,
|
|
22
|
+
theme: 'itzbund',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
let STORAGE: Storage;
|
|
26
|
+
export function setStorage(storage: Storage) {
|
|
27
|
+
STORAGE = storage;
|
|
28
|
+
const RESTORE = STORAGE.getItem(STORE_IDENTIFIER);
|
|
29
|
+
try {
|
|
30
|
+
const store = JSON.parse(RESTORE as string) as Store;
|
|
31
|
+
if (typeof store === 'object' && store !== null) {
|
|
32
|
+
STORE.darkMode = store.darkMode === true;
|
|
33
|
+
if (isTheme(store.theme)) {
|
|
34
|
+
STORE.theme = store.theme;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
} catch (e) {
|
|
38
|
+
/* empty */
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
setStorage(new StaticStorage() as unknown as Storage);
|
|
42
|
+
|
|
43
|
+
const setStore = () => {
|
|
44
|
+
STORAGE.setItem(STORE_IDENTIFIER, JSON.stringify(STORE));
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const switchDarkMode = (mode: boolean) => {
|
|
48
|
+
const html = document.querySelector('html');
|
|
49
|
+
if (html) {
|
|
50
|
+
html.dataset.theme = mode ? 'dark' : 'light';
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
// ts-prune-ignore-next
|
|
55
|
+
export const setDarkMode = (value: boolean) => {
|
|
56
|
+
STORE.darkMode = value === true;
|
|
57
|
+
switchDarkMode(STORE.darkMode);
|
|
58
|
+
setStore();
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// ts-prune-ignore-next
|
|
62
|
+
export const getDarkMode = (): boolean => {
|
|
63
|
+
return STORE.darkMode === true;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const setTheme = (theme: Theme) => {
|
|
67
|
+
if (isTheme(theme)) {
|
|
68
|
+
STORE.theme = theme;
|
|
69
|
+
setStore();
|
|
70
|
+
} else {
|
|
71
|
+
throw new Error(`The theme identifier "${theme}" is not valid or an available option.`);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const getTheme = (): Theme => {
|
|
76
|
+
return `${STORE.theme}`;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export const getThemeName = (theme: Theme): string => {
|
|
80
|
+
if (isTheme(theme)) {
|
|
81
|
+
return THEME_OPTIONS.find((option) => (option as Option<Theme>).value === theme)?.label;
|
|
82
|
+
} else {
|
|
83
|
+
throw new Error(`The theme identifier "${theme}" is not valid or an available option.`);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { SelectOption } from '@public-ui/components';
|
|
2
|
+
|
|
3
|
+
export type Theme =
|
|
4
|
+
| 'bamf'
|
|
5
|
+
| 'bmf'
|
|
6
|
+
| 'by'
|
|
7
|
+
| 'bzst'
|
|
8
|
+
| 'default'
|
|
9
|
+
| 'desy-v1'
|
|
10
|
+
| 'desy-v2'
|
|
11
|
+
| 'ecl-ec'
|
|
12
|
+
| 'ecl-eu'
|
|
13
|
+
| 'itzbund'
|
|
14
|
+
| 'mapz'
|
|
15
|
+
| 'th'
|
|
16
|
+
| 'unstyled'
|
|
17
|
+
| 'zoll-v2';
|
|
18
|
+
|
|
19
|
+
export const isTheme = (value: unknown) => {
|
|
20
|
+
return (
|
|
21
|
+
typeof value === 'string' &&
|
|
22
|
+
(value === 'unstyled' ||
|
|
23
|
+
value === 'bamf' ||
|
|
24
|
+
value === 'bmf' ||
|
|
25
|
+
value === 'by' ||
|
|
26
|
+
value === 'bzst' ||
|
|
27
|
+
value === 'default' ||
|
|
28
|
+
value === 'desy-v1' ||
|
|
29
|
+
value === 'desy-v2' ||
|
|
30
|
+
value === 'ecl-ec' ||
|
|
31
|
+
value === 'ecl-eu' ||
|
|
32
|
+
value === 'itzbund' ||
|
|
33
|
+
value === 'mapz' ||
|
|
34
|
+
value === 'th' ||
|
|
35
|
+
value === 'zoll-v2')
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type Store = {
|
|
40
|
+
darkMode: boolean;
|
|
41
|
+
theme: Theme;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const THEME_OPTIONS: SelectOption<Theme>[] = [
|
|
45
|
+
{
|
|
46
|
+
label: 'Unstyled',
|
|
47
|
+
value: 'unstyled',
|
|
48
|
+
},
|
|
49
|
+
// {
|
|
50
|
+
// disabled: true,
|
|
51
|
+
// label: 'Bundesamt für Migration und Flüchtlinge',
|
|
52
|
+
// value: 'bamf',
|
|
53
|
+
// },
|
|
54
|
+
{
|
|
55
|
+
label: 'Bundesministerium der Finanzen',
|
|
56
|
+
value: 'bmf',
|
|
57
|
+
},
|
|
58
|
+
// {
|
|
59
|
+
// label: 'Freistaat Bayern (StMWi)',
|
|
60
|
+
// value: 'by',
|
|
61
|
+
// },
|
|
62
|
+
{
|
|
63
|
+
label: 'Bundesamt für Zoll und Steuern',
|
|
64
|
+
value: 'bzst',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
label: 'Default',
|
|
68
|
+
value: 'default',
|
|
69
|
+
},
|
|
70
|
+
// {
|
|
71
|
+
// disabled: true,
|
|
72
|
+
// label: 'DESY-Styleguide (v1)',
|
|
73
|
+
// value: 'desy-v1',
|
|
74
|
+
// },
|
|
75
|
+
{
|
|
76
|
+
label: 'DESY-Styleguide (v2)',
|
|
77
|
+
value: 'desy-v2',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
label: 'European Commission (ECL)',
|
|
81
|
+
value: 'ecl-ec',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: 'European Union (ECL)',
|
|
85
|
+
value: 'ecl-eu',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
label: 'Informationstechnikzentrum Bund',
|
|
89
|
+
value: 'itzbund',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
label: 'MAPZoll-Styleguide',
|
|
93
|
+
value: 'mapz',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
label: 'Freistaat Thüringen',
|
|
97
|
+
value: 'th',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
label: 'Design System Zoll (v2)',
|
|
101
|
+
value: 'zoll-v2',
|
|
102
|
+
},
|
|
103
|
+
];
|
package/src/style.scss
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
dl,
|
|
2
|
+
hr {
|
|
3
|
+
margin: 0;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.w-4rem {
|
|
7
|
+
width: 4rem;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.w-8rem {
|
|
11
|
+
width: 8rem;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.w-12rem {
|
|
15
|
+
width: 12rem;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.grid-cols-2 {
|
|
19
|
+
grid-template-columns: auto auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.toolbar {
|
|
23
|
+
grid-template-columns: auto 1fr auto 1fr auto;
|
|
24
|
+
place-items: center;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.toolbar kol-button[_label="Zurück"] {
|
|
28
|
+
order: 1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.toolbar dl {
|
|
32
|
+
order: 2;
|
|
33
|
+
display: flex;
|
|
34
|
+
gap: 0.5em;
|
|
35
|
+
justify-self: start;
|
|
36
|
+
place-items: center;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.toolbar dd {
|
|
40
|
+
margin: 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.toolbar kol-select {
|
|
44
|
+
order: 3;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.toolbar kol-button[_label="Weiter"] {
|
|
48
|
+
order: 4;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@media only screen and (max-width: 1024px) {
|
|
52
|
+
.toolbar {
|
|
53
|
+
display: grid;
|
|
54
|
+
gap: 1rem;
|
|
55
|
+
grid-template-columns: 1fr 1fr;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.toolbar kol-button[_label="Zurück"] {
|
|
59
|
+
order: 3;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.toolbar dl {
|
|
63
|
+
order: 1;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.toolbar kol-select {
|
|
67
|
+
order: 2;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.toolbar kol-button[_label="Weiter"] {
|
|
71
|
+
order: 4;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@media only screen and (max-width: 512px) {
|
|
76
|
+
|
|
77
|
+
.toolbar dl,
|
|
78
|
+
.toolbar kol-select {
|
|
79
|
+
grid-column: span 2;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@media print {
|
|
84
|
+
|
|
85
|
+
.no-print,
|
|
86
|
+
.no-print * {
|
|
87
|
+
display: none !important;
|
|
88
|
+
}
|
|
89
|
+
}
|
package/test-build.sh
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"experimentalDecorators": true,
|
|
4
|
+
"pretty": true,
|
|
5
|
+
"target": "ESNext",
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"preserveConstEnums": true,
|
|
8
|
+
"sourceMap": true,
|
|
9
|
+
"preserveSymlinks": true,
|
|
10
|
+
"moduleResolution": "node",
|
|
11
|
+
"lib": ["es2017", "dom"],
|
|
12
|
+
"types": ["@public-ui/components", "mocha", "node", "react", "react-dom"],
|
|
13
|
+
"typeRoots": ["node_modules/@types", "src/types"],
|
|
14
|
+
"noUnusedLocals": true,
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"noEmit": true,
|
|
17
|
+
"skipLibCheck": true,
|
|
18
|
+
"noUnusedParameters": true,
|
|
19
|
+
"noImplicitReturns": true,
|
|
20
|
+
"noFallthroughCasesInSwitch": true,
|
|
21
|
+
"forceConsistentCasingInFileNames": true,
|
|
22
|
+
"importHelpers": true,
|
|
23
|
+
"removeComments": true,
|
|
24
|
+
"strict": true,
|
|
25
|
+
"allowSyntheticDefaultImports": true,
|
|
26
|
+
"jsx": "react",
|
|
27
|
+
"jsxFactory": "React.createElement",
|
|
28
|
+
"jsxFragmentFactory": "React.Fragment"
|
|
29
|
+
},
|
|
30
|
+
"include": ["src/**/*", "tests/**/*", "node_modules/@leanup/**/*", "decs.d.ts"],
|
|
31
|
+
"exclude": ["node_modules/@leanup/**/template/**/*"]
|
|
32
|
+
}
|
package/unocss.config.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const webpack = require('webpack');
|
|
2
|
+
|
|
3
|
+
module.exports = (...args) => {
|
|
4
|
+
const config = require('@leanup/stack-react/webpack.config')(...args);
|
|
5
|
+
const UnoCSS = require('@unocss/webpack').default;
|
|
6
|
+
config.plugins.push(UnoCSS());
|
|
7
|
+
config.plugins.push(
|
|
8
|
+
new webpack.EnvironmentPlugin({
|
|
9
|
+
THEME_MODULE: '',
|
|
10
|
+
THEME_EXPORT: '',
|
|
11
|
+
}),
|
|
12
|
+
);
|
|
13
|
+
return config;
|
|
14
|
+
};
|