@nice2dev/ui 1.0.12 → 1.0.14

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 (52) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +53 -36
  3. package/css/legacy-bg-text-aliases.css +83 -0
  4. package/dist/NiceErrorBoundary-BLTq8mPU.cjs +1 -0
  5. package/dist/NiceErrorBoundary-Bjw5U31n.js +762 -0
  6. package/dist/NiceForm-CUlhtlHw.js +5357 -0
  7. package/dist/NiceForm-DTgIGX88.cjs +382 -0
  8. package/dist/NiceForm.css +1 -1
  9. package/dist/NiceModal-C_t2qqZd.js +95 -0
  10. package/dist/NiceModal-FQqBxCij.cjs +1 -0
  11. package/dist/NiceModuleLifecyclePanel-CCFHxKIu.js +6343 -0
  12. package/dist/NiceModuleLifecyclePanel-D8cIOI8I.cjs +1 -0
  13. package/dist/NiceModuleLifecyclePanel.css +1 -1
  14. package/dist/NicePagination-BVkkePJU.js +171 -0
  15. package/dist/NicePagination-DGd3Hrh9.cjs +1 -0
  16. package/dist/NicePinCodeInput-CDtodnIM.js +11875 -0
  17. package/dist/NicePinCodeInput-DytLfqZL.cjs +419 -0
  18. package/dist/NicePinCodeInput.css +1 -1
  19. package/dist/NiceSavedQueryPanel-CbR3EDQU.cjs +596 -0
  20. package/dist/NiceSavedQueryPanel-DJqCNWYZ.js +6446 -0
  21. package/dist/NiceTabs-B-9_mzpc.js +1624 -0
  22. package/dist/NiceTabs-CHg36waF.cjs +1 -0
  23. package/dist/NiceWindow-BxGVzUs2.js +1409 -0
  24. package/dist/NiceWindow-HhPIzPzs.cjs +1 -0
  25. package/dist/charts-Us8Ep8MJ.cjs +761 -0
  26. package/dist/charts-fO6InNZd.js +4645 -0
  27. package/dist/charts.cjs +1 -1
  28. package/dist/charts.mjs +1 -1
  29. package/dist/core-B-tu8l9M.cjs +96 -0
  30. package/dist/core-BJ_UNMlX.js +22276 -0
  31. package/dist/data.cjs +1 -1
  32. package/dist/data.d.ts +7 -0
  33. package/dist/data.mjs +1 -1
  34. package/dist/editors.cjs +1 -1
  35. package/dist/editors.mjs +3 -3
  36. package/dist/feedback.cjs +1 -1
  37. package/dist/feedback.mjs +2 -2
  38. package/dist/index-DHc_KZkF.js +61311 -0
  39. package/dist/index-drIVMHeC.cjs +5194 -0
  40. package/dist/index.cjs +1 -1
  41. package/dist/index.css +1 -1
  42. package/dist/index.d.ts +1140 -63
  43. package/dist/index.mjs +833 -819
  44. package/dist/lazy.cjs +1 -1
  45. package/dist/lazy.mjs +3 -3
  46. package/dist/navigation.cjs +1 -1
  47. package/dist/navigation.d.ts +309 -70
  48. package/dist/navigation.mjs +91 -90
  49. package/dist/overlays.cjs +1 -1
  50. package/dist/overlays.mjs +2 -2
  51. package/dist/style.css +7 -0
  52. package/package.json +9 -5
package/CHANGELOG.md CHANGED
@@ -1,3 +1,31 @@
1
+ # [1.0.14] — 2026-05-11
2
+
3
+ ### Added — CSS Import Support for Vite/Webpack/React
4
+
5
+ - **style.css import** — You can now import all UI styles in your app entry point with:
6
+
7
+ import '@nice2dev/ui/style.css';
8
+ // or
9
+ import '@nice2dev/ui/dist/style.css';
10
+
11
+ - **package.json improvements**:
12
+ - Added "style" field: "dist/style.css"
13
+ - Added CSS file to "exports" for robust, one-line import in any React/Vite/Webpack app
14
+
15
+ - **Why?**
16
+ - This is the standard for UI libraries (see: antd, material-ui, bootstrap, etc.)
17
+ - Enables robust, one-line style import in any React/Vite/Webpack app
18
+ - No more hacks with relative paths or <link> in index.html
19
+
20
+ - **Result:**
21
+ - Users can simply write:
22
+
23
+ import '@nice2dev/ui/style.css';
24
+
25
+ in their main.tsx and all styles (tokens, animations, pickers, etc.) will work out of the box.
26
+
27
+ ---
28
+
1
29
  # @nice2dev/ui — Changelog
2
30
 
3
31
  All notable changes to the core UI library.
package/README.md CHANGED
@@ -11,50 +11,50 @@
11
11
 
12
12
  ---
13
13
 
14
-
15
14
  ## 📦 Per-Package Import Matrix
