@memobit/libs 3.2.0 → 3.4.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.
@@ -1,52 +1,57 @@
1
1
  import './MiniSort.css';
2
- import { Icon as t } from "../Icon/Icon2.js";
3
- import { Button as d } from "../Button/Button2.js";
4
- import { Tooltip as u } from "../Tooltip/Tooltip2.js";
2
+ import { Icon as u } from "../Icon/Icon2.js";
3
+ import { Button as f } from "../Button/Button2.js";
4
+ import { Tooltip as p } from "../Tooltip/Tooltip2.js";
5
5
  /* empty css */
6
6
  import "react";
7
- import { jsx as l, jsxs as b } from "react/jsx-runtime";
8
- var j = ({ items: e, sortKey: n, sortDirection: i, onSort: r, align: m = "left", showDirectionToggle: s = !1, className: v = "" }) => e.length === 0 ? null : /* @__PURE__ */ b("div", {
7
+ import { jsx as s, jsxs as z } from "react/jsx-runtime";
8
+ var B = ({ items: o, sortKey: i, sortDirection: n, onSort: v, align: _ = "left", showDirectionToggle: l = !1, className: $ = "" }) => o.length === 0 ? null : /* @__PURE__ */ z("div", {
9
9
  className: [
10
10
  "mini-sort",
11
- `mini-sort--align-${m}`,
12
- v
11
+ `mini-sort--align-${_}`,
12
+ $
13
13
  ].filter(Boolean).join(" "),
14
- children: [e.map((a, p) => {
15
- const c = a.direction ?? "asc", o = s ? n === a.value : n === a.value && i === c;
16
- return /* @__PURE__ */ l(u, {
17
- title: `Sort by ${typeof a.label == "string" || typeof a.label == "number" ? String(a.label) : a.value}${s ? "" : ` ${c === "asc" ? "ascending" : "descending"}`}`,
18
- children: /* @__PURE__ */ l(d, {
19
- className: `mini-sort__button${o ? " is-active" : ""}`,
14
+ children: [o.map((a, x) => {
15
+ const c = a.direction ?? "asc", t = i === a.value, r = !l && o.filter((m) => m.value === a.value).length === 1, e = l || r ? t : t && n === c, d = typeof a.label == "string" || typeof a.label == "number" ? String(a.label) : a.value, b = (m) => m === "asc" ? "ascending" : "descending", N = l ? t ? n : c : r && e ? n === "asc" ? "desc" : "asc" : c;
16
+ return /* @__PURE__ */ s(p, {
17
+ title: l ? `Sort by ${d}` : r && e ? `Sorted by ${d} ${b(n)} — click to reverse` : `Sort by ${d} ${b(c)}`,
18
+ children: /* @__PURE__ */ s(f, {
19
+ className: `mini-sort__button${e ? " is-active" : ""}`,
20
20
  disabled: a.disabled,
21
- icon: a.icon ? /* @__PURE__ */ l(t, {
21
+ icon: a.icon ? /* @__PURE__ */ s(u, {
22
22
  className: "mini-sort__icon",
23
23
  name: a.icon,
24
24
  size: "sm",
25
- variant: o ? "accent" : "muted"
25
+ variant: e ? "accent" : "muted"
26
+ }) : void 0,
27
+ sufixIcon: r && e ? /* @__PURE__ */ s(u, {
28
+ className: "mini-sort__icon",
29
+ name: n === "asc" ? "arrow-up" : "arrow-down",
30
+ size: "sm"
26
31
  }) : void 0,
27
32
  size: "small",
28
33
  variant: "ghost",
29
- onClick: () => r(a.value, s && n === a.value ? i : c),
34
+ onClick: () => v(a.value, N),
30
35
  children: a.label ?? a.value
31
36
  })
32
- }, `${a.value}-${p}`);
33
- }), s && /* @__PURE__ */ l(u, {
34
- title: `Direction: ${i === "asc" ? "ascending" : "descending"}`,
35
- children: /* @__PURE__ */ l(d, {
37
+ }, `${a.value}-${x}`);
38
+ }), l && /* @__PURE__ */ s(p, {
39
+ title: `Direction: ${n === "asc" ? "ascending" : "descending"}`,
40
+ children: /* @__PURE__ */ s(f, {
36
41
  className: "mini-sort__button mini-sort__direction",
37
- disabled: n === null,
38
- icon: /* @__PURE__ */ l(t, {
42
+ disabled: i === null,
43
+ icon: /* @__PURE__ */ s(u, {
39
44
  className: "mini-sort__icon",
40
- name: i === "asc" ? "arrow-up" : "arrow-down",
45
+ name: n === "asc" ? "arrow-up" : "arrow-down",
41
46
  size: "sm",
42
47
  variant: "accent"
43
48
  }),
44
49
  size: "small",
45
50
  variant: "ghost",
46
- onClick: () => n !== null && r(n, i === "asc" ? "desc" : "asc")
51
+ onClick: () => i !== null && v(i, n === "asc" ? "desc" : "asc")
47
52
  })
48
53
  })]
49
54
  });
50
55
  export {
51
- j as MiniSort
56
+ B as MiniSort
52
57
  };
@@ -1 +1 @@
1
- .NotificationPanel{position:relative}.NotificationPanel__button{align-items:center;gap:var(--spacing-8);border:1px solid var(--border-color);border-radius:var(--radius);background:var(--card-background-color);color:var(--body-title-color);padding:var(--spacing-8) var(--spacing-12);cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);display:inline-flex}.NotificationPanel__button--critical{border-color:color-mix(in srgb, var(--button-danger-border-color) 55%, var(--border-color));background:color-mix(in srgb, var(--button-danger-border-color) 12%, transparent)}.NotificationPanel__badge{min-width:var(--spacing-20);height:var(--spacing-20);border-radius:var(--radius-full);font-size:var(--font-size-xs);background:var(--button-danger-background-color);color:var(--button-danger-color);padding:0 var(--spacing-4);justify-content:center;align-items:center;display:inline-flex}.NotificationPanel__backdrop{z-index:9998;position:fixed;inset:0}.NotificationPanel__panel{z-index:9999;background:var(--card-background-color);border:1px solid var(--border-color);border-radius:var(--radius);width:min(420px,80vw);box-shadow:var(--card-box-shadow);padding:var(--spacing-12);position:fixed;top:0;left:0}.NotificationPanel__title{margin:0 0 var(--spacing-8) 0;font-size:var(--font-size-sm);color:var(--body-title-color);font-weight:var(--font-weight-medium)}.NotificationPanel__list{gap:var(--spacing-4);flex-direction:column;max-height:260px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.NotificationPanel__list::-webkit-scrollbar{width:var(--scrollbar-size)}.NotificationPanel__list::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.NotificationPanel__list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color);border-radius:var(--scrollbar-radius)}.NotificationPanel__list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover-color)}.NotificationPanel__list{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color)}.NotificationPanel__item{font-size:var(--font-size-sm);color:var(--body-color);padding:var(--spacing-8);border-radius:var(--radius-sm);border:1px solid #0000}.NotificationPanel__item--critical{border-color:color-mix(in srgb, var(--button-danger-border-color) 50%, var(--border-color));background:color-mix(in srgb, var(--button-danger-border-color) 10%, transparent)}.NotificationPanel__empty{color:var(--body-sub-title-color);font-size:var(--font-size-sm);margin:0}
1
+ .NotificationPanel{position:relative}.NotificationPanel__button{align-items:center;gap:var(--spacing-8);border:1px solid var(--border-color);border-radius:var(--radius);background:var(--card-background-color);color:var(--body-title-color);padding:var(--spacing-8) var(--spacing-12);cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);display:inline-flex}.NotificationPanel__button--critical{border-color:color-mix(in srgb, var(--button-danger-border-color) 55%, var(--border-color));background:color-mix(in srgb, var(--button-danger-border-color) 12%, transparent)}.NotificationPanel__badge{min-width:var(--spacing-20);height:var(--spacing-20);border-radius:var(--radius-full);font-size:var(--font-size-xs);background:var(--button-danger-background-color);color:var(--button-danger-color);padding:0 var(--spacing-4);justify-content:center;align-items:center;display:inline-flex}.NotificationPanel__backdrop{z-index:9998;position:fixed;inset:0}.NotificationPanel__panel{z-index:9999;background:var(--card-background-color);border:1px solid var(--border-color);border-radius:var(--radius);width:min(420px,80vw);box-shadow:var(--card-box-shadow);padding:var(--spacing-12);position:fixed;top:0;left:0}.NotificationPanel__title{margin:0 0 var(--spacing-8) 0;font-size:var(--font-size-sm);color:var(--body-title-color);font-weight:var(--font-weight-medium)}.NotificationPanel__list{gap:var(--spacing-4);flex-direction:column;max-height:260px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.NotificationPanel__list::-webkit-scrollbar{width:var(--scrollbar-size)}.NotificationPanel__list::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.NotificationPanel__list::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color);border-radius:var(--scrollbar-radius)}.NotificationPanel__list::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover-color)}.NotificationPanel__list{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color)}.NotificationPanel__item{font-size:var(--font-size-sm);color:var(--body-color);padding:var(--spacing-8);border-radius:var(--radius-sm);border:1px solid #0000}.NotificationPanel__item--critical{border-color:color-mix(in srgb, var(--button-danger-border-color) 50%, var(--border-color));background:color-mix(in srgb, var(--button-danger-border-color) 10%, transparent)}.NotificationPanel__item--clickable{cursor:pointer;transition:background-color var(--transition-fast)}.NotificationPanel__item--clickable:hover{background:color-mix(in srgb, var(--body-accent-color) 14%, transparent)}.NotificationPanel__empty{color:var(--body-sub-title-color);font-size:var(--font-size-sm);margin:0}
@@ -1,17 +1,17 @@
1
1
  import './NotificationPanel.css';
2
2
  /* empty css */
3
- import { useEffect as p, useRef as N, useState as g } from "react";
4
- import { Fragment as k, jsx as n, jsxs as d } from "react/jsx-runtime";
5
- import { createPortal as w } from "react-dom";
6
- var S = ({ items: i, buttonLabel: _ = "Alerts", panelTitle: y = "Notifications", emptyMessage: P = "No active notifications." }) => {
7
- const [o, m] = g(!1), [v, u] = g({ opacity: 0 }), s = N(null), f = N(null), b = i.some((t) => t.severity === "critical");
8
- return p(() => {
9
- if (!o || !s.current || !f.current) return;
3
+ import { useEffect as N, useRef as _, useState as g } from "react";
4
+ import { Fragment as w, jsx as n, jsxs as u } from "react/jsx-runtime";
5
+ import { createPortal as E } from "react-dom";
6
+ var B = ({ items: i, buttonLabel: y = "Alerts", panelTitle: P = "Notifications", emptyMessage: v = "No active notifications.", onItemClick: m }) => {
7
+ const [o, s] = g(!1), [b, h] = g({ opacity: 0 }), f = _(null), d = _(null), R = i.some((t) => t.severity === "critical");
8
+ return N(() => {
9
+ if (!o || !f.current || !d.current) return;
10
10
  const t = requestAnimationFrame(() => {
11
- if (!s.current || !f.current) return;
12
- const c = s.current.getBoundingClientRect(), a = f.current.getBoundingClientRect(), h = document.documentElement.clientWidth, R = document.documentElement.clientHeight, e = 8;
13
- let l = c.bottom + e, r = c.right - a.width;
14
- r < e && (r = e), r + a.width > h - e && (r = h - a.width - e), l + a.height > R - e && (l = c.top - a.height - e), l < e && (l = e), u({
11
+ if (!f.current || !d.current) return;
12
+ const a = f.current.getBoundingClientRect(), c = d.current.getBoundingClientRect(), p = document.documentElement.clientWidth, k = document.documentElement.clientHeight, e = 8;
13
+ let l = a.bottom + e, r = a.right - c.width;
14
+ r < e && (r = e), r + c.width > p - e && (r = p - c.width - e), l + c.height > k - e && (l = a.top - c.height - e), l < e && (l = e), h({
15
15
  position: "fixed",
16
16
  top: l,
17
17
  left: r,
@@ -19,42 +19,49 @@ var S = ({ items: i, buttonLabel: _ = "Alerts", panelTitle: y = "Notifications",
19
19
  });
20
20
  });
21
21
  return () => cancelAnimationFrame(t);
22
- }, [o]), p(() => {
22
+ }, [o]), N(() => {
23
23
  if (!o) return;
24
- const t = (c) => {
25
- c.key === "Escape" && m(!1);
24
+ const t = (a) => {
25
+ a.key === "Escape" && s(!1);
26
26
  };
27
27
  return document.addEventListener("keydown", t), () => document.removeEventListener("keydown", t);
28
- }, [o]), /* @__PURE__ */ d("div", {
28
+ }, [o]), /* @__PURE__ */ u("div", {
29
29
  className: "NotificationPanel",
30
- children: [/* @__PURE__ */ d("button", {
31
- ref: s,
30
+ children: [/* @__PURE__ */ u("button", {
31
+ ref: f,
32
32
  type: "button",
33
- className: `NotificationPanel__button${b ? " NotificationPanel__button--critical" : ""}`,
33
+ className: `NotificationPanel__button${R ? " NotificationPanel__button--critical" : ""}`,
34
34
  onClick: () => {
35
- u({ opacity: 0 }), m((t) => !t);
35
+ h({ opacity: 0 }), s((t) => !t);
36
36
  },
37
- children: [_, i.length > 0 && /* @__PURE__ */ n("span", {
37
+ children: [y, i.length > 0 && /* @__PURE__ */ n("span", {
38
38
  className: "NotificationPanel__badge",
39
39
  children: i.length
40
40
  })]
41
- }), o && w(/* @__PURE__ */ d(k, { children: [/* @__PURE__ */ n("div", {
41
+ }), o && E(/* @__PURE__ */ u(w, { children: [/* @__PURE__ */ n("div", {
42
42
  className: "NotificationPanel__backdrop",
43
- onClick: () => m(!1)
44
- }), /* @__PURE__ */ d("div", {
45
- ref: f,
43
+ onClick: () => s(!1)
44
+ }), /* @__PURE__ */ u("div", {
45
+ ref: d,
46
46
  className: "NotificationPanel__panel",
47
- style: v,
47
+ style: b,
48
48
  children: [/* @__PURE__ */ n("h4", {
49
49
  className: "NotificationPanel__title",
50
- children: y
50
+ children: P
51
51
  }), i.length === 0 ? /* @__PURE__ */ n("p", {
52
52
  className: "NotificationPanel__empty",
53
- children: P
53
+ children: v
54
54
  }) : /* @__PURE__ */ n("ul", {
55
55
  className: "NotificationPanel__list",
56
56
  children: i.map((t) => /* @__PURE__ */ n("li", {
57
- className: `NotificationPanel__item${t.severity === "critical" ? " NotificationPanel__item--critical" : ""}`,
57
+ className: [
58
+ "NotificationPanel__item",
59
+ t.severity === "critical" ? "NotificationPanel__item--critical" : "",
60
+ m ? "NotificationPanel__item--clickable" : ""
61
+ ].filter(Boolean).join(" "),
62
+ onClick: m ? () => {
63
+ s(!1), m(t);
64
+ } : void 0,
58
65
  children: t.message
59
66
  }, t.id))
60
67
  })]
@@ -62,5 +69,5 @@ var S = ({ items: i, buttonLabel: _ = "Alerts", panelTitle: y = "Notifications",
62
69
  });
63
70
  };
64
71
  export {
65
- S as NotificationPanel
72
+ B as NotificationPanel
66
73
  };
@@ -23,7 +23,7 @@ var r = (i) => {
23
23
  const o = {
24
24
  ...i,
25
25
  lib: d,
26
- libBuildNumber: 461,
26
+ libBuildNumber: 467,
27
27
  libCommit: n,
28
28
  libBuildDate: t
29
29
  };
package/dist/index.d.ts CHANGED
@@ -2315,7 +2315,11 @@ export declare interface MiniSortItem {
2315
2315
  value: string;
2316
2316
  label?: default_2.ReactNode;
2317
2317
  icon?: IconName;
2318
- /** Fixed direction for this item. Used only when `showDirectionToggle` is false. */
2318
+ /**
2319
+ * Starting direction for this item when `showDirectionToggle` is false. Clicking the already-active
2320
+ * item reverses it — unless another item sorts the same `value` (e.g. a "Newest"/"Oldest" pair),
2321
+ * in which case each item keeps its own fixed direction.
2322
+ */
2319
2323
  direction?: MiniSortDirection;
2320
2324
  disabled?: boolean;
2321
2325
  }
@@ -2429,6 +2433,12 @@ declare interface NotificationPanelProps {
2429
2433
  buttonLabel?: string;
2430
2434
  panelTitle?: string;
2431
2435
  emptyMessage?: string;
2436
+ /**
2437
+ * Makes each row a way into whatever it is warning about, and closes the panel on the
2438
+ * way. Without it the rows are a read-only list — fine for a reading like "battery 0%"
2439
+ * that has nowhere to go, wrong for an alert that names a record you want to open.
2440
+ */
2441
+ onItemClick?: (item: NotificationPanelItem) => void;
2432
2442
  }
2433
2443
 
2434
2444
  declare type OutputFormat = 'html' | 'markdown';
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
- var I = "3.2.0", B = 461, L = "0282050", _ = "2026-10-02T16:22:52.153Z", r = "461";
1
+ var I = "3.4.0", B = 467, L = "e0f3c94", _ = "2026-10-02T17:16:46.471Z", r = "467";
2
2
  export {
3
3
  _ as LIB_BUILD_DATE,
4
4
  r as LIB_BUILD_ID,
package/dist/version.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "3.2.0",
3
- "buildNumber": 461,
4
- "commit": "0282050",
5
- "buildDate": "2026-10-02T16:22:52.153Z"
2
+ "version": "3.4.0",
3
+ "buildNumber": 467,
4
+ "commit": "e0f3c94",
5
+ "buildDate": "2026-10-02T17:16:46.471Z"
6
6
  }
package/package.json CHANGED
@@ -1,121 +1,121 @@
1
- {
2
- "name": "@memobit/libs",
3
- "version": "3.2.0",
4
- "description": "React component library powering the Memobit apps — 100+ components, helpers and hooks. Icons ship as @memobit/icons and themes as @memobit/themes. TypeScript-first, ESM-only, React 19.",
5
- "keywords": [
6
- "react",
7
- "react-components",
8
- "component-library",
9
- "ui",
10
- "ui-kit",
11
- "design-system",
12
- "typescript",
13
- "hooks",
14
- "memobit"
15
- ],
16
- "author": "Iulian Cristea <iulianx@gmail.com>",
17
- "license": "Apache-2.0",
18
- "homepage": "https://react.memobit.ro/",
19
- "repository": {
20
- "type": "git",
21
- "url": "git+https://github.com/CristeaIulian/memobit-react-library.git"
22
- },
23
- "bugs": {
24
- "url": "https://github.com/CristeaIulian/memobit-react-library/issues"
25
- },
26
- "publishConfig": {
27
- "access": "public"
28
- },
29
- "sideEffects": [
30
- "**/*.css",
31
- "**/*.scss"
32
- ],
33
- "type": "module",
34
- "main": "dist/index.js",
35
- "module": "dist/index.js",
36
- "types": "dist/index.d.ts",
37
- "exports": {
38
- ".": {
39
- "types": "./dist/index.d.ts",
40
- "import": "./dist/index.js"
41
- },
42
- "./dist/index.css": "./dist/index.css",
43
- "./mfa": {
44
- "types": "./dist/mfa.d.ts",
45
- "import": "./dist/mfa.js"
46
- },
47
- "./dist/styles/variables.scss": "./dist/styles/variables.scss",
48
- "./dist/styles/base.scss": "./dist/styles/base.scss",
49
- "./dist/styles/effects.scss": "./dist/styles/effects.scss",
50
- "./dist/styles/highlight.scss": "./dist/styles/highlight.scss",
51
- "./dist/styles/scrollbars.scss": "./dist/styles/scrollbars.scss",
52
- "./dist/styles/utilities.scss": "./dist/styles/utilities.scss",
53
- "./dist/styles/utility-classes.scss": "./dist/styles/utility-classes.scss",
54
- "./dist/components/*": "./dist/components/*"
55
- },
56
- "files": [
57
- "dist"
58
- ],
59
- "scripts": {
60
- "build": "vite build && npm pack",
61
- "release": "npm run build && npm publish",
62
- "check:npm-auth": "node scripts/check-npm-auth.mjs",
63
- "ship": "npm run check:npm-auth && npm version patch && npm run release && git push --follow-tags",
64
- "ship:minor": "npm run check:npm-auth && npm version minor && npm run release && git push --follow-tags",
65
- "ship:major": "npm run check:npm-auth && npm version major && npm run release && git push --follow-tags",
66
- "prepublishOnly": "vite build",
67
- "dev": "vite build --watch",
68
- "playground": "vite serve playground --config playground/vite.config.ts",
69
- "lint": "eslint src --ext .ts,.tsx",
70
- "lint:fix": "eslint src --ext .ts,.tsx --fix",
71
- "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"",
72
- "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\""
73
- },
74
- "peerDependencies": {
75
- "@memobit/icons": "^1.0.0",
76
- "@memobit/themes": "^1.0.0",
77
- "react": "19.2.7",
78
- "react-dom": "19.2.7"
79
- },
80
- "devDependencies": {
81
- "@eslint/js": "9.39.4",
82
- "@memobit/icons": "file:../memobit-react-icons",
83
- "@memobit/themes": "file:../memobit-react-themes",
84
- "@microsoft/api-extractor": "7.58.8",
85
- "@types/react": "19.2.14",
86
- "@types/react-dom": "19.2.3",
87
- "@vitejs/plugin-react": "6.0.4",
88
- "esbuild": "0.28.1",
89
- "eslint": "9.39.4",
90
- "eslint-config-prettier": "10.1.8",
91
- "eslint-plugin-import-x": "4.17.1",
92
- "eslint-plugin-prettier": "5.5.5",
93
- "eslint-plugin-react": "7.37.5",
94
- "eslint-plugin-simple-import-sort": "13.0.0",
95
- "globals": "17.6.0",
96
- "prettier": "3.8.3",
97
- "qrcode.react": "4.2.0",
98
- "react": "19.2.7",
99
- "react-dom": "19.2.7",
100
- "react-router": "8.3.0",
101
- "sass": "1.99.0",
102
- "terser": "5.47.1",
103
- "typescript": "6.0.3",
104
- "typescript-eslint": "8.59.3",
105
- "vite": "8.1.5",
106
- "vite-plugin-dts": "5.0.0",
107
- "vite-plugin-static-copy": "3.4.0"
108
- },
109
- "overrides": {
110
- "brace-expansion@1": "1.1.18",
111
- "brace-expansion@5": "5.0.9",
112
- "fast-uri@3": "3.1.8",
113
- "immutable": "5.1.9",
114
- "js-yaml": "4.3.2",
115
- "minimatch@10": "10.2.6",
116
- "nanoid@3": "3.3.18",
117
- "picomatch@2": "2.3.2",
118
- "postcss": "8.5.26",
119
- "esbuild": "0.28.1"
120
- }
121
- }
1
+ {
2
+ "name": "@memobit/libs",
3
+ "version": "3.4.0",
4
+ "description": "React component library powering the Memobit apps — 100+ components, helpers and hooks. Icons ship as @memobit/icons and themes as @memobit/themes. TypeScript-first, ESM-only, React 19.",
5
+ "keywords": [
6
+ "react",
7
+ "react-components",
8
+ "component-library",
9
+ "ui",
10
+ "ui-kit",
11
+ "design-system",
12
+ "typescript",
13
+ "hooks",
14
+ "memobit"
15
+ ],
16
+ "author": "Iulian Cristea <iulianx@gmail.com>",
17
+ "license": "Apache-2.0",
18
+ "homepage": "https://react.memobit.ro/",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/CristeaIulian/memobit-react-library.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/CristeaIulian/memobit-react-library/issues"
25
+ },
26
+ "publishConfig": {
27
+ "access": "public"
28
+ },
29
+ "sideEffects": [
30
+ "**/*.css",
31
+ "**/*.scss"
32
+ ],
33
+ "type": "module",
34
+ "main": "dist/index.js",
35
+ "module": "dist/index.js",
36
+ "types": "dist/index.d.ts",
37
+ "exports": {
38
+ ".": {
39
+ "types": "./dist/index.d.ts",
40
+ "import": "./dist/index.js"
41
+ },
42
+ "./dist/index.css": "./dist/index.css",
43
+ "./mfa": {
44
+ "types": "./dist/mfa.d.ts",
45
+ "import": "./dist/mfa.js"
46
+ },
47
+ "./dist/styles/variables.scss": "./dist/styles/variables.scss",
48
+ "./dist/styles/base.scss": "./dist/styles/base.scss",
49
+ "./dist/styles/effects.scss": "./dist/styles/effects.scss",
50
+ "./dist/styles/highlight.scss": "./dist/styles/highlight.scss",
51
+ "./dist/styles/scrollbars.scss": "./dist/styles/scrollbars.scss",
52
+ "./dist/styles/utilities.scss": "./dist/styles/utilities.scss",
53
+ "./dist/styles/utility-classes.scss": "./dist/styles/utility-classes.scss",
54
+ "./dist/components/*": "./dist/components/*"
55
+ },
56
+ "files": [
57
+ "dist"
58
+ ],
59
+ "scripts": {
60
+ "build": "vite build && npm pack",
61
+ "release": "npm run build && npm publish",
62
+ "check:npm-auth": "node scripts/check-npm-auth.mjs",
63
+ "ship": "npm run check:npm-auth && npm version patch && npm run release && git push --follow-tags",
64
+ "ship:minor": "npm run check:npm-auth && npm version minor && npm run release && git push --follow-tags",
65
+ "ship:major": "npm run check:npm-auth && npm version major && npm run release && git push --follow-tags",
66
+ "prepublishOnly": "vite build",
67
+ "dev": "vite build --watch",
68
+ "playground": "vite serve playground --config playground/vite.config.ts",
69
+ "lint": "eslint src --ext .ts,.tsx",
70
+ "lint:fix": "eslint src --ext .ts,.tsx --fix",
71
+ "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css}\"",
72
+ "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css}\""
73
+ },
74
+ "peerDependencies": {
75
+ "@memobit/icons": "^1.0.0",
76
+ "@memobit/themes": "^1.0.0",
77
+ "react": "19.2.7",
78
+ "react-dom": "19.2.7"
79
+ },
80
+ "devDependencies": {
81
+ "@eslint/js": "9.39.4",
82
+ "@memobit/icons": "file:../memobit-react-icons",
83
+ "@memobit/themes": "file:../memobit-react-themes",
84
+ "@microsoft/api-extractor": "7.58.8",
85
+ "@types/react": "19.2.14",
86
+ "@types/react-dom": "19.2.3",
87
+ "@vitejs/plugin-react": "6.0.4",
88
+ "esbuild": "0.28.1",
89
+ "eslint": "9.39.4",
90
+ "eslint-config-prettier": "10.1.8",
91
+ "eslint-plugin-import-x": "4.17.1",
92
+ "eslint-plugin-prettier": "5.5.5",
93
+ "eslint-plugin-react": "7.37.5",
94
+ "eslint-plugin-simple-import-sort": "13.0.0",
95
+ "globals": "17.6.0",
96
+ "prettier": "3.8.3",
97
+ "qrcode.react": "4.2.0",
98
+ "react": "19.2.7",
99
+ "react-dom": "19.2.7",
100
+ "react-router": "8.3.0",
101
+ "sass": "1.99.0",
102
+ "terser": "5.47.1",
103
+ "typescript": "6.0.3",
104
+ "typescript-eslint": "8.59.3",
105
+ "vite": "8.1.5",
106
+ "vite-plugin-dts": "5.0.0",
107
+ "vite-plugin-static-copy": "3.4.0"
108
+ },
109
+ "overrides": {
110
+ "brace-expansion@1": "1.1.21",
111
+ "brace-expansion@5": "5.0.12",
112
+ "fast-uri@3": "3.1.8",
113
+ "immutable": "5.1.9",
114
+ "js-yaml": "4.3.2",
115
+ "minimatch@10": "10.2.6",
116
+ "nanoid@3": "3.3.18",
117
+ "picomatch@2": "2.3.2",
118
+ "postcss": "8.5.26",
119
+ "esbuild": "0.28.1"
120
+ }
121
+ }