@public-ui/sample-react 2.1.1 → 2.1.3

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 (229) hide show
  1. package/dist/{1353.js → 1069.js} +2 -2
  2. package/dist/{8185.js → 1085.js} +2 -2
  3. package/dist/{9244.js → 1184.js} +2 -2
  4. package/dist/1204.js +2 -0
  5. package/dist/1222.js +2 -0
  6. package/dist/1278.js +2 -0
  7. package/dist/1325.js +2 -0
  8. package/dist/1333.js +2 -0
  9. package/dist/{5185.js → 1661.js} +2 -2
  10. package/dist/1703.js +2 -0
  11. package/dist/{4091.js → 1711.js} +2 -2
  12. package/dist/1792.js +2 -0
  13. package/dist/1793.js +2 -0
  14. package/dist/{1602.js → 1878.js} +2 -2
  15. package/dist/1957.js +2 -0
  16. package/dist/2305.js +2 -0
  17. package/dist/2471.js +2 -0
  18. package/dist/2538.js +2 -0
  19. package/dist/279.js +2 -0
  20. package/dist/2830.js +2 -0
  21. package/dist/3180.js +2 -0
  22. package/dist/{7944.js → 3332.js} +2 -2
  23. package/dist/{7090.js → 3454.js} +2 -2
  24. package/dist/3596.js +2 -0
  25. package/dist/3714.js +2 -0
  26. package/dist/3797.js +2 -0
  27. package/dist/3974.js +2 -0
  28. package/dist/{5226.js → 3990.js} +2 -2
  29. package/dist/{4322.js → 4014.js} +2 -2
  30. package/dist/{4178.js → 4102.js} +2 -2
  31. package/dist/4218.js +2 -0
  32. package/dist/{9283.js → 4303.js} +2 -2
  33. package/dist/4404.js +2 -0
  34. package/dist/453.js +2 -0
  35. package/dist/4941.js +2 -0
  36. package/dist/500.js +2 -0
  37. package/dist/{8911.js → 5139.js} +2 -2
  38. package/dist/5164.js +2 -0
  39. package/dist/5365.js +2 -0
  40. package/dist/{9800.js → 5540.js} +2 -2
  41. package/dist/5756.js +2 -0
  42. package/dist/6393.js +2 -0
  43. package/dist/6682.js +2 -0
  44. package/dist/6781.js +2 -0
  45. package/dist/{2680.js → 7100.js} +2 -2
  46. package/dist/{6681.js → 7245.js} +2 -2
  47. package/dist/7263.js +2 -0
  48. package/dist/7512.js +2 -0
  49. package/dist/7856.js +2 -0
  50. package/dist/7909.js +2 -0
  51. package/dist/8002.js +2 -0
  52. package/dist/8189.js +2 -0
  53. package/dist/8264.js +2 -0
  54. package/dist/8384.js +2 -0
  55. package/dist/8389.js +2 -0
  56. package/dist/{5687.js → 8515.js} +2 -2
  57. package/dist/{7785.js → 8557.js} +2 -2
  58. package/dist/8588.js +2 -0
  59. package/dist/8724.js +2 -0
  60. package/dist/882.js +2 -0
  61. package/dist/8823.js +2 -0
  62. package/dist/{9268.js → 8890.js} +2 -2
  63. package/dist/8921.js +2 -0
  64. package/dist/895.js +2 -0
  65. package/dist/{6629.js → 8993.js} +2 -2
  66. package/dist/902.js +2 -0
  67. package/dist/{9171.js → 9175.js} +2 -2
  68. package/dist/9202.js +2 -0
  69. package/dist/9833.js +2 -0
  70. package/dist/9961.js +2 -0
  71. package/dist/main.css +1 -1
  72. package/dist/main.js +1 -1
  73. package/dist/main.js.LICENSE.txt +2 -2
  74. package/package.json +17 -17
  75. package/src/App.tsx +2 -0
  76. package/src/components/FormWrap.tsx +2 -5
  77. package/src/components/Sidebar.tsx +12 -8
  78. package/src/components/button/basic.tsx +2 -3
  79. package/src/components/form/basic.tsx +19 -0
  80. package/src/components/form/error-list.tsx +26 -0
  81. package/src/components/form/routes.ts +6 -1
  82. package/src/components/handout/basic.tsx +0 -7
  83. package/src/components/input-password/show-password.tsx +3 -41
  84. package/src/components/input-text/routes.ts +0 -2
  85. package/src/components/pagination/basic.tsx +2 -2
  86. package/src/components/table/routes.ts +2 -0
  87. package/src/components/table/stateful-with-selection.tsx +78 -0
  88. package/src/components/tabs/basic.tsx +5 -0
  89. package/src/components/types.tsx +0 -17
  90. package/src/scenarios/focus-elements.tsx +140 -0
  91. package/src/scenarios/inputs-get-value.tsx +2 -1
  92. package/src/scenarios/routes.ts +2 -0
  93. package/src/shares/routes.ts +0 -2
  94. package/webpack.config.js +3 -0
  95. package/dist/1011.js +0 -2
  96. package/dist/1174.js +0 -2
  97. package/dist/142.js +0 -2
  98. package/dist/1423.js +0 -2
  99. package/dist/1499.js +0 -2
  100. package/dist/1600.js +0 -2
  101. package/dist/1847.js +0 -2
  102. package/dist/1990.js +0 -2
  103. package/dist/21.js +0 -2
  104. package/dist/2268.js +0 -2
  105. package/dist/2385.js +0 -2
  106. package/dist/2602.js +0 -2
  107. package/dist/2872.js +0 -2
  108. package/dist/310.js +0 -2
  109. package/dist/3129.js +0 -2
  110. package/dist/356.js +0 -2
  111. package/dist/372.js +0 -2
  112. package/dist/3793.js +0 -2
  113. package/dist/3830.js +0 -2
  114. package/dist/4185.js +0 -2
  115. package/dist/4222.js +0 -2
  116. package/dist/4258.js +0 -2
  117. package/dist/4504.js +0 -2
  118. package/dist/4774.js +0 -2
  119. package/dist/4913.js +0 -2
  120. package/dist/5445.js +0 -2
  121. package/dist/5527.js +0 -2
  122. package/dist/5672.js +0 -2
  123. package/dist/5797.js +0 -2
  124. package/dist/5817.js +0 -2
  125. package/dist/5893.js +0 -2
  126. package/dist/5896.js +0 -2
  127. package/dist/61.js +0 -2
  128. package/dist/6200.js +0 -2
  129. package/dist/6670.js +0 -2
  130. package/dist/6717.js +0 -2
  131. package/dist/682.js +0 -2
  132. package/dist/6856.js +0 -2
  133. package/dist/6916.js +0 -2
  134. package/dist/742.js +0 -2
  135. package/dist/7483.js +0 -2
  136. package/dist/7890.js +0 -2
  137. package/dist/7977.js +0 -2
  138. package/dist/8157.js +0 -2
  139. package/dist/8320.js +0 -2
  140. package/dist/8691.js +0 -2
  141. package/dist/8730.js +0 -2
  142. package/dist/8780.js +0 -2
  143. package/dist/8881.js +0 -2
  144. package/dist/9091.js +0 -2
  145. package/dist/9560.js +0 -2
  146. package/dist/9560.js.LICENSE.txt +0 -3
  147. package/dist/968.js +0 -2
  148. package/dist/968.js.LICENSE.txt +0 -3
  149. package/dist/9800.js.LICENSE.txt +0 -3
  150. package/dist/9836.js +0 -2
  151. package/dist/9836.js.LICENSE.txt +0 -3
  152. package/dist/9913.js +0 -2
  153. package/dist/9913.js.LICENSE.txt +0 -3
  154. package/dist/9947.js +0 -2
  155. package/dist/9947.js.LICENSE.txt +0 -3
  156. package/src/components/FocusInput.tsx +0 -23
  157. package/src/components/input-text/focus.tsx +0 -33
  158. package/src/components/logo/basic.tsx +0 -15
  159. package/src/components/logo/routes.ts +0 -8
  160. /package/dist/{1011.js.LICENSE.txt → 1069.js.LICENSE.txt} +0 -0
  161. /package/dist/{1174.js.LICENSE.txt → 1085.js.LICENSE.txt} +0 -0
  162. /package/dist/{1353.js.LICENSE.txt → 1184.js.LICENSE.txt} +0 -0
  163. /package/dist/{142.js.LICENSE.txt → 1204.js.LICENSE.txt} +0 -0
  164. /package/dist/{1423.js.LICENSE.txt → 1222.js.LICENSE.txt} +0 -0
  165. /package/dist/{1499.js.LICENSE.txt → 1278.js.LICENSE.txt} +0 -0
  166. /package/dist/{1600.js.LICENSE.txt → 1325.js.LICENSE.txt} +0 -0
  167. /package/dist/{1602.js.LICENSE.txt → 1333.js.LICENSE.txt} +0 -0
  168. /package/dist/{1847.js.LICENSE.txt → 1661.js.LICENSE.txt} +0 -0
  169. /package/dist/{1990.js.LICENSE.txt → 1703.js.LICENSE.txt} +0 -0
  170. /package/dist/{21.js.LICENSE.txt → 1711.js.LICENSE.txt} +0 -0
  171. /package/dist/{2268.js.LICENSE.txt → 1792.js.LICENSE.txt} +0 -0
  172. /package/dist/{2385.js.LICENSE.txt → 1793.js.LICENSE.txt} +0 -0
  173. /package/dist/{2602.js.LICENSE.txt → 1878.js.LICENSE.txt} +0 -0
  174. /package/dist/{2680.js.LICENSE.txt → 1957.js.LICENSE.txt} +0 -0
  175. /package/dist/{2872.js.LICENSE.txt → 2305.js.LICENSE.txt} +0 -0
  176. /package/dist/{310.js.LICENSE.txt → 2471.js.LICENSE.txt} +0 -0
  177. /package/dist/{3129.js.LICENSE.txt → 2538.js.LICENSE.txt} +0 -0
  178. /package/dist/{356.js.LICENSE.txt → 279.js.LICENSE.txt} +0 -0
  179. /package/dist/{372.js.LICENSE.txt → 2830.js.LICENSE.txt} +0 -0
  180. /package/dist/{3793.js.LICENSE.txt → 3180.js.LICENSE.txt} +0 -0
  181. /package/dist/{3830.js.LICENSE.txt → 3332.js.LICENSE.txt} +0 -0
  182. /package/dist/{4091.js.LICENSE.txt → 3454.js.LICENSE.txt} +0 -0
  183. /package/dist/{4178.js.LICENSE.txt → 3596.js.LICENSE.txt} +0 -0
  184. /package/dist/{4185.js.LICENSE.txt → 3714.js.LICENSE.txt} +0 -0
  185. /package/dist/{4222.js.LICENSE.txt → 3797.js.LICENSE.txt} +0 -0
  186. /package/dist/{4258.js.LICENSE.txt → 3974.js.LICENSE.txt} +0 -0
  187. /package/dist/{4322.js.LICENSE.txt → 3990.js.LICENSE.txt} +0 -0
  188. /package/dist/{4504.js.LICENSE.txt → 4014.js.LICENSE.txt} +0 -0
  189. /package/dist/{4774.js.LICENSE.txt → 4102.js.LICENSE.txt} +0 -0
  190. /package/dist/{4913.js.LICENSE.txt → 4218.js.LICENSE.txt} +0 -0
  191. /package/dist/{5185.js.LICENSE.txt → 4303.js.LICENSE.txt} +0 -0
  192. /package/dist/{5226.js.LICENSE.txt → 4404.js.LICENSE.txt} +0 -0
  193. /package/dist/{5445.js.LICENSE.txt → 453.js.LICENSE.txt} +0 -0
  194. /package/dist/{5527.js.LICENSE.txt → 4941.js.LICENSE.txt} +0 -0
  195. /package/dist/{5672.js.LICENSE.txt → 500.js.LICENSE.txt} +0 -0
  196. /package/dist/{5687.js.LICENSE.txt → 5139.js.LICENSE.txt} +0 -0
  197. /package/dist/{5797.js.LICENSE.txt → 5164.js.LICENSE.txt} +0 -0
  198. /package/dist/{5817.js.LICENSE.txt → 5365.js.LICENSE.txt} +0 -0
  199. /package/dist/{5893.js.LICENSE.txt → 5540.js.LICENSE.txt} +0 -0
  200. /package/dist/{5896.js.LICENSE.txt → 5756.js.LICENSE.txt} +0 -0
  201. /package/dist/{61.js.LICENSE.txt → 6393.js.LICENSE.txt} +0 -0
  202. /package/dist/{6200.js.LICENSE.txt → 6682.js.LICENSE.txt} +0 -0
  203. /package/dist/{6629.js.LICENSE.txt → 6781.js.LICENSE.txt} +0 -0
  204. /package/dist/{6670.js.LICENSE.txt → 7100.js.LICENSE.txt} +0 -0
  205. /package/dist/{6681.js.LICENSE.txt → 7245.js.LICENSE.txt} +0 -0
  206. /package/dist/{6717.js.LICENSE.txt → 7263.js.LICENSE.txt} +0 -0
  207. /package/dist/{682.js.LICENSE.txt → 7512.js.LICENSE.txt} +0 -0
  208. /package/dist/{6856.js.LICENSE.txt → 7856.js.LICENSE.txt} +0 -0
  209. /package/dist/{6916.js.LICENSE.txt → 7909.js.LICENSE.txt} +0 -0
  210. /package/dist/{7090.js.LICENSE.txt → 8002.js.LICENSE.txt} +0 -0
  211. /package/dist/{742.js.LICENSE.txt → 8189.js.LICENSE.txt} +0 -0
  212. /package/dist/{7483.js.LICENSE.txt → 8264.js.LICENSE.txt} +0 -0
  213. /package/dist/{7785.js.LICENSE.txt → 8384.js.LICENSE.txt} +0 -0
  214. /package/dist/{7890.js.LICENSE.txt → 8389.js.LICENSE.txt} +0 -0
  215. /package/dist/{7944.js.LICENSE.txt → 8515.js.LICENSE.txt} +0 -0
  216. /package/dist/{7977.js.LICENSE.txt → 8557.js.LICENSE.txt} +0 -0
  217. /package/dist/{8157.js.LICENSE.txt → 8588.js.LICENSE.txt} +0 -0
  218. /package/dist/{8185.js.LICENSE.txt → 8724.js.LICENSE.txt} +0 -0
  219. /package/dist/{8320.js.LICENSE.txt → 882.js.LICENSE.txt} +0 -0
  220. /package/dist/{8691.js.LICENSE.txt → 8823.js.LICENSE.txt} +0 -0
  221. /package/dist/{8730.js.LICENSE.txt → 8890.js.LICENSE.txt} +0 -0
  222. /package/dist/{8780.js.LICENSE.txt → 8921.js.LICENSE.txt} +0 -0
  223. /package/dist/{8881.js.LICENSE.txt → 895.js.LICENSE.txt} +0 -0
  224. /package/dist/{8911.js.LICENSE.txt → 8993.js.LICENSE.txt} +0 -0
  225. /package/dist/{9091.js.LICENSE.txt → 902.js.LICENSE.txt} +0 -0
  226. /package/dist/{9171.js.LICENSE.txt → 9175.js.LICENSE.txt} +0 -0
  227. /package/dist/{9244.js.LICENSE.txt → 9202.js.LICENSE.txt} +0 -0
  228. /package/dist/{9268.js.LICENSE.txt → 9833.js.LICENSE.txt} +0 -0
  229. /package/dist/{9283.js.LICENSE.txt → 9961.js.LICENSE.txt} +0 -0