16
15
 
17
16
  For optimal bundle size, import components directly from their subpackage:
18
17
 
19
- | Component | Main Package | Per-Package Import Path |
20
- |----------------------|-------------------|---------------------------------|
21
- | NiceButton | @nice2dev/ui | @nice2dev/ui |
22
- | NiceTextInput | @nice2dev/ui | @nice2dev/ui/editors |
23
- | NiceNumberInput | @nice2dev/ui | @nice2dev/ui/editors |
24
- | NiceDatePicker | @nice2dev/ui | @nice2dev/ui/editors |
25
- | NiceSelect | @nice2dev/ui | @nice2dev/ui/editors |
26
- | NiceCheckbox | @nice2dev/ui | @nice2dev/ui/editors |
27
- | NiceToggle | @nice2dev/ui | @nice2dev/ui/editors |
28
- | NiceRadioGroup | @nice2dev/ui | @nice2dev/ui/editors |
29
- | NiceSlider | @nice2dev/ui | @nice2dev/ui/editors |
30
- | NiceColorPicker | @nice2dev/ui | @nice2dev/ui/editors |
31
- | NiceAutocomplete | @nice2dev/ui | @nice2dev/ui/editors |
32
- | NiceCalendar | @nice2dev/ui | @nice2dev/ui/editors |
33
- | NiceDateRangeBox | @nice2dev/ui | @nice2dev/ui/editors |
34
- | NiceTagBox | @nice2dev/ui | @nice2dev/ui/editors |
35
- | NiceRangeSlider | @nice2dev/ui | @nice2dev/ui/editors |
36
- | NiceDropDownBox | @nice2dev/ui | @nice2dev/ui/editors |
37
- | NiceHtmlEditor | @nice2dev/ui | @nice2dev/ui/editors |
38
- | NiceForm | @nice2dev/ui | @nice2dev/ui/forms |
39
- | NiceMoneyInput | @nice2dev/ui | @nice2dev/ui-money |
40
- | NiceTaxBreakdown | @nice2dev/ui | @nice2dev/ui-money |
41
- | NiceInvoiceView | @nice2dev/ui-erp | @nice2dev/ui-erp |
42
- | NiceWarehouseView | @nice2dev/ui-erp | @nice2dev/ui-erp |
43
- | NicePurchaseOrder | @nice2dev/ui-erp | @nice2dev/ui-erp |
44
- | NiceHRDashboard | @nice2dev/ui-erp | @nice2dev/ui-erp |
45
- | NiceVatTable | @nice2dev/ui-erp | @nice2dev/ui-erp |
46
- | NiceJpkExporter | @nice2dev/ui-erp | @nice2dev/ui-erp |
47
- | NicePickList | @nice2dev/ui | @nice2dev/ui/editors/pickers |
48
- | NiceModal | @nice2dev/ui | @nice2dev/ui-display |
49
- | NiceMobileModal | @nice2dev/ui | @nice2dev/ui-mobile |
50
- | NiceThemeDesigner | @nice2dev/ui | @nice2dev/ui/tools |
51
- | NiceThemeBuilder | @nice2dev/ui | @nice2dev/ui/tools |
52
- | NiceShowcase | @nice2dev/ui | @nice2dev/ui |
53
- | ... | ... | ... |
18
+ | Component | Main Package | Per-Package Import Path |
19
+ | ----------------- | ---------------- | ---------------------------- |
20
+ | NiceButton | @nice2dev/ui | @nice2dev/ui |
21
+ | NiceTextInput | @nice2dev/ui | @nice2dev/ui/editors |
22
+ | NiceNumberInput | @nice2dev/ui | @nice2dev/ui/editors |
23
+ | NiceDatePicker | @nice2dev/ui | @nice2dev/ui/editors |
24
+ | NiceSelect | @nice2dev/ui | @nice2dev/ui/editors |
25
+ | NiceCheckbox | @nice2dev/ui | @nice2dev/ui/editors |
26
+ | NiceToggle | @nice2dev/ui | @nice2dev/ui/editors |
27
+ | NiceRadioGroup | @nice2dev/ui | @nice2dev/ui/editors |
28
+ | NiceSlider | @nice2dev/ui | @nice2dev/ui/editors |
29
+ | NiceColorPicker | @nice2dev/ui | @nice2dev/ui/editors |
30
+ | NiceAutocomplete | @nice2dev/ui | @nice2dev/ui/editors |
31
+ | NiceCalendar | @nice2dev/ui | @nice2dev/ui/editors |
32
+ | NiceDateRangeBox | @nice2dev/ui | @nice2dev/ui/editors |
33
+ | NiceTagBox | @nice2dev/ui | @nice2dev/ui/editors |
34
+ | NiceRangeSlider | @nice2dev/ui | @nice2dev/ui/editors |
35
+ | NiceDropDownBox | @nice2dev/ui | @nice2dev/ui/editors |
36
+ | NiceHtmlEditor | @nice2dev/ui | @nice2dev/ui/editors |
37
+ | NiceForm | @nice2dev/ui | @nice2dev/ui/forms |
38
+ | NiceMoneyInput | @nice2dev/ui | @nice2dev/ui-money |
39
+ | NiceTaxBreakdown | @nice2dev/ui | @nice2dev/ui-money |
40
+ | NiceInvoiceView | @nice2dev/ui-erp | @nice2dev/ui-erp |
41
+ | NiceWarehouseView | @nice2dev/ui-erp | @nice2dev/ui-erp |
42
+ | NicePurchaseOrder | @nice2dev/ui-erp | @nice2dev/ui-erp |
43
+ | NiceHRDashboard | @nice2dev/ui-erp | @nice2dev/ui-erp |
44
+ | NiceVatTable | @nice2dev/ui-erp | @nice2dev/ui-erp |
45
+ | NiceJpkExporter | @nice2dev/ui-erp | @nice2dev/ui-erp |
46
+ | NicePickList | @nice2dev/ui | @nice2dev/ui/editors/pickers |
47
+ | NiceModal | @nice2dev/ui | @nice2dev/ui-display |
48
+ | NiceMobileModal | @nice2dev/ui | @nice2dev/ui-mobile |
49
+ | NiceThemeDesigner | @nice2dev/ui | @nice2dev/ui/tools |
50
+ | NiceThemeBuilder | @nice2dev/ui | @nice2dev/ui/tools |
51
+ | NiceShowcase | @nice2dev/ui | @nice2dev/ui |
52
+ | ... | ... | ... |
54
53
 
