@dbcdk/react-components 0.0.125 → 0.0.127

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/dist/client.cjs CHANGED
@@ -14,6 +14,7 @@ var Tabs = require('./components/tabs/Tabs');
14
14
  var Headline = require('./components/headline/Headline');
15
15
  var CollapsibleHeadline = require('./components/headline/CollapsibleHeadline');
16
16
  var PageLayout = require('./components/page-layout/PageLayout');
17
+ var EnvironmentBanner = require('./components/environment-banner/EnvironmentBanner');
17
18
  var Footer = require('./components/page-layout/components/footer/Footer');
18
19
  var Input = require('./components/forms/input/Input');
19
20
  var SearchBox = require('./components/search-box/SearchBox');
@@ -168,6 +169,12 @@ Object.keys(PageLayout).forEach(function (k) {
168
169
  get: function () { return PageLayout[k]; }
169
170
  });
170
171
  });
172
+ Object.keys(EnvironmentBanner).forEach(function (k) {
173
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
174
+ enumerable: true,
175
+ get: function () { return EnvironmentBanner[k]; }
176
+ });
177
+ });
171
178
  Object.keys(Footer).forEach(function (k) {
172
179
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
173
180
  enumerable: true,
package/dist/client.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from './components/tabs/Tabs';
11
11
  export * from './components/headline/Headline';
12
12
  export * from './components/headline/CollapsibleHeadline';
13
13
  export * from './components/page-layout/PageLayout';
14
+ export * from './components/environment-banner/EnvironmentBanner';
14
15
  export * from './components/page-layout/components/footer/Footer';
15
16
  export * from './components/forms/input/Input';
16
17
  export * from './components/search-box/SearchBox';
package/dist/client.js CHANGED
@@ -12,6 +12,7 @@ export * from './components/tabs/Tabs';
12
12
  export * from './components/headline/Headline';
13
13
  export * from './components/headline/CollapsibleHeadline';
14
14
  export * from './components/page-layout/PageLayout';
15
+ export * from './components/environment-banner/EnvironmentBanner';
15
16
  export * from './components/page-layout/components/footer/Footer';
16
17
  export * from './components/forms/input/Input';
17
18
  export * from './components/search-box/SearchBox';
@@ -107,7 +107,7 @@
107
107
  /* Status variants */
108
108
 
109
109
  .neutral {
110
- --chip-bg: var(--color-bg-toolbar);
110
+ --chip-bg: var(--color-neutral);
111
111
  --chip-fg: var(--color-fg-default);
112
112
  --chip-border: transparent;
113
113
  --chip-outlined-border: var(--color-border-subtle);
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var styles = require('./EnvironmentBanner.module.css');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var styles__default = /*#__PURE__*/_interopDefault(styles);
9
+
10
+ const PRESETS = {
11
+ production: { label: "Produktionsmilj\xF8", severity: "success" },
12
+ staging: { label: "Staging-milj\xF8", severity: "warning" },
13
+ test: { label: "Test-milj\xF8", severity: "info" }
14
+ };
15
+ function EnvironmentBanner(props) {
16
+ const { label, severity } = props.environment != null ? PRESETS[props.environment] : { label: props.customLabel, severity: props.customSeverity };
17
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.banner, "data-severity": severity, role: "status", "aria-label": label, children: label });
18
+ }
19
+
20
+ exports.EnvironmentBanner = EnvironmentBanner;
@@ -0,0 +1,13 @@
1
+ import type { JSX } from 'react';
2
+ import type { Severity } from '../../constants/severity.types';
3
+ export type Environment = 'production' | 'staging' | 'test';
4
+ export type EnvironmentBannerProps = {
5
+ environment: Environment;
6
+ customLabel?: never;
7
+ customSeverity?: never;
8
+ } | {
9
+ environment?: never;
10
+ customLabel: string;
11
+ customSeverity: Severity;
12
+ };
13
+ export declare function EnvironmentBanner(props: EnvironmentBannerProps): JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import styles from './EnvironmentBanner.module.css';
3
+
4
+ const PRESETS = {
5
+ production: { label: "Produktionsmilj\xF8", severity: "success" },
6
+ staging: { label: "Staging-milj\xF8", severity: "warning" },
7
+ test: { label: "Test-milj\xF8", severity: "info" }
8
+ };
9
+ function EnvironmentBanner(props) {
10
+ const { label, severity } = props.environment != null ? PRESETS[props.environment] : { label: props.customLabel, severity: props.customSeverity };
11
+ return /* @__PURE__ */ jsx("div", { className: styles.banner, "data-severity": severity, role: "status", "aria-label": label, children: label });
12
+ }
13
+
14
+ export { EnvironmentBanner };
@@ -0,0 +1,49 @@
1
+ .banner {
2
+ --env-banner-bg: var(--color-bg-toolbar);
3
+ --env-banner-fg: var(--color-fg-default);
4
+
5
+ display: flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ width: 100%;
9
+ padding-block: var(--spacing-2xs);
10
+ padding-inline: var(--spacing-md);
11
+ background-color: var(--env-banner-bg);
12
+ color: var(--env-banner-fg);
13
+
14
+ font-size: var(--font-size-xs);
15
+ font-weight: var(--font-weight-semibold);
16
+ text-transform: uppercase;
17
+ line-height: var(--line-height-normal);
18
+ user-select: none;
19
+ }
20
+
21
+ .banner[data-severity='success'] {
22
+ --env-banner-bg: var(--color-status-success);
23
+ --env-banner-fg: var(--color-status-success-bg);
24
+ }
25
+
26
+ .banner[data-severity='warning'] {
27
+ --env-banner-bg: var(--color-status-warning);
28
+ --env-banner-fg: var(--color-status-warning-bg);
29
+ }
30
+
31
+ .banner[data-severity='error'] {
32
+ --env-banner-bg: var(--color-status-error);
33
+ --env-banner-fg: var(--color-status-error-bg);
34
+ }
35
+
36
+ .banner[data-severity='info'] {
37
+ --env-banner-bg: var(--color-status-info);
38
+ --env-banner-fg: var(--color-status-info-bg);
39
+ }
40
+
41
+ .banner[data-severity='brand'] {
42
+ --env-banner-bg: var(--color-brand);
43
+ --env-banner-fg: var(--color-fg-on-brand);
44
+ }
45
+
46
+ .banner[data-severity='neutral'] {
47
+ --env-banner-bg: var(--color-neutral);
48
+ --env-banner-fg: var(--color-fg-default);
49
+ }
@@ -35,6 +35,12 @@ function splitSlots(children) {
35
35
  });