@@ -33,7 +33,7 @@
33
33
  */
34
34
 
35
35
  /**
36
- * @remix-run/router v1.16.0
36
+ * @remix-run/router v1.17.0
37
37
  *
38
38
  * Copyright (c) Remix Software Inc.
39
39
  *
@@ -44,7 +44,7 @@
44
44
  */
45
45
 
46
46
  /**
47
- * React Router v6.23.0
47
+ * React Router v6.24.0
48
48
  *
49
49
  * Copyright (c) Remix Software Inc.
50
50
  *
package/package.json CHANGED
@@ -1,37 +1,37 @@
1
1
  {
2
2
  "name": "@public-ui/sample-react",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "This app contains samples for the KoliBri/Public UI",
5
5
  "license": "EUPL-1.2",
6
6
  "dependencies": {
7
- "@leanup/stack": "1.3.50",
8
- "@leanup/stack-react": "1.3.50",
9
- "@leanup/stack-webpack": "1.3.50",
7
+ "@leanup/stack": "1.3.54",
8
+ "@leanup/stack-react": "1.3.54",
9
+ "@leanup/stack-webpack": "1.3.54",
10
10
  "@types/node": "ts5.4",
11
- "@types/react": "18.3.1",
11
+ "@types/react": "18.3.3",
12
12
  "@types/react-dom": "18.3.0",
13
13
  "@unocss/preset-uno": "0.58.9",
14
14
  "@unocss/webpack": "0.58.9",
15
- "ajv": "8.12.0",
16
- "chromedriver": "124.0.1",
15
+ "ajv": "8.16.0",
16
+ "chromedriver": "124.0.4",
17
17
  "cpy-cli": "5.0.0",
18
- "eslint-plugin-jsx-a11y": "6.8.0",
19
- "eslint-plugin-react": "7.34.1",
18
+ "eslint-plugin-jsx-a11y": "6.9.0",
19
+ "eslint-plugin-react": "7.34.3",
20
20
  "formik": "2.4.6",
21
- "nightwatch-axe-verbose": "2.3.0",
21
+ "nightwatch-axe-verbose": "2.3.1",
22
22
  "npm-run-all": "4.1.5",
23
23
  "react": "18.3.1",
24
24
  "react-dom": "18.3.1",
25
- "react-router": "6.23.0",
26
- "react-router-dom": "6.23.0",
27
- "rimraf": "5.0.5",
25
+ "react-router": "6.24.0",
26
+ "react-router-dom": "6.24.0",
27
+ "rimraf": "5.0.7",
28
28
  "ts-prune": "0.10.3",
29
- "typescript": "5.4.5",
29
+ "typescript": "5.5.2",
30
30
  "world_countries_lists": "2.9.0",
31
31
  "yup": "1.4.0",
32
- "@public-ui/components": "2.1.1",
33
- "@public-ui/themes": "2.1.1",
34
- "@public-ui/react": "2.1.1"
32
+ "@public-ui/react": "2.1.3",
33
+ "@public-ui/components": "2.1.3",
34
+ "@public-ui/themes": "2.1.3"
35
35
  },
36
36
  "files": [
37
37
  ".eslintignore",
package/src/App.tsx CHANGED
@@ -132,6 +132,8 @@ export const App: FC = () => {
132
132
  sample={routerLocation.pathname}
133
133
  routes={ROUTES}
134
134
  routeList={ROUTE_LIST}
135
+ buildDate={process.env.BUILD_DATE}
136
+ commitHash={process.env.COMMIT_HASH}
135
137
  onThemeChange={handleThemeChange}
136
138
  />
137
139
  )}
@@ -1,10 +1,7 @@
1
+ import type { FC } from 'react';
1
2
  import React from 'react';
2
3
 
3
4
  import { KolButton, KolForm } from '@public-ui/react';
4
-
5
- import { FocusElement } from './FocusInput';
6
-
7
- import type { FC } from 'react';
8
5
  import type { RefFormComponent } from './types';
9
6
 
10
7
  type FormWrapProps = {
@@ -14,7 +11,7 @@ type FormWrapProps = {
14
11
  export const FormWrap: FC<FormWrapProps> = (props) => (
15
12
  <KolForm>
16
13
  <div className="grid gap-4">
17
- <FocusElement {...props} />
14
+ <props.RefComponent {...props} />
18
15
  <div className="flex gap-4">
19
16
  <KolButton _label="Submit" _icons="codicon codicon-arrow-right" _type="submit" _variant="primary" />
20
17
  <KolButton
@@ -1,5 +1,5 @@
1
1
  import type { FC, PropsWithChildren } from 'react';
2
- import React, { useState } from 'react';
2
+ import React from 'react';
3
3
 
4
4
  import { KolAccordion, KolButton, KolHeading, KolLink, KolSelect, KolVersion } from '@public-ui/react';
5
5
 
@@ -13,6 +13,8 @@ type Props = {
13
13
  routes: Routes;
14
14
  routeList: string[];
15
15
  sample: string;
16
+ buildDate?: string;
17
+ commitHash?: string;
16
18
  onThemeChange: (theme: unknown) => void;
17
19
  };
18
20
 
@@ -24,20 +26,15 @@ const ComponentNavContainer = ({ children, isMobile }: PropsWithChildren<{ isMob
24
26
  ) : (
25
27
  <div className="mt">{children}</div>
26
28
  );
27
- export const Sidebar: FC<Props> = ({ version, theme, routes, routeList, sample, onThemeChange }) => {
29
+ export const Sidebar: FC<Props> = ({ version, theme, routes, routeList, sample, buildDate, commitHash, onThemeChange }) => {
28
30
  /* KolSelect calls onChange initially by design - work around this with a state variable */