55
54
  See each subpackage README for a full list of available components and their import paths.
56
55
 
57
56
  ---
57
+
58
58
  ## Table of Contents
59
59
 
60
60
  - [Features](#features)
@@ -669,6 +669,23 @@ Create a custom theme by overriding CSS variables:
669
669
  }
670
670
  ```
671
671
 
672
+ ### Legacy shorthand alias layer (opt-in)
673
+
674
+ If your app already uses the conventional shorthand variables
675
+ (`--bg-primary`, `--text-primary`, `--border-color`, `--shadow-sm/md/lg`,
676
+ etc.) — for example when porting from a custom design-token system
677
+ like OmniVerk's `--s-*` table — import the opt-in alias stylesheet so
678
+ those names inherit values from the active Nice token set without
679
+ being redefined by hand:
680
+
681
+ ```ts
682
+ import '@nice2dev/ui/style.css';
683
+ import '@nice2dev/ui/css/legacy-bg-text-aliases.css'; // opt-in
684
+ ```
685
+
686
+ The alias file only fills in gaps (it never overrides values you set
687
+ yourself) and follows the active Nice theme (light / dark) automatically.
688
+
672
689
  ---
673
690
 
674
691
  ## Build & Development
@@ -0,0 +1,83 @@
1
+ /* ============================================================
2
+ @nice2dev/ui — legacy-bg-text-aliases.css
3
+
4
+ Opt-in alias layer that maps the conventional shorthand CSS
5
+ variables used by many design systems onto the canonical
6
+ `--nice-*` design tokens shipped by @nice2dev/ui.
7
+
8
+ Use case: your app already references `--bg-primary`, `--text-primary`,
9
+ `--border-color`, `--shadow-sm/md/lg`, etc. directly in its own CSS
10
+ (e.g. ported from a custom design system like OmniVerk's `--s-*`
11
+ table) and you want those names to inherit values from the active
12
+ Nice token set instead of re-defining them by hand.
13
+
14
+ Usage (after `@nice2dev/ui/style.css`):
15
+ import '@nice2dev/ui/style.css';
16
+ import '@nice2dev/ui/css/legacy-bg-text-aliases.css';
17
+
18
+ The fallback chain prefers the canonical Nice token, then the bare
19
+ shorthand the app may have set itself, then a sane hardcoded value.
20
+ This file therefore never *overrides* an explicit app value — it
21
+ only fills in gaps.
22
+ ============================================================ */
23
+
24
+ :root {
25
+ /* Backgrounds */
26
+ --bg-primary: var(--nice-bg-primary, var(--bg-primary, #ffffff));
27
+ --bg-secondary: var(--nice-bg-secondary, var(--bg-secondary, #f8fafc));
28
+ --bg-tertiary: var(--nice-bg-tertiary, var(--bg-tertiary, #f1f5f9));
29
+ --bg-elevated: var(--nice-bg-elevated, var(--bg-elevated, #ffffff));
30
+ --bg-canvas: var(--nice-bg-canvas, var(--bg-canvas, #f8fafc));
31
+ --bg-inset: var(--nice-bg-tertiary, var(--bg-inset, #f1f5f9));
32
+
33
+ /* Text */
34
+ --text-primary: var(--nice-text-primary, var(--text-primary, #0f172a));
35
+ --text-secondary: var(--nice-text-secondary, var(--text-secondary, #475569));
36
+ --text-muted: var(--nice-text-muted, var(--text-muted, #94a3b8));
37
+ --text-inverse: var(--nice-text-inverse, var(--text-inverse, #ffffff));
38
+
39
+ /* Borders */
40
+ --border-color: var(--nice-border-color, var(--border-color, #cbd5e1));
41
+ --border-light: var(--nice-border-light, var(--border-color, #e2e8f0));
42
+ --border-strong: var(--nice-border-strong, var(--border-color, #94a3b8));
43
+
44
+ /* Shadows */
45
+ --shadow-sm: var(--nice-shadow-sm, var(--shadow-sm, 0 1px 2px rgba(0, 0, 0, 0.05)));
46
+ --shadow-md: var(--nice-shadow-md, var(--shadow-md, 0 4px 12px rgba(0, 0, 0, 0.10)));
47
+ --shadow-lg: var(--nice-shadow-lg, var(--shadow-lg, 0 10px 24px rgba(0, 0, 0, 0.15)));
48
+ --shadow-xl: var(--nice-shadow-xl, var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.20)));
49
+
50
+ /* Brand / status colors (most commonly aliased shorthand) */
51
+ --color-primary: var(--nice-primary, var(--color-primary, #3b82f6));
52
+ --color-success: var(--nice-success, var(--color-success, #10b981));
53
+ --color-warning: var(--nice-warning, var(--color-warning, #f59e0b));
54
+ --color-error: var(--nice-error, var(--color-error, #ef4444));
55
+ --color-info: var(--nice-info, var(--color-info, #06b6d4));
56
+ --color-accent: var(--nice-accent, var(--color-accent, #8b5cf6));
57
+
58
+ /* Hover / surface */
59
+ --hover-bg: var(--nice-hover-bg, var(--hover-bg, #f1f5f9));
60
+ --color-surface: var(--nice-surface, var(--color-surface, #ffffff));
61
+ }
62
+
63
+ /* Dark-mode mirror — applies under the same selectors Nice uses
64
+ for its dark theme. The canonical Nice tokens already swap with
65
+ the data-theme attribute, so the aliases inherit automatically;
66
+ this block re-asserts the chain in case the consumer uses a
67
+ different selector and expects the shorthand vars to follow. */
68
+ [data-theme='dark'] :root,
69
+ :root[data-theme='dark'],
70
+ .dark :root,
71
+ .nice-theme-dark :root {
72
+ --bg-primary: var(--nice-bg-primary, #0f172a);
73
+ --bg-secondary: var(--nice-bg-secondary, #1e293b);
74
+ --bg-tertiary: var(--nice-bg-tertiary, #334155);
75
+ --bg-elevated: var(--nice-bg-elevated, #1e293b);
76
+ --bg-canvas: var(--nice-bg-canvas, #0f172a);
77
+
78
+ --text-primary: var(--nice-text-primary, #f8fafc);
79
+ --text-secondary: var(--nice-text-secondary, #cbd5e1);
80
+ --text-muted: var(--nice-text-muted, #64748b);
81
+
82
+ --border-color: var(--nice-border-color, #334155);
83
+ }
@@ -0,0 +1 @@
1
+ "use strict";const e=require("react/jsx-runtime"),C=require("./core-B-tu8l9M.cjs"),i=require("react"),P={info:e.jsx("svg",{viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})}),success:e.jsx("svg",{viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})}),warning:e.jsx("svg",{viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})}),error:e.jsx("svg",{viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z",clipRule:"evenodd"})})},U=({variant:s="info",title:t,children:c,closable:r,onClose:n,icon:a,size:l="md",className:m,style:d,displayStyle:p})=>{const h=C.is("card",p);return e.jsxs("div",{className:`nice-alert nice-alert--${s} nice-alert--${l} nice-alert--ds-${h} ${m||""}`,style:d,role:"alert",children:[e.jsx("div",{className:`nice-alert__icon nice-alert__icon--${s}`,children:a||P[s]}),e.jsxs("div",{className:"nice-alert__content",children:[t&&e.jsx("div",{className:"nice-alert__title",children:t}),e.jsx("div",{children:c})]}),r&&e.jsx("button",{type:"button",className:"nice-alert__close",onClick:n,"aria-label":"Close",children:"✕"})]})},Y=({open:s,onClose:t,title:c,position:r="right",size:n="md",children:a,footer:l,transitionDuration:m,className:d,style:p,displayStyle:h})=>{const g=C.os("modal",h),x=C.is("modal",h),{t:f}=C.$o(),v=i.useRef(null);return C.ks(v,s),i.useEffect(()=>{if(!s)return;const _=o=>{o.key==="Escape"&&t()};return document.addEventListener("keydown",_),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",_),document.body.style.overflow=""}},[s,t]),s?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"nice-drawer-overlay",onClick:t}),e.jsxs("div",{ref:v,className:`nice-drawer nice-drawer--${r} nice-drawer--${n} nice-drawer--ds-${x} ${d||""}`,style:{...g,...p,...m!=null?{transitionDuration:`${m}ms`}:{}},role:"dialog","aria-modal":"true","aria-label":c,children:[c&&e.jsxs("div",{className:"nice-drawer__header",children:[e.jsx("h3",{className:"nice-drawer__title",children:c}),e.jsx("button",{type:"button",className:"nice-drawer__close",onClick:t,"aria-label":f("controls.close","Close"),children:e.jsx("svg",{width:"18",height:"18",viewBox:"0 0 20 20",fill:"currentColor",children:e.jsx("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})})]}),e.jsx("div",{className:"nice-drawer__body",children:a}),l&&e.jsx("div",{className:"nice-drawer__footer",children:l})]})]}):null},W=({toasts:s,onDismiss:t,position:c="top-right"})=>e.jsx("div",{className:`nice-toast-container nice-toast-container--${c}`,children:s.map(r=>e.jsx(G,{toast:r,onDismiss:t},r.id))}),G=({toast:s,onDismiss:t})=>{const[c,r]=i.useState(!1);return i.useEffect(()=>{if(!s.duration&&s.duration!==0){const n=setTimeout(()=>r(!0),4e3);return()=>clearTimeout(n)}if(s.duration>0){const n=setTimeout(()=>r(!0),s.duration);return()=>clearTimeout(n)}},[s.duration]),i.useEffect(()=>{if(c){const n=setTimeout(()=>t(s.id),200);return()=>clearTimeout(n)}},[c,s.id,t]),e.jsxs("div",{className:`nice-toast nice-toast--${s.variant} ${c?"nice-toast--exiting":""}`,role:"alert",style:{position:"relative"},children:[e.jsx("div",{className:"nice-toast__icon",children:P[s.variant]}),e.jsxs("div",{className:"nice-toast__content",children:[s.title&&e.jsx("div",{className:"nice-toast__title",children:s.title}),e.jsx("div",{className:"nice-toast__message",children:s.message})]}),e.jsx("button",{type:"button",className:"nice-toast__close",onClick:()=>r(!0),children:"✕"})]})};let J=0;function K(){const[s,t]=i.useState([]),c=i.useCallback((n,a,l)=>{const m=`toast-${++J}`;return t(d=>[...d,{id:m,variant:n,message:a,title:l?.title,duration:l?.duration}]),m},[]),r=i.useCallback(n=>{t(a=>a.filter(l=>l.id!==n))},[]);return{toasts:s,dismiss:r,info:(n,a)=>c("info",n,a),success:(n,a)=>c("success",n,a),warning:(n,a)=>c("warning",n,a),error:(n,a)=>c("error",n,a)}}const Q={info:e.jsx("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"})}),warning:e.jsx("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})}),error:e.jsx("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})}),success:e.jsx("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"currentColor",children:e.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})})},X=({visible:s,message:t,header:c,icon:r,variant:n="warning",acceptLabel:a,rejectLabel:l,onAccept:m,onReject:d,closeOnOverlay:p=!1,closeOnEscape:h=!0,size:g="md",className:x,style:f})=>{const{t:v}=C.$o();if(i.useEffect(()=>{if(!s||!h)return;const j=N=>{N.key==="Escape"&&d()};return document.addEventListener("keydown",j),()=>document.removeEventListener("keydown",j)},[s,h,d]),i.useEffect(()=>(s?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[s]),!s)return null;const _=r??Q[n],o=a??v("confirm.accept","Yes"),w=l??v("confirm.reject","No");return e.jsx("div",{className:"nice-modal-overlay",onClick:p?d:void 0,children:e.jsxs("div",{className:`nice-confirm nice-confirm--${n} nice-confirm--${g} ${x||""}`,style:f,role:"alertdialog","aria-modal":"true","aria-label":c,"aria-describedby":"nice-confirm-message",onClick:j=>j.stopPropagation(),children:[c&&e.jsx("div",{className:"nice-confirm__header",children:e.jsx("h3",{className:"nice-confirm__title",children:c})}),e.jsxs("div",{className:"nice-confirm__body",children:[_&&e.jsx("div",{className:`nice-confirm__icon nice-confirm__icon--${n}`,children:_}),e.jsx("div",{id:"nice-confirm-message",className:"nice-confirm__message",children:t})]}),e.jsxs("div",{className:"nice-confirm__footer",children:[e.jsx("button",{type:"button",className:"nice-btn nice-btn--ghost nice-btn--md",onClick:d,children:w}),e.jsx("button",{type:"button",className:`nice-btn nice-btn--${n==="error"?"error":"primary"} nice-btn--md`,onClick:m,autoFocus:!0,children:o})]})]})})},Z=({error:s,onRetry:t,retryLabel:c="Retry",title:r="Operation failed",autoRetrySeconds:n,variant:a="error",icon:l,size:m="md",className:d,style:p,"data-testid":h})=>{const[g,x]=i.useState(n??0),f=i.useRef(),v=typeof s=="string"?s:s.message,_=i.useCallback(()=>{x(n??0),t()},[t,n]);return i.useEffect(()=>{if(!(!n||n<=0))return x(n),f.current=setInterval(()=>{x(o=>o<=1?(clearInterval(f.current),t(),0):o-1)},1e3),()=>clearInterval(f.current)},[n,t]),e.jsxs("div",{className:`nice-retry-panel nice-retry-panel--${a} nice-retry-panel--${m} ${d||""}`,style:p,role:"alert","data-testid":h,children:[e.jsx("div",{className:"nice-retry-panel__icon",children:l??"⚠️"}),e.jsxs("div",{className:"nice-retry-panel__content",children:[e.jsx("div",{className:"nice-retry-panel__title",children:r}),e.jsx("p",{className:"nice-retry-panel__message",children:v})]}),e.jsxs("div",{className:"nice-retry-panel__actions",children:[e.jsx("button",{type:"button",className:"nice-btn nice-btn--primary nice-btn--sm",onClick:_,children:c}),n&&g>0&&e.jsxs("span",{className:"nice-retry-panel__countdown",children:["Auto-retry in ",g,"s"]})]})]})};function ee(s){return window.addEventListener("online",s),window.addEventListener("offline",s),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",s)}}function se(){return navigator.onLine}function ne(){return!0}const te=({message:s="You are offline. Some features may be unavailable.",variant:t="warning",icon:c,size:r="md",className:n,style:a,"data-testid":l})=>i.useSyncExternalStore(ee,se,ne)?null:e.jsxs("div",{className:`nice-offline-banner nice-offline-banner--${t} nice-offline-banner--${r} ${n||""}`,style:a,role:"alert","aria-live":"assertive","data-testid":l,children:[e.jsx("span",{className:"nice-offline-banner__icon",children:c??"📡"}),e.jsx("span",{className:"nice-offline-banner__message",children:s})]});function q({timeoutMs:s=1e4,slowThresholdMs:t=3e3,onTimeout:c,autoRetry:r=!1,autoRetryCount:n=3}={}){const[a,l]=i.useState(!1),[m,d]=i.useState(!1),[p,h]=i.useState(!1),[g,x]=i.useState(0),[f,v]=i.useState(0),_=i.useRef(null),o=i.useRef(null),w=i.useRef(null),j=i.useRef(0),N=i.useCallback(()=>{_.current&&clearTimeout(_.current),o.current&&clearTimeout(o.current),w.current&&clearInterval(w.current)},[]),k=i.useCallback(()=>{N(),l(!0),d(!1),h(!1),x(0),j.current=Date.now(),w.current=setInterval(()=>{x(Date.now()-j.current)},200),_.current=setTimeout(()=>{d(!0)},t),o.current=setTimeout(()=>{h(!0),l(!1),d(!1),N(),c?.()},s)},[N,t,s,c]),$=i.useCallback(()=>{N(),l(!1),d(!1)},[N]),u=i.useCallback(()=>{v(y=>y+1),h(!1),k()},[k]);return i.useEffect(()=>()=>N(),[N]),i.useEffect(()=>{if(r&&p&&f<n){const y=Math.pow(2,f)*1e3,T=setTimeout(()=>u(),y);return()=>clearTimeout(T)}},[r,n,p,f,u]),{isLoading:a,isSlow:m,isTimedOut:p,elapsed:g,retryCount:f,start:k,stop:$,retry:u}}const ie=({timeoutMs:s=1e4,slowThresholdMs:t=3e3,onTimeout:c,onRetry:r,autoRetry:n=!1,autoRetryCount:a=3,showProgress:l=!0,slowMessage:m="Operacja trwa dłużej niż zwykle…",timeoutMessage:d="Przekroczono limit czasu. Spróbuj ponownie.",loading:p,children:h,size:g="md",className:x,style:f,"data-testid":v})=>{const{isSlow:_,isTimedOut:o,elapsed:w,retry:j}=q({timeoutMs:s,slowThresholdMs:t,onTimeout:c,autoRetry:n,autoRetryCount:a}),N=()=>{j(),r?.()};if(!p)return e.jsx(e.Fragment,{children:h});if(o)return e.jsxs("div",{className:`nice-timeout-feedback nice-timeout-feedback--timeout nice-timeout-feedback--${g} ${x??""}`,style:f,role:"alert","data-testid":v,children:[e.jsx("p",{className:"nice-timeout-feedback__message",children:d}),e.jsx("button",{className:"nice-timeout-feedback__retry-btn",onClick:N,type:"button",children:"Spróbuj ponownie"})]});const k=Math.min(100,w/s*100);return e.jsxs("div",{className:`nice-timeout-feedback nice-timeout-feedback--${g} ${_?"nice-timeout-feedback--slow":""} ${x??""}`,style:f,"data-testid":v,children:[e.jsx("div",{className:"nice-timeout-feedback__spinner","aria-busy":"true"}),_&&e.jsx("p",{className:"nice-timeout-feedback__slow-msg",children:m}),l&&e.jsx("div",{className:"nice-timeout-feedback__progress",role:"progressbar","aria-valuenow":k,"aria-valuemin":0,"aria-valuemax":100,children:e.jsx("div",{className:"nice-timeout-feedback__progress-bar",style:{width:`${k}%`}})})]})},O=i.forwardRef(({visible:s,onAcceptAll:t,onRejectAll:c,onSave:r,categories:n=["necessary","analytics","marketing","preferences"],defaults:a,position:l="bottom",size:m="md",policyUrl:d,showDetails:p=!1,className:h,style:g,id:x,...f},v)=>{const _=C.Ss(x),{t:o}=C.$o(),[w,j]=i.useState(!0),N=s??w,[k,$]=i.useState(p),[u,y]=i.useState(()=>{const b={necessary:!0,analytics:!1,marketing:!1,preferences:!1};return a&&Object.assign(b,a),b.necessary=!0,b}),T={necessary:o("cookie.necessary","Necessary"),analytics:o("cookie.analytics","Analytics"),marketing:o("cookie.marketing","Marketing"),preferences:o("cookie.preferences","Preferences")},L={necessary:o("cookie.necessaryDesc","Required for the website to function. Cannot be disabled."),analytics:o("cookie.analyticsDesc","Help us understand how visitors interact with the website."),marketing:o("cookie.marketingDesc","Used to deliver relevant advertisements."),preferences:o("cookie.preferencesDesc","Allow the website to remember your choices.")},I=i.useCallback(()=>{const b={necessary:!0,analytics:!0,marketing:!0,preferences:!0};t?.(),r?.(b),j(!1)},[t,r]),E=i.useCallback(()=>{const b={necessary:!0,analytics:!1,marketing:!1,preferences:!1};c?.(),r?.(b),j(!1)},[c,r]),R=i.useCallback(()=>{r?.({...u,necessary:!0}),j(!1)},[u,r]);return N?e.jsx("div",{ref:v,id:_,className:`nice-cookie-consent nice-cookie-consent--${l} nice-cookie-consent--${m} ${h??""}`,style:g,role:"dialog","aria-label":o("cookie.label","Cookie Consent"),"aria-modal":"true",...f,children:e.jsxs("div",{className:"nice-cookie-consent__content",children:[e.jsxs("p",{className:"nice-cookie-consent__message",children:[o("cookie.message","We use cookies to enhance your experience. By continuing to visit this site you agree to our use of cookies."),d&&e.jsxs(e.Fragment,{children:[" ",e.jsx("a",{href:d,className:"nice-cookie-consent__link",target:"_blank",rel:"noopener noreferrer",children:o("cookie.learnMore","Learn more")})]})]}),k&&e.jsx("div",{className:"nice-cookie-consent__details",children:n.map(b=>e.jsxs("label",{className:"nice-cookie-consent__category",children:[e.jsx("input",{type:"checkbox",checked:u[b],disabled:b==="necessary",onChange:D=>y(z=>({...z,[b]:D.target.checked})),className:"nice-cookie-consent__checkbox"}),e.jsxs("div",{className:"nice-cookie-consent__cat-info",children:[e.jsx("strong",{children:T[b]}),e.jsx("span",{className:"nice-cookie-consent__cat-desc",children:L[b]})]})]},b))}),e.jsxs("div",{className:"nice-cookie-consent__actions",children:[!k&&e.jsx("button",{type:"button",className:"nice-cookie-consent__btn nice-cookie-consent__btn--details",onClick:()=>$(!0),children:o("cookie.customize","Customize")}),k&&e.jsx("button",{type:"button",className:"nice-cookie-consent__btn nice-cookie-consent__btn--save",onClick:R,children:o("cookie.savePreferences","Save preferences")}),e.jsx("button",{type:"button",className:"nice-cookie-consent__btn nice-cookie-consent__btn--reject",onClick:E,children:o("cookie.rejectAll","Reject all")}),e.jsx("button",{type:"button",className:"nice-cookie-consent__btn nice-cookie-consent__btn--accept",onClick:I,children:o("cookie.acceptAll","Accept all")})]})]})}):null});O.displayName="NiceCookieConsent";const H=i.forwardRef(({onSubmit:s,onForgotPassword:t,onRegister:c,loading:r=!1,error:n,variant:a="primary",size:l="md",showRememberMe:m=!0,showForgotPassword:d=!0,showRegister:p=!1,title:h,logo:g,usernameLabel:x,passwordLabel:f,usernamePlaceholder:v,passwordPlaceholder:_,className:o,style:w,id:j,...N},k)=>{const $=C.Ss(j),{t:u}=C.$o(),[y,T]=i.useState(""),[L,I]=i.useState(""),[E,R]=i.useState(!1),[b,D]=i.useState(!1),z=`${$}-user`,F=`${$}-pass`,B=`${$}-remember`,V=i.useCallback(S=>{S.preventDefault(),!r&&s?.({username:y,password:L,rememberMe:E})},[r,y,L,E,s]);return e.jsxs("form",{ref:k,id:$,className:`nice-login nice-login--${a} nice-login--${l} ${o??""}`,style:w,onSubmit:V,noValidate:!0,...N,children:[g&&e.jsx("div",{className:"nice-login__logo",children:g}),h&&e.jsx("h2",{className:"nice-login__title",children:h??u("login.title","Sign In")}),n&&e.jsx("div",{className:"nice-login__error",role:"alert",children:n}),e.jsxs("div",{className:"nice-login__field",children:[e.jsx("label",{htmlFor:z,className:"nice-login__label",children:x??u("login.username","Username")}),e.jsx("input",{id:z,className:"nice-login__input",type:"text",value:y,onChange:S=>T(S.target.value),placeholder:v??u("login.usernamePlaceholder","Enter your username"),autoComplete:"username",required:!0,disabled:r,"aria-required":"true"})]}),e.jsxs("div",{className:"nice-login__field",children:[e.jsx("label",{htmlFor:F,className:"nice-login__label",children:f??u("login.password","Password")}),e.jsxs("div",{className:"nice-login__password-wrap",children:[e.jsx("input",{id:F,className:"nice-login__input",type:b?"text":"password",value:L,onChange:S=>I(S.target.value),placeholder:_??u("login.passwordPlaceholder","Enter your password"),autoComplete:"current-password",required:!0,disabled:r,"aria-required":"true"}),e.jsx("button",{type:"button",className:"nice-login__toggle-password",onClick:()=>D(!b),"aria-label":b?u("login.hidePassword","Hide password"):u("login.showPassword","Show password"),tabIndex:-1,children:b?"🙈":"👁"})]})]}),e.jsxs("div",{className:"nice-login__options",children:[m&&e.jsxs("label",{className:"nice-login__remember",htmlFor:B,children:[e.jsx("input",{id:B,type:"checkbox",checked:E,onChange:S=>R(S.target.checked),disabled:r}),e.jsx("span",{children:u("login.rememberMe","Remember me")})]}),d&&t&&e.jsx("button",{type:"button",className:"nice-login__forgot",onClick:t,disabled:r,children:u("login.forgotPassword","Forgot password?")})]}),e.jsx("button",{type:"submit",className:`nice-login__submit nice-login__submit--${a}`,disabled:r||!y||!L,children:r?u("login.loading","Signing in..."):u("login.submit","Sign In")}),p&&c&&e.jsxs("p",{className:"nice-login__register",children:[u("login.noAccount","Don't have an account?")," ",e.jsx("button",{type:"button",className:"nice-login__register-link",onClick:c,disabled:r,children:u("login.register","Register")})]})]})});H.displayName="NiceLoginForm";const A=class A extends i.Component{constructor(){super(...arguments),this.state={hasError:!1,error:null},this.handleReset=()=>{this.setState({hasError:!1,error:null})}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,c){this.props.onError?.(t,c)}render(){if(this.state.hasError&&this.state.error){const{fallback:t,showRetry:c=!0,retryLabel:r="Retry",title:n="Something went wrong"}=this.props;return typeof t=="function"?t(this.state.error,this.handleReset):t||e.jsxs("div",{className:"nice-error-boundary",role:"alert",children:[e.jsx("div",{className:"nice-error-boundary__icon",children:"⚠️"}),e.jsx("h2",{className:"nice-error-boundary__title",children:n}),e.jsx("p",{className:"nice-error-boundary__message",children:this.state.error.message}),c&&e.jsx("button",{type:"button",className:"nice-btn nice-btn--primary",onClick:this.handleReset,children:r})]})}return this.props.children}};A.displayName="NiceErrorBoundary";let M=A;exports.NiceAlert=U;exports.NiceConfirmDialog=X;exports.NiceCookieConsent=O;exports.NiceDrawer=Y;exports.NiceErrorBoundary=M;exports.NiceLoginForm=H;exports.NiceOfflineBanner=te;exports.NiceRetryPanel=Z;exports.NiceTimeoutFeedback=ie;exports.NiceToastContainer=W;exports.alertIcons=P;exports.useNiceTimeout=q;exports.useNiceToast=K;