36
36
  return { slots, rest };
37
37
  }
38
+ const PageLayoutBanner = ({
39
+ children
40
+ }) => {
41
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
42
+ };
43
+ PageLayoutBanner.__PAGE_LAYOUT_SLOT__ = "Banner";
38
44
  const PageLayoutSidebar = ({
39
45
  children
40
46
  }) => {
@@ -73,9 +79,11 @@ const PageLayoutBase = ({
73
79
  const rootClass = [
74
80
  styles__default.default.root,
75
81
  orientation === "vertical" ? styles__default.default.vertical : styles__default.default.horizontal,
76
- containScrolling ? styles__default.default.containScrolling : styles__default.default.documentScrolling
82
+ containScrolling ? styles__default.default.containScrolling : styles__default.default.documentScrolling,
83
+ slots.Banner ? styles__default.default.hasBanner : ""
77
84
  ].filter(Boolean).join(" ");
78
85
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: rootClass, children: [
86
+ slots.Banner ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.banner, children: slots.Banner }) : null,
79
87
  slots.Sidebar ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.sidebar, children: slots.Sidebar }) : null,
80
88
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: styles__default.default.mainColumn, children: [
81
89
  slots.Header ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: styles__default.default.header, children: slots.Header }) : null,
@@ -88,6 +96,7 @@ const PageLayoutBase = ({
88
96
  ] });
89
97
  };