29
- const [isFirstThemeSelectChange, setIsFirstThemeSelectChange] = useState(true);
30
31
  const isMobile = useMobile();
31
32
 
32
33
  const getIndexOfSample = () => routeList.indexOf(sample);
33
34
  const formatSampleAsLabel = () => sample.replace(/\//g, ' ');
34
35
 
35
36
  const handleThemeSelectChange = (_event: Event, value: unknown) => {
36
- if (isFirstThemeSelectChange) {
37
- setIsFirstThemeSelectChange(false);
38
- } else {
39
- onThemeChange((value as [string])[0]);
40
- }
37
+ onThemeChange((value as [string])[0]);
41
38
  };
42
39
 
43
40
  const handleLinkClick = (event: Event) => {
@@ -63,6 +60,13 @@ export const Sidebar: FC<Props> = ({ version, theme, routes, routeList, sample,
63
60
  <KolHeading _label="KoliBri React"></KolHeading>
64
61
  <KolVersion _label={version}></KolVersion>
65
62
  </div>
63
+ {(buildDate || commitHash) && (
64
+ <div className="text-sm font-mono color-gray-5 m-t-2">
65
+ {commitHash ? `Build: ${commitHash}` : ''}
66
+ <br />
67
+ {buildDate ? `at ${buildDate}` : ''}
68
+ </div>
69
+ )}
66
70
 
67
71
  <KolSelect _label="Theme wählen" _options={THEME_OPTIONS} _on={{ onChange: handleThemeSelectChange }} _value={[theme]} class="mt"></KolSelect>
68
72
 
@@ -1,7 +1,5 @@
1
1
  import type { FC } from 'react';
2
2
  import React from 'react';
3
-
4
- import { FocusElement } from '../FocusInput';
5
3
  import { ButtonVariants } from './partials/variants';
6
4
  import { SampleDescription } from '../SampleDescription';
7
5
 
@@ -10,6 +8,7 @@ export const ButtonBasic: FC = () => (
10
8
  <SampleDescription>
11
9
  <p>Hier sind anklickbare und nicht anklickbare Buttons. Es gibt außerdem Buttons mit Label und ohne Label.</p>
12
10
  </SampleDescription>
13
- <FocusElement RefComponent={ButtonVariants} />
11
+
12
+ <ButtonVariants />
14
13
  </>
15
14
  );
@@ -0,0 +1,19 @@
1
+ import type { FC } from 'react';
2
+ import React from 'react';
3
+ import { SampleDescription } from '../SampleDescription';
4
+ import { KolForm, KolInputText } from '@public-ui/react';
5
+
6
+ export const FormBasic: FC = () => (
7
+ <>
8
+ <SampleDescription>
9
+ <p>Dieses Beispiel zeigt ein Formular mit drei Eingabefeldern.</p>
10
+ </SampleDescription>
11
+ <KolForm>
12
+ <div className="grid gap-2">
13
+ <KolInputText id="input1" _label="Eingabe 1" />
14
+ <KolInputText id="input2" _label="Eingabe 2" />
15
+ <KolInputText id="input3" _label="Eingabe 3" />
16
+ </div>
17
+ </KolForm>
18
+ </>
19
+ );
@@ -0,0 +1,26 @@
1
+ import type { FC } from 'react';
2
+ import React from 'react';
3
+ import { SampleDescription } from '../SampleDescription';
4
+ import { KolForm, KolInputText } from '@public-ui/react';
5
+
6
+ export const FormErrorList: FC = () => (
7
+ <>
8
+ <SampleDescription>
9
+ <p>Dieses Beispiel zeigt ein Formular mit drei Eingabefeldern. Das zweite Eingabefeld enthält einen Fehler. </p>
10
+ </SampleDescription>
11
+ <KolForm
12
+ _errorList={[
13
+ {
14
+ message: 'Fehler in Eingabe 2',
15
+ selector: '#input2',
16
+ },
17
+ ]}
18
+ >
19
+ <div className="grid gap-2">
20
+ <KolInputText id="input1" _label="Eingabe 1" />
21
+ <KolInputText id="input2" _label="Eingabe 2" _touched _msg={{ _description: 'Fehlerhafte Eingabe', _type: 'error' }} />
22
+ <KolInputText id="input3" _label="Eingabe 3" />
23
+ </div>
24
+ </KolForm>
25
+ </>
26
+ );
@@ -1,5 +1,10 @@
1
1
  import { Routes } from '../../shares/types';
2
+ import { FormBasic } from './basic';
3
+ import { FormErrorList } from './error-list';
2
4
 
3
5
  export const FORM_ROUTES: Routes = {
4
- form: {},
6
+ form: {
7
+ basic: FormBasic,
8
+ 'error-list': FormErrorList,
9
+ },
5
10
  };
@@ -27,7 +27,6 @@ import {
27
27
  KolKolibri,
28
28
  KolLink,
29
29
  KolLinkButton,
30
- KolLogo,
31
30
  KolNav,
32
31
  KolProgress,
33
32
  KolSelect,
@@ -883,9 +882,6 @@ export const HandoutBasic: FC = () => (
883
882
  <p>
884
883
  Ich bin ein <KolLink _href="#/back-page" _label="externer Link" _target="w3c"></KolLink> im Fließtext.
885
884
  </p>
886
- <KolLink _href="#/back-page" _label="">
887
- <KolLogo slot="expert" class="inline-flex w-50" _org={Bundesanstalt['Informationstechnikzentrum Bund']} />
888
- </KolLink>
889
885
  </div>
890
886
  </KolAccordion>
891
887
  <KolAccordion _label="ButtonLinks" _level={3}>
@@ -896,9 +892,6 @@ export const HandoutBasic: FC = () => (
896
892
  <p>
897
893
  Ich bin ein <KolButtonLink _label="Link"></KolButtonLink> im Fließtext.
898
894
  </p>
899
- <KolButtonLink _label="">
900
- <KolLogo slot="expert" class="inline-flex w-50" _org={Bundesanstalt['Informationstechnikzentrum Bund']} />
901
- </KolButtonLink>
902
895
  <KolButtonLink
903
896
  _icons={{
904
897
  left: 'codicon codicon-arrow-left',
@@ -1,21 +1,11 @@
1
1
  import type { FC } from 'react';
2
- import React, { useEffect, useRef, useState } from 'react';
2
+ import React, { useRef } from 'react';
3
3
 
4
4
  import { KolForm, KolInputPassword } from '@public-ui/react';
5
5
  import { SampleDescription } from '../SampleDescription';
6
6
 
7
7
  export const InputPasswordShowPassword: FC = () => {
8
- const [isPasswordVisible, setIsPasswordVisible] = useState(false);
9
8
  const passwordRef = useRef<HTMLKolInputPasswordElement>(null);
10
- const handleTogglePasswordClick = () => {
11
- setIsPasswordVisible(!isPasswordVisible);
12
- };
13
- useEffect(() => {
14
- const input = passwordRef.current?.shadowRoot?.querySelector('input');
15
- if (input) {
16
- input.type = isPasswordVisible ? 'text' : 'password';
17
- }
18
- }, [isPasswordVisible]);
19
9
 
20
10
  return (
21
11
  <>
@@ -26,42 +16,14 @@ export const InputPasswordShowPassword: FC = () => {
26
16
  </p>
27
17
  </SampleDescription>
28
18
  <KolForm>
29
- <KolInputPassword
30
- _placeholder="Mit 'Passwort anzeigen' Button"
31
- _label="Passwort"
32
- ref={passwordRef}
33
- _smartButton={{
34
- _icons: {
35
- left: {
36
- icon: 'codicon codicon-eye',
37
- },
38
- },
39
- _hideLabel: true,
40
- _label: `Passwort ${isPasswordVisible ? 'ausblenden' : 'einblenden'}`,
41
- _on: {
42
- onClick: handleTogglePasswordClick,
43
- },
44
- }}
45
- className="block"
46
- />
19
+ <KolInputPassword _placeholder="Mit 'Passwort anzeigen' Button" _label="Passwort" ref={passwordRef} className="block" _variant="visibility-toggle" />
47
20
  <KolInputPassword
48
21
  _placeholder="Mit 'Passwort anzeigen' Button und disabled"
49
22
  _label="Passwort"
50
23
  ref={passwordRef}
51
- _smartButton={{
52
- _icons: {
53
- left: {
54
- icon: 'codicon codicon-eye',
55
- },
56
- },
57
- _hideLabel: true,
58
- _label: `Passwort ${isPasswordVisible ? 'ausblenden' : 'einblenden'}`,
59
- _on: {
60
- onClick: handleTogglePasswordClick,
61
- },
62
- }}
63
24
  className="block"
64
25
  _disabled
26
+ _variant="visibility-toggle"
65
27
  />
66
28
  </KolForm>
67
29
  </>
@@ -1,14 +1,12 @@
1
1
  import { Routes } from '../../shares/types';
2
2
  import { InputTextBasic } from './basic';
3
3
  import { InputTextBlur } from './blur';
4
- import { InputTextFocus } from './focus';
5
4
  import { InputTextHideErrors } from './hide-errors';
6
5
 
7
6
  export const INPUT_TEXT_ROUTES: Routes = {
8
7
  'input-text': {
9
8
  basic: InputTextBasic,
10
9
  blur: InputTextBlur,
11
- focus: InputTextFocus,
12
10
  'hide-errors': InputTextHideErrors,
13
11
  },
14
12
  };
@@ -13,8 +13,8 @@ export const PaginationBasic: FC = () => (
13
13
  </p>
14
14
  </SampleDescription>
15
15
  <div className="grid gap-4">
16
- <KolPagination _max={10} _page={6} _siblingCount={0} _label="Test Paginierung 1" _on={{}} />
17
- <KolPagination _max={6} _page={6} _siblingCount={0} _boundaryCount={2} _label="Test Paginierung 2" _on={{}} />
16
+ <KolPagination _max={316514} _page={15475} _siblingCount={3} _label="Test Paginierung 1" _on={{}} />
17
+ <KolPagination _max={14} _page={14} _siblingCount={1} _boundaryCount={2} _label="Test Paginierung 2" _on={{}} />
18
18
  <KolPagination _max={4} _page={1} _siblingCount={0} _boundaryCount={2} _label="Test Paginierung 3" _on={{}} />
19
19
  <KolPagination _max={4} _page={6} _siblingCount={0} _boundaryCount={2} _hasButtons={false} _label="Test Paginierung 4" _on={{}} />
20
20
  <KolPagination
@@ -8,6 +8,7 @@ import { TableRenderCell } from './render-cell';
8
8
  import { TableSortData } from './sort-data';
9
9
  import { TableStateless } from './stateless';
10
10
  import { TableWithFooter } from './with-footer';
11
+ import { TableStatefulWithSelection } from './stateful-with-selection';
11
12
  import { TableStatelessWithSelection } from './stateless-with-selection';
12
13
  import { TableWithPagination } from './with-pagination';
13
14
 
@@ -21,6 +22,7 @@ export const TABLE_ROUTES: Routes = {
21
22
  'render-cell': TableRenderCell,
22
23
  'sort-data': TableSortData,
23
24
  'with-footer': TableWithFooter,
25
+ 'stateful-with-selection': TableStatefulWithSelection,
24
26
  'stateless-with-selection': TableStatelessWithSelection,
25
27
  'with-pagination': TableWithPagination,
26
28
  stateless: TableStateless,
@@ -0,0 +1,78 @@
1
+ import type { FC } from 'react';
2
+ import React, { useEffect, useRef, useState } from 'react';
3
+ import { KolButton, KolTableStateful } from '@public-ui/react';
4
+ import { SampleDescription } from '../SampleDescription';
5
+ import type { KoliBriTableSelection } from '@public-ui/components';
6
+
7
+ const DATA = [
8
+ { id: '1001', name: 'Foo Bar' },
9
+ { id: '1002', name: 'Foo Baz' },
10
+ ];
11
+ type Data = (typeof DATA)[0];
12
+
13
+ export const TableStatefulWithSelection: FC = () => {
14
+ const [selectedValue, setSelectedValue] = useState<Data[]>();
15
+
16
+ const selection: KoliBriTableSelection = {
17
+ label: (row: Data) => `Selection for ${row.name}`,
18
+ selectedKeys: selectedValue ? selectedValue.map((element) => element.id) : [],
19
+ keyPropertyName: 'id',
20
+ };
21
+
22
+ const kolTableStatefulRef = useRef<HTMLKolTableStatefulElement>();
23
+
24
+ const handleSelectionChangeEvent = ({ detail: selection }) => {
25
+ console.log('Selection change via event', selection);
26
+ };
27
+ const handleSelectionChangeCallback = (_event, selection) => {
28
+ console.log('Selection change via callback', selection);
29
+ };
30
+
31
+ const handleButtonClick = async () => {
32
+ const selection = await kolTableStatefulRef.current?.getSelection();
33
+ setSelectedValue(selection);
34
+ };
35
+
36
+ useEffect(() => {
37
+ kolTableStatefulRef.current?.addEventListener('kol-selection-change', handleSelectionChangeEvent);
38
+
39
+ return () => {
40
+ kolTableStatefulRef.current?.removeEventListener('kol-selection-change', handleSelectionChangeEvent);
41
+ };
42
+ }, [kolTableStatefulRef]);
43
+
44
+ return (
45
+ <>
46
+ <SampleDescription>KolTableStateful with selection</SampleDescription>
47
+
48
+ <KolTableStateful
49
+ _label="Table with selection checkboxes"
50
+ _headers={{
51
+ horizontal: [
52
+ [
53
+ { key: 'id', label: '#ID', textAlign: 'left' },
54
+ { key: 'name', label: 'Name', textAlign: 'left' },
55
+ ],
56
+ ],
57
+ }}
58
+ _data={DATA}
59
+ _selection={selection}
60
+ _on={{ onSelectionChange: handleSelectionChangeCallback }}
61
+ className="block"
62
+ style={{ maxWidth: '600px' }}
63
+ ref={kolTableStatefulRef}
64
+ />
65
+ <div className="grid grid-cols-3 items-end gap-4 mt-4">
66
+ <KolButton
67
+ _label="getSelection()"
68
+ _on={{
69
+ onClick: () => {
70
+ void handleButtonClick();
71
+ },
72
+ }}
73
+ ></KolButton>
74
+ <pre>{JSON.stringify(selectedValue, null, 2)}</pre>
75
+ </div>
76
+ </>
77
+ );
78
+ };
@@ -8,6 +8,11 @@ const tabs = [
8
8
  {
9
9
  _icons: 'codicon codicon-pie-chart',
10
10
  _label: 'Erster Tab',
11
+ _on: {
12
+ onSelect: (event) => {
13
+ console.log('Erster Tab ausgewählt', event);
14
+ },
15
+ },
11
16
  },
12
17
  {
13
18
  _icons: 'codicon codicon-calendar',
@@ -1,6 +1,3 @@
1
- import { FormWrap } from './FormWrap';
2
-
3
- import type { ButtonVariants } from './button/partials/variants';
4
1
  import type { InputCheckboxVariants } from './input-checkbox/partials/variants';
5
2
  import type { InputColorVariants } from './input-color/partials/variants';
6
3
  import type { InputDateVariants } from './input-date/partials/variants';
@@ -27,17 +24,3 @@ export type RefFormComponent =
27
24
  | typeof InputTextVariants
28
25
  | typeof SelectVariants
29
26
  | typeof TextareaVariants;
30
-
31
- export type RefComponent =
32
- // | typeof AbbrVariants
33
- // | typeof AccordionVariants
34
- // | typeof AlertVariants
35
- | typeof ButtonVariants
36
- // | typeof ButtonLinkVariants
37
- // | typeof CardVariants
38
- // | typeof LinkVariants
39
- // | typeof LinkButtonVariants
40
- // | typeof PopoverVariants
41
- // | typeof SplitButtonVariants
42
- // | typeof TabsVariants
43
- | RefFormComponent;
@@ -0,0 +1,140 @@
1
+ import {
2
+ KolAccordion,
3
+ KolAlert,
4
+ KolButton,
5
+ KolButtonLink,
6
+ KolDetails,
7
+ KolInputCheckbox,
8
+ KolInputColor,
9
+ KolInputDate,
10
+ KolInputEmail,
11
+ KolInputFile,
12
+ KolInputNumber,
13
+ KolInputPassword,
14
+ KolInputRadio,
15
+ KolInputRange,
16
+ KolInputText,
17
+ KolLink,
18
+ KolLinkButton,
19
+ KolSelect,
20
+ KolTextarea,
21
+ } from '@public-ui/react';
22
+ import type { FC, ForwardRefRenderFunction } from 'react';
23
+ import { useMemo } from 'react';
24
+ import React, { forwardRef, useLayoutEffect, useRef } from 'react';
25
+ import { useSearchParams } from 'react-router-dom';
26
+
27
+ const getFocusElements = () => {
28
+ const focusElements = new Map<string, ForwardRefRenderFunction<any, any>>();
29
+ focusElements.set('inputCheckbox', (_, ref) => <KolInputCheckbox _name="checkbox" _label="Checkbox" ref={ref} />);
30
+ focusElements.set('inputColor', (_, ref) => <KolInputColor _name="color" _label="Color" ref={ref} />);
31
+ focusElements.set('inputDate', (_, ref) => <KolInputDate _name="date" _label="Date" ref={ref} />);
32
+ focusElements.set('inputEmail', (_, ref) => <KolInputEmail _name="email" _label="Email" ref={ref} />);
33
+ focusElements.set('inputFile', (_, ref) => <KolInputFile _name="file" _label="File" ref={ref} />);
34
+ focusElements.set('inputFileMultiple', (_, ref) => <KolInputFile _name="file" _label="Files (multiple)" _multiple ref={ref} />);
35
+ focusElements.set('inputNumber', (_, ref) => <KolInputNumber _name="number" _label="Number" ref={ref} />);
36
+ focusElements.set('inputPassword', (_, ref) => <KolInputPassword _name="password" _label="Password" ref={ref} />);
37
+ focusElements.set('inputRadio', (_, ref) => (
38
+ <KolInputRadio
39
+ _name="radio"
40
+ _label="Radio"
41
+ _options={[
42
+ { label: 'Option A', value: 'A' },
43
+ { label: 'Option B', value: 'B' },
44
+ ]}
45
+ _value="A"
46
+ ref={ref}
47
+ />
48
+ ));
49
+ focusElements.set('inputRange', (_, ref) => <KolInputRange _name="range" _label="Range" ref={ref} />);
50
+ focusElements.set('inputText', (_, ref) => <KolInputText _name="text" _label="Text" ref={ref} />);
51
+ focusElements.set('select', (_, ref) => (
52
+ <KolSelect
53
+ _name="select"
54
+ _label="Select"
55
+ _options={[
56
+ { label: 'Option A', value: 'A' },
57
+ { label: 'Option B', value: 'B' },
58
+ ]}
59
+ ref={ref}
60
+ />
61
+ ));
62
+ focusElements.set('selectMultiple', (_, ref) => (
63
+ <KolSelect
64
+ _name="select"
65
+ _label="Select (multiple)"
66
+ _multiple
67
+ _options={[
68
+ { label: 'Option A', value: 'A' },
69
+ { label: 'Option B', value: 'B' },
70
+ ]}
71
+ _rows={2}
72
+ ref={ref}
73
+ />
74
+ ));
75
+ focusElements.set('textarea', (_, ref) => <KolTextarea _name="textarea" _label="Textarea" _rows={5} ref={ref} />);
76
+ focusElements.set('accordion', (_, ref) => <KolAccordion _label="Accordion here" ref={ref} />);
77
+ focusElements.set('button', (_, ref) => <KolButton _label="Button here" ref={ref}></KolButton>);
78
+ focusElements.set('buttonLink', (_, ref) => <KolButtonLink _label="ButtonLink here" ref={ref}></KolButtonLink>);
79
+ focusElements.set('details', (_, ref) => (
80
+ <KolDetails _label="Details here" ref={ref}>
81
+ detailed details
82
+ </KolDetails>
83
+ ));
84
+ focusElements.set('link', (_, ref) => <KolLink _label="Link here" _href="#" ref={ref}></KolLink>);
85
+ focusElements.set('linkButton', (_, ref) => <KolLinkButton _label="LinkButton here" _href="#" ref={ref}></KolLinkButton>);
86
+
87
+ return focusElements;
88
+ };
89
+
90
+ type FallbackProps = {
91
+ invalidComponent?: boolean;
92
+ };
93
+ const Fallback = (props: FallbackProps) => {
94
+ const focusElements = useMemo(() => getFocusElements(), []);
95
+ const componentNames = [...focusElements.keys()].map((key) => key);
96
+
97
+ return (
98
+ <div>
99
+ {props.invalidComponent && (
100
+ <KolAlert _type="error" _variant="card">
101
+ Component not found.
102
+ </KolAlert>
103
+ )}
104
+
105
+ <h4>Focus Test Cases</h4>
106
+ <ul>
107
+ {componentNames.map((componentName) => (
108
+ <li key={componentName}>
109
+ <KolLink _label={componentName} _href={`#/scenarios/focus-elements?component=${componentName}`}></KolLink>
110
+ </li>
111
+ ))}
112
+ </ul>
113
+ </div>
114
+ );
115
+ };
116
+
117
+ export const FocusElements: FC = () => {
118
+ const ref = useRef(null);
119
+ const focusElements = useMemo(() => getFocusElements(), []);
120
+ const [searchParams] = useSearchParams();
121
+ const componentName = searchParams.get('component');
122
+
123
+ useLayoutEffect(() => {
124
+ setTimeout(() => {
125
+ (ref.current as unknown as HTMLElement)?.focus();
126
+ }, 500);
127
+ }, [ref]);
128
+
129
+ if (componentName) {
130
+ const Component = focusElements.get(componentName);
131
+ if (!Component) {
132
+ return <Fallback invalidComponent />;
133
+ }
134
+ const Element = forwardRef(Component);
135
+
136
+ return <Element ref={ref} />;
137
+ } else {
138
+ return <Fallback />;
139
+ }
140
+ };
@@ -105,7 +105,8 @@ export const InputsGetValue: FC = () => {
105
105
 
106
106
  <div className="grid gap-4">
107
107
  <Scenario InputComponent={KolInputText} inputProps={{ _label: 'InputText' }} />
108
- <Scenario InputComponent={KolInputCheckbox} inputProps={{ _label: 'KolInputCheckbox' }} />
108
+ <Scenario InputComponent={KolInputCheckbox} inputProps={{ _label: 'KolInputCheckbox (value)', _value: 'Checkbox True Value' }} />
109
+ <Scenario InputComponent={KolInputCheckbox} inputProps={{ _label: 'KolInputCheckbox (boolean)' }} />
109
110
  <Scenario InputComponent={KolInputColor} inputProps={{ _label: 'KolInputColor' }} />
110
111
  <Scenario InputComponent={KolInputDate} inputProps={{ _label: 'KolInputDate' }} />
111
112
  <Scenario InputComponent={KolInputEmail} inputProps={{ _label: 'KolInputEmail' }} />
@@ -4,6 +4,7 @@ import { CustomTooltipWidth } from './custom-tooltip-width';
4
4
  import { DisabledInteractiveElements } from './disabled-interactive-elements';
5
5
  import { InputsGetValue } from './inputs-get-value';
6
6
  import { StaticForm } from './static-form';
7
+ import { FocusElements } from './focus-elements';
7
8
 
8
9
  export const SCENARIO_ROUTES: Routes = {
9
10
  scenarios: {
@@ -12,5 +13,6 @@ export const SCENARIO_ROUTES: Routes = {
12
13
  'custom-tooltip-width': CustomTooltipWidth,
13
14
  'static-form': StaticForm,
14
15
  'disabled-interactive-scenario': DisabledInteractiveElements,
16
+ 'focus-elements': FocusElements,
15
17
  },
16
18
  };