90
98
  const PageLayout = Object.assign(PageLayoutBase, {
99
+ Banner: PageLayoutBanner,
91
100
  Sidebar: PageLayoutSidebar,
92
101
  Header: PageLayoutHeader,
93
102
  Content: PageLayoutContent,
@@ -22,10 +22,14 @@ export interface PageLayoutFooterProps {
22
22
  maxWidth?: PageLayoutMaxWidth;
23
23
  children: ReactNode;
24
24
  }
25
+ export interface PageLayoutBannerProps {
26
+ children: ReactNode;
27
+ }
25
28
  export interface PageLayoutSidebarProps {
26
29
  children: ReactNode;
27
30
  }
28
31
  export declare const PageLayout: FC<PageLayoutProps> & {
32
+ Banner: FC<PageLayoutBannerProps>;
29
33
  Sidebar: FC<PageLayoutSidebarProps>;
30
34
  Header: FC<PageLayoutHeaderProps>;
31
35
  Content: FC<PageLayoutContentProps>;
@@ -29,6 +29,12 @@ function splitSlots(children) {
29
29
  });
30
30
  return { slots, rest };
31
31
  }
32
+ const PageLayoutBanner = ({
33
+ children
34
+ }) => {
35
+ return /* @__PURE__ */ jsx(Fragment, { children });
36
+ };
37
+ PageLayoutBanner.__PAGE_LAYOUT_SLOT__ = "Banner";
32
38
  const PageLayoutSidebar = ({
33
39
  children
34
40
  }) => {
@@ -67,9 +73,11 @@ const PageLayoutBase = ({
67
73
  const rootClass = [
68
74
  styles.root,
69
75
  orientation === "vertical" ? styles.vertical : styles.horizontal,
70
- containScrolling ? styles.containScrolling : styles.documentScrolling
76
+ containScrolling ? styles.containScrolling : styles.documentScrolling,
77
+ slots.Banner ? styles.hasBanner : ""
71
78
  ].filter(Boolean).join(" ");
72
79
  return /* @__PURE__ */ jsxs("div", { className: rootClass, children: [
80
+ slots.Banner ? /* @__PURE__ */ jsx("div", { className: styles.banner, children: slots.Banner }) : null,
73
81
  slots.Sidebar ? /* @__PURE__ */ jsx("div", { className: styles.sidebar, children: slots.Sidebar }) : null,
74
82
  /* @__PURE__ */ jsxs("div", { className: styles.mainColumn, children: [
75
83
  slots.Header ? /* @__PURE__ */ jsx("div", { className: styles.header, children: slots.Header }) : null,
@@ -82,6 +90,7 @@ const PageLayoutBase = ({
82
90
  ] });
83
91
  };
84
92
  const PageLayout = Object.assign(PageLayoutBase, {
93
+ Banner: PageLayoutBanner,
85
94
  Sidebar: PageLayoutSidebar,
86
95
  Header: PageLayoutHeader,
87
96
  Content: PageLayoutContent,
@@ -31,6 +31,18 @@
31
31
  grid-template-columns: minmax(0, 1fr);
32
32
  }
33
33
 
34
+ /* Banner: spans both sidebar and main columns */
35
+ .banner {
36
+ grid-column: 1 / -1;
37
+ min-width: 0;
38
+ flex: 0 0 auto;
39
+ }
40
+
41
+ /* In contained mode, allocate banner height then give the rest to sidebar+main */
42
+ .containScrolling.hasBanner {
43
+ grid-template-rows: auto 1fr;
44
+ }
45
+
34
46
  /* Sidebar */
35
47
  .sidebar {
36
48
  min-width: 0;
@@ -136,6 +148,10 @@
136
148
  overflow: visible;
137
149
  }
138
150
 
151
+ .vertical .content {
152
+ padding: var(--spacing-lg) var(--spacing-md);
153
+ }
154
+
139
155
  .footer {
140
156
  min-width: 0;
141
157
  background: var(--color-bg-surface-subtle);
package/dist/index.css CHANGED
@@ -18,6 +18,7 @@
18
18
  @import './components/code-block/CodeBlock.module.css';
19
19
  @import './components/copy-button/CopyButton.module.css';
20
20
  @import './components/datetime-picker/DateTimePicker.module.css';
21
+ @import './components/environment-banner/EnvironmentBanner.module.css';
21
22
  @import './components/filter-field/FilterField.module.css';
22
23
  @import './components/filtering/chip-multi-toggle/ChipMultiToggle.module.css';
23
24
  @import './components/forms/checkbox-group/CheckboxGroup.module.css';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbcdk/react-components",
3
- "version": "0.0.125",
3
+ "version": "0.0.127",
4
4
  "description": "Reusable React components for DBC projects",
5
5
  "license": "ISC",
6
6
  "author": "",