@seij/common-ui 0.1.1 → 0.1.2

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/README.md CHANGED
@@ -1,7 +1,19 @@
1
1
  # @seij/common-ui
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ Business-oriented UI components for Seij applications, built on React and
4
+ designed to sit on top of Fluent UI while keeping a framework-agnostic direction
5
+ for our other applications..
4
6
 
5
- ## Running unit tests
7
+ ## What it provides
8
+
9
+ - Application shell and navigation building blocks.
10
+ - Form layout primitives and input controls (text, select, numbers, dates,
11
+ months, years, money, percent).
12
+ - Data display components (tables, list view, badges, tabs, info/error boxes).
13
+ - UX helpers like loaders, inline edit, error notifier, and button bar.
14
+ - Basic i18n utilities and locale resources (FR/EN).
15
+
16
+ ## Notes
17
+
18
+ - This package exposes UI primitives rather than a full design system.
6
19
 
7
- Run `nx test common-ui` to execute the unit tests.
package/dist/index.d.ts CHANGED
@@ -11,10 +11,9 @@ export * from './lib/datatabledynamic/DataTableDynamic';
11
11
  export * from './lib/error_notifier/ErrorNotifier';
12
12
  export * from './lib/errorbox/ErrorBox';
13
13
  export * from './lib/form_layout/FormLayout';
14
+ export * from './lib/i18n';
14
15
  export * from './lib/info_box/InfoBox';
15
16
  export * from './lib/inlineedit/InlineEdit';
16
- export * from './lib/year/InputDurationYears';
17
- export * from './lib/number';
18
17
  export * from './lib/listview/ListView';
19
18
  export * from './lib/loader/Loader';
20
19
  export * from './lib/localdate/InputLocalDate';
@@ -27,6 +26,7 @@ export * from './lib/month/InputDurationMonths';
27
26
  export * from './lib/month/InputMonth';
28
27
  export * from './lib/navigation/Navigation.types';
29
28
  export * from './lib/navigation/Navigation';
29
+ export * from './lib/number';
30
30
  export * from './lib/percent/InputPercent';
31
31
  export * from './lib/percent/LabelPercent';
32
32
  export * from './lib/percent/LabelPercentInt';
@@ -41,5 +41,6 @@ export * from './lib/view_layout/ViewFooter';
41
41
  export * from './lib/view_layout/ViewHeader';
42
42
  export * from './lib/view_layout/ViewLayout';
43
43
  export * from './lib/view_layout/ViewTitle';
44
+ export * from './lib/year/InputDurationYears';
44
45
  export * from './lib/year/InputYear';
45
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -7,44 +7,46 @@ import { CommonUi as b } from "./lib/common-ui.js";
7
7
  import { obfuscateLabel as I } from "./lib/commons/obfuscatelabel.js";
8
8
  import { DataTable as D, DataTableBody as L, DataTableCaption as c, DataTableCell as d, DataTableHead as s, DataTableHeaderCell as y, DataTableRow as B } from "./lib/data_table/DataTable.js";
9
9
  import { DataTableDynamic as w } from "./lib/datatabledynamic/DataTableDynamic.js";
10
- import { ErrorManager as A, useErrorNotifier as E } from "./lib/error_notifier/ErrorNotifier.js";
11
- import { ErrorBox as N } from "./lib/errorbox/ErrorBox.js";
12
- import { FormField as C, FormLayout as V, FormLayoutTable as h, FormSectionTitle as R, FormText as U } from "./lib/form_layout/FormLayout.js";
13
- import { InfoBox as g } from "./lib/info_box/InfoBox.js";
14
- import { InlineEdit as O } from "./lib/inlineedit/InlineEdit.js";
15
- import { InputDurationYears as Y } from "./lib/year/InputDurationYears.js";
16
- import { INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS as W, InputNumber as k } from "./lib/number/InputNumber.js";
17
- import { InputNumberDec as z } from "./lib/number/InputNumberDec.js";
18
- import { InputNumberInt as J } from "./lib/number/InputNumberInt.js";
19
- import { ListView as Q } from "./lib/listview/ListView.js";
20
- import { Loader as Z } from "./lib/loader/Loader.js";
21
- import { InputLocalDate as oo } from "./lib/localdate/InputLocalDate.js";
22
- import { LabelLocalDate as eo } from "./lib/localdate/LabelLocalDate.js";
23
- import { InputMoneyDec as po } from "./lib/money/InputMoneyDec.js";
24
- import { InputMoneyInt as mo } from "./lib/money/InputMoneyInt.js";
25
- import { LabelMoneyDec as fo } from "./lib/money/LabelMoneyDec.js";
26
- import { LabelMoneyInt as io } from "./lib/money/LabelMoneyInt.js";
27
- import { InputDurationMonths as bo } from "./lib/month/InputDurationMonths.js";
28
- import { InputMonth as Io } from "./lib/month/InputMonth.js";
29
- import { Navigation as Do } from "./lib/navigation/Navigation.js";
30
- import { InputPercent as co } from "./lib/percent/InputPercent.js";
31
- import { LabelPercent as yo, LabelRate as Bo } from "./lib/percent/LabelPercent.js";
32
- import { LabelPercentInt as wo } from "./lib/percent/LabelPercentInt.js";
33
- import { InputCombobox as Ao } from "./lib/select/InputCombobox.js";
34
- import { InputSelect as Fo } from "./lib/select/InputSelect.js";
35
- import { SwitchButton as Po } from "./lib/switchbutton/SwitchButton.js";
36
- import { Tabs as Vo, TabsList as ho, TabsPanel as Ro, TabsTab as Uo } from "./lib/tabs/Tabs.js";
37
- import { InputText as go } from "./lib/text/InputText.js";
38
- import { Description as Oo } from "./lib/typography/description/Description.js";
39
- import { LabelAndDescription as Yo } from "./lib/typography/label_and_description/LabelAndDescription.js";
40
- import { Todo as Wo } from "./lib/typography/todo/Todo.js";
41
- import { SectionTitle as qo } from "./lib/typography/sectiontitle/SectionTitle.js";
42
- import { ViewBody as Go } from "./lib/view_layout/ViewBody.js";
43
- import { ViewFooter as Ko } from "./lib/view_layout/ViewFooter.js";
44
- import { ViewHeader as Xo } from "./lib/view_layout/ViewHeader.js";
45
- import { ViewLayout as $o } from "./lib/view_layout/ViewLayout.js";
46
- import { ViewTitle as rr } from "./lib/view_layout/ViewTitle.js";
47
- import { InputYear as tr } from "./lib/year/InputYear.js";
10
+ import { ErrorManager as P, useErrorNotifier as S } from "./lib/error_notifier/ErrorNotifier.js";
11
+ import { ErrorBox as F } from "./lib/errorbox/ErrorBox.js";
12
+ import { FormField as C, FormLayout as V, FormLayoutTable as g, FormSectionTitle as h, FormText as R } from "./lib/form_layout/FormLayout.js";
13
+ import { createI18nEngine as _ } from "./lib/i18n/i18n.factory.js";
14
+ import { I18nProvider as H, useI18n as O } from "./lib/i18n/i18n.react.js";
15
+ import { InfoBox as j } from "./lib/info_box/InfoBox.js";
16
+ import { InlineEdit as k } from "./lib/inlineedit/InlineEdit.js";
17
+ import { ListView as z } from "./lib/listview/ListView.js";
18
+ import { Loader as J } from "./lib/loader/Loader.js";
19
+ import { InputLocalDate as Q } from "./lib/localdate/InputLocalDate.js";
20
+ import { LabelLocalDate as Z } from "./lib/localdate/LabelLocalDate.js";
21
+ import { InputMoneyDec as oo } from "./lib/money/InputMoneyDec.js";
22
+ import { InputMoneyInt as eo } from "./lib/money/InputMoneyInt.js";
23
+ import { LabelMoneyDec as po } from "./lib/money/LabelMoneyDec.js";
24
+ import { LabelMoneyInt as mo } from "./lib/money/LabelMoneyInt.js";
25
+ import { InputDurationMonths as fo } from "./lib/month/InputDurationMonths.js";
26
+ import { InputMonth as io } from "./lib/month/InputMonth.js";
27
+ import { Navigation as bo } from "./lib/navigation/Navigation.js";
28
+ import { INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS as Io, InputNumber as To } from "./lib/number/InputNumber.js";
29
+ import { InputNumberDec as Lo } from "./lib/number/InputNumberDec.js";
30
+ import { InputNumberInt as so } from "./lib/number/InputNumberInt.js";
31
+ import { InputPercent as Bo } from "./lib/percent/InputPercent.js";
32
+ import { LabelPercent as wo, LabelRate as Eo } from "./lib/percent/LabelPercent.js";
33
+ import { LabelPercentInt as So } from "./lib/percent/LabelPercentInt.js";
34
+ import { InputCombobox as Fo } from "./lib/select/InputCombobox.js";
35
+ import { InputSelect as Co } from "./lib/select/InputSelect.js";
36
+ import { SwitchButton as go } from "./lib/switchbutton/SwitchButton.js";
37
+ import { Tabs as Ro, TabsList as Uo, TabsPanel as _o, TabsTab as vo } from "./lib/tabs/Tabs.js";
38
+ import { InputText as Oo } from "./lib/text/InputText.js";
39
+ import { Description as jo } from "./lib/typography/description/Description.js";
40
+ import { LabelAndDescription as ko } from "./lib/typography/label_and_description/LabelAndDescription.js";
41
+ import { Todo as zo } from "./lib/typography/todo/Todo.js";
42
+ import { SectionTitle as Jo } from "./lib/typography/sectiontitle/SectionTitle.js";
43
+ import { ViewBody as Qo } from "./lib/view_layout/ViewBody.js";
44
+ import { ViewFooter as Zo } from "./lib/view_layout/ViewFooter.js";
45
+ import { ViewHeader as or } from "./lib/view_layout/ViewHeader.js";
46
+ import { ViewLayout as er } from "./lib/view_layout/ViewLayout.js";
47
+ import { ViewTitle as pr } from "./lib/view_layout/ViewTitle.js";
48
+ import { InputDurationYears as mr } from "./lib/year/InputDurationYears.js";
49
+ import { InputYear as fr } from "./lib/year/InputYear.js";
48
50
  export {
49
51
  p as ApplicationShell,
50
52
  m as Badge,
@@ -59,55 +61,58 @@ export {
59
61
  s as DataTableHead,
60
62
  y as DataTableHeaderCell,
61
63
  B as DataTableRow,
62
- Oo as Description,
63
- N as ErrorBox,
64
- A as ErrorManager,
64
+ jo as Description,
65
+ F as ErrorBox,
66
+ P as ErrorManager,
65
67
  C as FormField,
66
68
  V as FormLayout,
67
- h as FormLayoutTable,
68
- R as FormSectionTitle,
69
- U as FormText,
70
- W as INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS,
71
- g as InfoBox,
72
- O as InlineEdit,
73
- Ao as InputCombobox,
74
- bo as InputDurationMonths,
75
- Y as InputDurationYears,
76
- oo as InputLocalDate,
77
- po as InputMoneyDec,
78
- mo as InputMoneyInt,
79
- Io as InputMonth,
80
- k as InputNumber,
81
- z as InputNumberDec,
82
- J as InputNumberInt,
83
- co as InputPercent,
84
- Fo as InputSelect,
85
- go as InputText,
86
- tr as InputYear,
87
- Yo as LabelAndDescription,
88
- eo as LabelLocalDate,
89
- fo as LabelMoneyDec,
90
- io as LabelMoneyInt,
91
- yo as LabelPercent,
92
- wo as LabelPercentInt,
93
- Bo as LabelRate,
94
- Q as ListView,
95
- Z as Loader,
96
- Do as Navigation,
97
- qo as SectionTitle,
69
+ g as FormLayoutTable,
70
+ h as FormSectionTitle,
71
+ R as FormText,
72
+ H as I18nProvider,
73
+ Io as INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS,
74
+ j as InfoBox,
75
+ k as InlineEdit,
76
+ Fo as InputCombobox,
77
+ fo as InputDurationMonths,
78
+ mr as InputDurationYears,
79
+ Q as InputLocalDate,
80
+ oo as InputMoneyDec,
81
+ eo as InputMoneyInt,
82
+ io as InputMonth,
83
+ To as InputNumber,
84
+ Lo as InputNumberDec,
85
+ so as InputNumberInt,
86
+ Bo as InputPercent,
87
+ Co as InputSelect,
88
+ Oo as InputText,
89
+ fr as InputYear,
90
+ ko as LabelAndDescription,
91
+ Z as LabelLocalDate,
92
+ po as LabelMoneyDec,
93
+ mo as LabelMoneyInt,
94
+ wo as LabelPercent,
95
+ So as LabelPercentInt,
96
+ Eo as LabelRate,
97
+ z as ListView,
98
+ J as Loader,
99
+ bo as Navigation,
100
+ Jo as SectionTitle,
98
101
  e as SeijUIProvider,
99
- Po as SwitchButton,
100
- Vo as Tabs,
101
- ho as TabsList,
102
- Ro as TabsPanel,
103
- Uo as TabsTab,
104
- Wo as Todo,
105
- Go as ViewBody,
106
- Ko as ViewFooter,
107
- Xo as ViewHeader,
108
- $o as ViewLayout,
109
- rr as ViewTitle,
102
+ go as SwitchButton,
103
+ Ro as Tabs,
104
+ Uo as TabsList,
105
+ _o as TabsPanel,
106
+ vo as TabsTab,
107
+ zo as Todo,
108
+ Qo as ViewBody,
109
+ Zo as ViewFooter,
110
+ or as ViewHeader,
111
+ er as ViewLayout,
112
+ pr as ViewTitle,
113
+ _ as createI18nEngine,
110
114
  I as obfuscateLabel,
111
- E as useErrorNotifier
115
+ S as useErrorNotifier,
116
+ O as useI18n
112
117
  };
113
118
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,10 +1,10 @@
1
- import { jsxs as h, jsx as l } from "react/jsx-runtime";
2
- import { makeStyles as M, tokens as m, NavDrawer as A, NavDrawerHeader as F, NavDrawerBody as H, Tooltip as V, Hamburger as U } from "@fluentui/react-components";
1
+ import { jsxs as h, jsx as n } from "react/jsx-runtime";
2
+ import { makeStyles as j, tokens as m, NavDrawer as M, NavDrawerHeader as A, NavDrawerBody as H, Tooltip as V, Hamburger as U } from "@fluentui/react-components";
3
3
  import { useState as u, useMemo as q } from "react";
4
4
  import { Navigation as z } from "../navigation/Navigation.js";
5
5
  import { createNavigationTreeItemServiceImpl as E } from "../navigation/NavigationService.js";
6
- import { TitleBar as N } from "./TitleBar.js";
7
- const y = M({
6
+ import { TitleBar as I } from "./TitleBar.js";
7
+ const y = j({
8
8
  shell: {
9
9
  width: "100vw",
10
10
  height: "100vh",
@@ -39,70 +39,70 @@ const y = M({
39
39
  });
40
40
  function R({
41
41
  applicationName: a,
42
- main: s,
42
+ main: d,
43
43
  navigationItems: o,
44
44
  userStatus: f,
45
45
  onClickHome: g,
46
46
  navigate: C,
47
47
  matchPath: w
48
48
  }) {
49
- const t = o.find((n) => "path" in n && n.path !== null && w(n.path)), x = t == null ? void 0 : t.id, b = t && "parentId" in t && t.parentId !== null ? [t.parentId] : [], i = y(), [d, B] = u(!0), [S, k] = u(x ?? ""), [r, c] = u(b), _ = q(() => E(o), [o]), v = () => {
50
- B(!d);
51
- }, D = (n) => {
52
- const e = _.findById(n);
49
+ const l = o.find((t) => "path" in t && t.path !== null && w(t.path)), x = l?.id, b = l && "parentId" in l && l.parentId !== null ? [l.parentId] : [], i = y(), [s, B] = u(!0), [S, k] = u(x ?? ""), [r, c] = u(b), _ = q(() => E(o), [o]), v = () => {
50
+ B(!s);
51
+ }, D = (t) => {
52
+ const e = _.findById(t);
53
53
  k(e.id);
54
54
  const p = "parentId" in e ? e.parentId : null;
55
- p && (r.find((j) => j === p) || c([...r, p])), "path" in e && e.path && C(e.path);
56
- }, O = (n) => {
57
- r.find((e) => e === n) ? c(r.filter((e) => e !== n)) : c([...r, n]);
58
- }, T = [];
59
- return t && "parentId" in t && t.parentId !== null && T.push(t.parentId), /* @__PURE__ */ h("div", { "data-e2e-id": "shell", className: i.shell, children: [
60
- /* @__PURE__ */ l("div", { "data-e2e-id": "shell__menu_top", className: i.titleBar, children: d ? null : /* @__PURE__ */ l(
61
- N,
55
+ p && (r.find((T) => T === p) || c([...r, p])), "path" in e && e.path && C(e.path);
56
+ }, O = (t) => {
57
+ r.find((e) => e === t) ? c(r.filter((e) => e !== t)) : c([...r, t]);
58
+ }, F = [];
59
+ return l && "parentId" in l && l.parentId !== null && F.push(l.parentId), /* @__PURE__ */ h("div", { "data-e2e-id": "shell", className: i.shell, children: [
60
+ /* @__PURE__ */ n("div", { "data-e2e-id": "shell__menu_top", className: i.titleBar, children: s ? null : /* @__PURE__ */ n(
61
+ I,
62
62
  {
63
63
  applicationName: a,
64
64
  userStatus: f,
65
65
  onClickHome: g,
66
- hamburger: /* @__PURE__ */ l(I, { onClick: v })
66
+ hamburger: /* @__PURE__ */ n(N, { onClick: v })
67
67
  }
68
68
  ) }),
69
69
  /* @__PURE__ */ h("div", { "data-e2e-id": "shell__main", className: i.main, children: [
70
70
  /* @__PURE__ */ h(
71
- A,
71
+ M,
72
72
  {
73
73
  selectedValue: S,
74
- open: d,
74
+ open: s,
75
75
  density: "small",
76
76
  type: "inline",
77
77
  openCategories: r,
78
- onNavItemSelect: (n, e) => {
78
+ onNavItemSelect: (t, e) => {
79
79
  D(e.value);
80
80
  },
81
- onNavCategoryItemToggle: (n, e) => {
81
+ onNavCategoryItemToggle: (t, e) => {
82
82
  O(e.categoryValue ?? "");
83
83
  },
84
84
  children: [
85
- /* @__PURE__ */ l(
86
- N,
85
+ /* @__PURE__ */ n(
86
+ I,
87
87
  {
88
88
  applicationName: a,
89
89
  userStatus: f,
90
90
  onClickHome: g,
91
- hamburger: /* @__PURE__ */ l(I, { onClick: v })
91
+ hamburger: /* @__PURE__ */ n(N, { onClick: v })
92
92
  }
93
93
  ),
94
- /* @__PURE__ */ l(F, {}),
95
- /* @__PURE__ */ l(H, { children: /* @__PURE__ */ l(z, { items: o }) })
94
+ /* @__PURE__ */ n(A, {}),
95
+ /* @__PURE__ */ n(H, { children: /* @__PURE__ */ n(z, { items: o }) })
96
96
  ]
97
97
  }
98
98
  ),
99
- /* @__PURE__ */ l("div", { "data-e2e-id": "shell__content", className: i.content, children: s })
99
+ /* @__PURE__ */ n("div", { "data-e2e-id": "shell__content", className: i.content, children: d })
100
100
  ] })
101
101
  ] });
102
102
  }
103
- const I = ({ onClick: a }) => {
104
- const s = y();
105
- return /* @__PURE__ */ l(V, { content: "Navigation", relationship: "label", children: /* @__PURE__ */ l(U, { className: s.bugerIcon, onClick: a }) });
103
+ const N = ({ onClick: a }) => {
104
+ const d = y();
105
+ return /* @__PURE__ */ n(V, { content: "Navigation", relationship: "label", children: /* @__PURE__ */ n(U, { className: d.bugerIcon, onClick: a }) });
106
106
  };
107
107
  export {
108
108
  R as ApplicationShell
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationShell.js","sources":["../../../src/lib/applicationshell/ApplicationShell.tsx"],"sourcesContent":["import {\n Hamburger,\n makeStyles,\n NavDrawer,\n NavDrawerBody,\n NavDrawerHeader,\n tokens,\n Tooltip,\n} from \"@fluentui/react-components\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { NavigationTreeItem } from \"../navigation/Navigation.types\";\nimport { createNavigationTreeItemServiceImpl } from \"../navigation/NavigationService\";\nimport { UserStatus } from \"./ApplicationShell.types\";\nimport { TitleBar } from \"./TitleBar\";\n\nconst useApplicationShellStyles = makeStyles({\n shell: {\n width: \"100vw\",\n height: \"100vh\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n titleBar: {\n width: \"100%\",\n height: \"48px\",\n flex: 0,\n },\n main: {\n overflow: \"hidden\",\n display: \"flex\",\n height: \"100%\",\n },\n content: {\n flex: \"1\",\n display: \"bloc\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n overflow: \"auto\",\n backgroundColor: tokens.colorNeutralBackground2,\n },\n bugerIcon: {\n color: tokens.colorNeutralForegroundOnBrand,\n \":hover\": {\n color: tokens.colorNeutralForegroundOnBrand,\n },\n },\n});\n\nexport function ApplicationShell({\n applicationName,\n main,\n navigationItems,\n userStatus,\n onClickHome,\n navigate,\n matchPath,\n}: {\n applicationName: string;\n main: ReactNode;\n navigationItems: NavigationTreeItem[];\n userStatus: UserStatus;\n onClickHome: () => void;\n navigate: (path: string) => void;\n matchPath: (path: string | undefined) => boolean;\n}) {\n // test si le chemin courant du navigateur correspond à cet item\n // attention, on est obligés de tester tous les items, qu'ils aient\n // un lien ou pas, d'où le url-inconnue pour ceux qui n'ont pas de lien.\n // On est obligés car useMatch est un hook que l'on ne peut pas lancer\n // de manière conditionnelle\n const navigationItemFound = navigationItems.find((it) => \"path\" in it && it.path !== null && matchPath(it.path));\n const navigationItemSelectedFromUrl = navigationItemFound?.id;\n const defaultOpenCategory =\n navigationItemFound && \"parentId\" in navigationItemFound && navigationItemFound.parentId !== null\n ? [navigationItemFound.parentId]\n : [];\n\n const styles = useApplicationShellStyles();\n const [navDrawerOpened, setNavDrawerOpened] = useState<boolean>(true);\n const [selectedItem, setSelectedItem] = useState<string>(navigationItemSelectedFromUrl ?? \"\");\n const [openedCategories, setOpenCategories] = useState<string[]>(defaultOpenCategory);\n\n const navigationService = useMemo(() => createNavigationTreeItemServiceImpl(navigationItems), [navigationItems]);\n const handleClickHamburger = () => {\n setNavDrawerOpened(!navDrawerOpened);\n };\n\n const handleClickMenuItem = (itemId: string) => {\n const item = navigationService.findById(itemId);\n setSelectedItem(item.id);\n const parentId = \"parentId\" in item ? item.parentId : null;\n if (parentId) {\n if (!openedCategories.find((cat) => cat === parentId)) {\n setOpenCategories([...openedCategories, parentId]);\n }\n }\n if (\"path\" in item && item.path) navigate(item.path);\n };\n\n const handleClickCategory = (categoryId: string) => {\n if (!openedCategories.find((cat) => cat === categoryId)) {\n setOpenCategories([...openedCategories, categoryId]);\n } else {\n setOpenCategories(openedCategories.filter((it) => it !== categoryId));\n }\n };\n\n const openCategories: string[] = [];\n if (navigationItemFound && \"parentId\" in navigationItemFound && navigationItemFound.parentId !== null) {\n openCategories.push(navigationItemFound.parentId);\n }\n\n return (\n <div data-e2e-id=\"shell\" className={styles.shell}>\n <div data-e2e-id=\"shell__menu_top\" className={styles.titleBar}>\n {!navDrawerOpened ? (\n <TitleBar\n applicationName={applicationName}\n userStatus={userStatus}\n onClickHome={onClickHome}\n hamburger={<MenuBurger onClick={handleClickHamburger} />}\n />\n ) : null}\n </div>\n <div data-e2e-id=\"shell__main\" className={styles.main}>\n <NavDrawer\n selectedValue={selectedItem}\n open={navDrawerOpened}\n density={\"small\"}\n type={\"inline\"}\n openCategories={openedCategories}\n onNavItemSelect={(e, data) => {\n handleClickMenuItem(data.value);\n }}\n onNavCategoryItemToggle={(e, data) => {\n handleClickCategory(data.categoryValue ?? \"\");\n }}\n >\n <TitleBar\n applicationName={applicationName}\n userStatus={userStatus}\n onClickHome={onClickHome}\n hamburger={<MenuBurger onClick={handleClickHamburger} />}\n />\n <NavDrawerHeader></NavDrawerHeader>\n <NavDrawerBody>\n <Navigation items={navigationItems} />\n </NavDrawerBody>\n </NavDrawer>\n <div data-e2e-id=\"shell__content\" className={styles.content}>\n {main}\n </div>\n </div>\n </div>\n );\n}\n\nconst MenuBurger = ({ onClick }: { onClick: () => void }) => {\n const styles = useApplicationShellStyles();\n return (\n <Tooltip content=\"Navigation\" relationship=\"label\">\n <Hamburger className={styles.bugerIcon} onClick={onClick} />\n </Tooltip>\n );\n};\n"],"names":["useApplicationShellStyles","makeStyles","tokens","ApplicationShell","applicationName","main","navigationItems","userStatus","onClickHome","navigate","matchPath","navigationItemFound","it","navigationItemSelectedFromUrl","defaultOpenCategory","styles","navDrawerOpened","setNavDrawerOpened","useState","selectedItem","setSelectedItem","openedCategories","setOpenCategories","navigationService","useMemo","createNavigationTreeItemServiceImpl","handleClickHamburger","handleClickMenuItem","itemId","item","parentId","cat","handleClickCategory","categoryId","openCategories","jsx","TitleBar","MenuBurger","jsxs","NavDrawer","e","data","NavDrawerHeader","NavDrawerBody","Navigation","onClick","Tooltip","Hamburger"],"mappings":";;;;;;AAgBA,MAAMA,IAA4BC,EAAW;AAAA,EAC3C,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,EAAA;AAAA,EAEZ,UAAU;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,EAAA;AAAA,EAER,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAAA,EAEV,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,iBAAiBC,EAAO;AAAA,EAAA;AAAA,EAE1B,WAAW;AAAA,IACT,OAAOA,EAAO;AAAA,IACd,UAAU;AAAA,MACR,OAAOA,EAAO;AAAA,IAAA;AAAA,EAChB;AAEJ,CAAC;AAEM,SAASC,EAAiB;AAAA,EAC/B,iBAAAC;AAAA,EACA,MAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,GAQG;AAMD,QAAMC,IAAsBL,EAAgB,KAAK,CAACM,MAAO,UAAUA,KAAMA,EAAG,SAAS,QAAQF,EAAUE,EAAG,IAAI,CAAC,GACzGC,IAAgCF,KAAA,gBAAAA,EAAqB,IACrDG,IACJH,KAAuB,cAAcA,KAAuBA,EAAoB,aAAa,OACzF,CAACA,EAAoB,QAAQ,IAC7B,CAAA,GAEAI,IAASf,EAAA,GACT,CAACgB,GAAiBC,CAAkB,IAAIC,EAAkB,EAAI,GAC9D,CAACC,GAAcC,CAAe,IAAIF,EAAiBL,KAAiC,EAAE,GACtF,CAACQ,GAAkBC,CAAiB,IAAIJ,EAAmBJ,CAAmB,GAE9ES,IAAoBC,EAAQ,MAAMC,EAAoCnB,CAAe,GAAG,CAACA,CAAe,CAAC,GACzGoB,IAAuB,MAAM;AACjC,IAAAT,EAAmB,CAACD,CAAe;AAAA,EACrC,GAEMW,IAAsB,CAACC,MAAmB;AAC9C,UAAMC,IAAON,EAAkB,SAASK,CAAM;AAC9C,IAAAR,EAAgBS,EAAK,EAAE;AACvB,UAAMC,IAAW,cAAcD,IAAOA,EAAK,WAAW;AACtD,IAAIC,MACGT,EAAiB,KAAK,CAACU,MAAQA,MAAQD,CAAQ,KAClDR,EAAkB,CAAC,GAAGD,GAAkBS,CAAQ,CAAC,IAGjD,UAAUD,KAAQA,EAAK,QAAMpB,EAASoB,EAAK,IAAI;AAAA,EACrD,GAEMG,IAAsB,CAACC,MAAuB;AAClD,IAAKZ,EAAiB,KAAK,CAACU,MAAQA,MAAQE,CAAU,IAGpDX,EAAkBD,EAAiB,OAAO,CAACT,MAAOA,MAAOqB,CAAU,CAAC,IAFpEX,EAAkB,CAAC,GAAGD,GAAkBY,CAAU,CAAC;AAAA,EAIvD,GAEMC,IAA2B,CAAA;AACjC,SAAIvB,KAAuB,cAAcA,KAAuBA,EAAoB,aAAa,QAC/FuB,EAAe,KAAKvB,EAAoB,QAAQ,qBAI/C,OAAA,EAAI,eAAY,SAAQ,WAAWI,EAAO,OACzC,UAAA;AAAA,IAAA,gBAAAoB,EAAC,SAAI,eAAY,mBAAkB,WAAWpB,EAAO,UAClD,UAACC,IAOE,OANF,gBAAAmB;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,iBAAAhC;AAAA,QACA,YAAAG;AAAA,QACA,aAAAC;AAAA,QACA,WAAW,gBAAA2B,EAACE,GAAA,EAAW,SAASX,EAAA,CAAsB;AAAA,MAAA;AAAA,IAAA,EAEtD,CACN;AAAA,sBACC,OAAA,EAAI,eAAY,eAAc,WAAWX,EAAO,MAC/C,UAAA;AAAA,MAAA,gBAAAuB;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,eAAepB;AAAA,UACf,MAAMH;AAAA,UACN,SAAS;AAAA,UACT,MAAM;AAAA,UACN,gBAAgBK;AAAA,UAChB,iBAAiB,CAACmB,GAAGC,MAAS;AAC5B,YAAAd,EAAoBc,EAAK,KAAK;AAAA,UAChC;AAAA,UACA,yBAAyB,CAACD,GAAGC,MAAS;AACpC,YAAAT,EAAoBS,EAAK,iBAAiB,EAAE;AAAA,UAC9C;AAAA,UAEA,UAAA;AAAA,YAAA,gBAAAN;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,iBAAAhC;AAAA,gBACA,YAAAG;AAAA,gBACA,aAAAC;AAAA,gBACA,WAAW,gBAAA2B,EAACE,GAAA,EAAW,SAASX,EAAA,CAAsB;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEvDgB,GAAA,EAAgB;AAAA,8BAChBC,GAAA,EACC,UAAA,gBAAAR,EAACS,GAAA,EAAW,OAAOtC,GAAiB,EAAA,CACtC;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,wBAED,OAAA,EAAI,eAAY,kBAAiB,WAAWS,EAAO,SACjD,UAAAV,EAAA,CACH;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEA,MAAMgC,IAAa,CAAC,EAAE,SAAAQ,QAAuC;AAC3D,QAAM9B,IAASf,EAAA;AACf,SACE,gBAAAmC,EAACW,GAAA,EAAQ,SAAQ,cAAa,cAAa,SACzC,UAAA,gBAAAX,EAACY,GAAA,EAAU,WAAWhC,EAAO,WAAW,SAAA8B,EAAA,CAAkB,GAC5D;AAEJ;"}
1
+ {"version":3,"file":"ApplicationShell.js","sources":["../../../src/lib/applicationshell/ApplicationShell.tsx"],"sourcesContent":["import {\n Hamburger,\n makeStyles,\n NavDrawer,\n NavDrawerBody,\n NavDrawerHeader,\n tokens,\n Tooltip,\n} from \"@fluentui/react-components\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { NavigationTreeItem } from \"../navigation/Navigation.types\";\nimport { createNavigationTreeItemServiceImpl } from \"../navigation/NavigationService\";\nimport { UserStatus } from \"./ApplicationShell.types\";\nimport { TitleBar } from \"./TitleBar\";\n\nconst useApplicationShellStyles = makeStyles({\n shell: {\n width: \"100vw\",\n height: \"100vh\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n titleBar: {\n width: \"100%\",\n height: \"48px\",\n flex: 0,\n },\n main: {\n overflow: \"hidden\",\n display: \"flex\",\n height: \"100%\",\n },\n content: {\n flex: \"1\",\n display: \"bloc\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-start\",\n overflow: \"auto\",\n backgroundColor: tokens.colorNeutralBackground2,\n },\n bugerIcon: {\n color: tokens.colorNeutralForegroundOnBrand,\n \":hover\": {\n color: tokens.colorNeutralForegroundOnBrand,\n },\n },\n});\n\nexport function ApplicationShell({\n applicationName,\n main,\n navigationItems,\n userStatus,\n onClickHome,\n navigate,\n matchPath,\n}: {\n applicationName: string;\n main: ReactNode;\n navigationItems: NavigationTreeItem[];\n userStatus: UserStatus;\n onClickHome: () => void;\n navigate: (path: string) => void;\n matchPath: (path: string | undefined) => boolean;\n}) {\n // test si le chemin courant du navigateur correspond à cet item\n // attention, on est obligés de tester tous les items, qu'ils aient\n // un lien ou pas, d'où le url-inconnue pour ceux qui n'ont pas de lien.\n // On est obligés car useMatch est un hook que l'on ne peut pas lancer\n // de manière conditionnelle\n const navigationItemFound = navigationItems.find((it) => \"path\" in it && it.path !== null && matchPath(it.path));\n const navigationItemSelectedFromUrl = navigationItemFound?.id;\n const defaultOpenCategory =\n navigationItemFound && \"parentId\" in navigationItemFound && navigationItemFound.parentId !== null\n ? [navigationItemFound.parentId]\n : [];\n\n const styles = useApplicationShellStyles();\n const [navDrawerOpened, setNavDrawerOpened] = useState<boolean>(true);\n const [selectedItem, setSelectedItem] = useState<string>(navigationItemSelectedFromUrl ?? \"\");\n const [openedCategories, setOpenCategories] = useState<string[]>(defaultOpenCategory);\n\n const navigationService = useMemo(() => createNavigationTreeItemServiceImpl(navigationItems), [navigationItems]);\n const handleClickHamburger = () => {\n setNavDrawerOpened(!navDrawerOpened);\n };\n\n const handleClickMenuItem = (itemId: string) => {\n const item = navigationService.findById(itemId);\n setSelectedItem(item.id);\n const parentId = \"parentId\" in item ? item.parentId : null;\n if (parentId) {\n if (!openedCategories.find((cat) => cat === parentId)) {\n setOpenCategories([...openedCategories, parentId]);\n }\n }\n if (\"path\" in item && item.path) navigate(item.path);\n };\n\n const handleClickCategory = (categoryId: string) => {\n if (!openedCategories.find((cat) => cat === categoryId)) {\n setOpenCategories([...openedCategories, categoryId]);\n } else {\n setOpenCategories(openedCategories.filter((it) => it !== categoryId));\n }\n };\n\n const openCategories: string[] = [];\n if (navigationItemFound && \"parentId\" in navigationItemFound && navigationItemFound.parentId !== null) {\n openCategories.push(navigationItemFound.parentId);\n }\n\n return (\n <div data-e2e-id=\"shell\" className={styles.shell}>\n <div data-e2e-id=\"shell__menu_top\" className={styles.titleBar}>\n {!navDrawerOpened ? (\n <TitleBar\n applicationName={applicationName}\n userStatus={userStatus}\n onClickHome={onClickHome}\n hamburger={<MenuBurger onClick={handleClickHamburger} />}\n />\n ) : null}\n </div>\n <div data-e2e-id=\"shell__main\" className={styles.main}>\n <NavDrawer\n selectedValue={selectedItem}\n open={navDrawerOpened}\n density={\"small\"}\n type={\"inline\"}\n openCategories={openedCategories}\n onNavItemSelect={(e, data) => {\n handleClickMenuItem(data.value);\n }}\n onNavCategoryItemToggle={(e, data) => {\n handleClickCategory(data.categoryValue ?? \"\");\n }}\n >\n <TitleBar\n applicationName={applicationName}\n userStatus={userStatus}\n onClickHome={onClickHome}\n hamburger={<MenuBurger onClick={handleClickHamburger} />}\n />\n <NavDrawerHeader></NavDrawerHeader>\n <NavDrawerBody>\n <Navigation items={navigationItems} />\n </NavDrawerBody>\n </NavDrawer>\n <div data-e2e-id=\"shell__content\" className={styles.content}>\n {main}\n </div>\n </div>\n </div>\n );\n}\n\nconst MenuBurger = ({ onClick }: { onClick: () => void }) => {\n const styles = useApplicationShellStyles();\n return (\n <Tooltip content=\"Navigation\" relationship=\"label\">\n <Hamburger className={styles.bugerIcon} onClick={onClick} />\n </Tooltip>\n );\n};\n"],"names":["useApplicationShellStyles","makeStyles","tokens","ApplicationShell","applicationName","main","navigationItems","userStatus","onClickHome","navigate","matchPath","navigationItemFound","it","navigationItemSelectedFromUrl","defaultOpenCategory","styles","navDrawerOpened","setNavDrawerOpened","useState","selectedItem","setSelectedItem","openedCategories","setOpenCategories","navigationService","useMemo","createNavigationTreeItemServiceImpl","handleClickHamburger","handleClickMenuItem","itemId","item","parentId","cat","handleClickCategory","categoryId","openCategories","jsx","TitleBar","MenuBurger","jsxs","NavDrawer","e","data","NavDrawerHeader","NavDrawerBody","Navigation","onClick","Tooltip","Hamburger"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  const t = ["fr", "en"];
2
- function r(n) {
3
- if (!n) return "en";
4
- const e = n.toLowerCase(), o = e.split("-")[0];
5
- return t.includes(e) ? e : t.includes(o) ? o : "en";
2
+ function r(e) {
3
+ if (!e) return "en";
4
+ const n = e.toLowerCase(), o = n.split("-")[0];
5
+ return t.includes(n) ? n : t.includes(o) ? o : "en";
6
6
  }
7
7
  function i() {
8
- var n;
9
8
  if (!(typeof navigator > "u"))
10
- return ((n = navigator.languages) == null ? void 0 : n[0]) || navigator.language;
9
+ return navigator.languages?.[0] || navigator.language;
11
10
  }
12
11
  function a() {
13
12
  if (!(typeof window > "u"))
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.detect.js","sources":["../../../src/lib/i18n/i18n.detect.ts"],"sourcesContent":["// i18n/locale.ts\nexport type Locale = string;\n\nconst SUPPORTED = [\"fr\", \"en\"] as const;\nconst FALLBACK: Locale = \"en\";\n\nexport function normalize(loc?: string): Locale {\n if (!loc) return FALLBACK;\n // garde \"fr-CA\" mais tombe sur \"fr\" si non supporté\n const lc = loc.toLowerCase();\n const base = lc.split(\"-\")[0];\n return SUPPORTED.includes(lc as any) ? (lc as Locale) : SUPPORTED.includes(base as any) ? (base as Locale) : FALLBACK;\n}\n\n// Client-only helpers\nfunction fromHtmlLang(): string | undefined {\n return typeof document !== \"undefined\" ? document.documentElement.lang : undefined;\n}\nfunction fromNavigator(): string | undefined {\n if (typeof navigator === \"undefined\") return undefined;\n return navigator.languages?.[0] || navigator.language;\n}\nfunction fromStorage(): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n return localStorage.getItem(\"locale\") || undefined;\n}\nfunction fromQuery(): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n return new URLSearchParams(window.location.search).get(\"lang\") || undefined;\n}\n\nexport function detectClientLocale(): Locale {\n return normalize(\n fromQuery() ||\n fromStorage() ||\n // fromHtmlLang() ||\n fromNavigator(),\n );\n}\n\n// SSR-side (ex: Next.js route handler / Node middleware)\nexport function detectServerLocale(opts: {\n queryLang?: string | null;\n cookieLang?: string | null;\n acceptLanguage?: string | null;\n}): Locale {\n const fromAL = opts.acceptLanguage?.split(\",\")?.[0]; // ex: \"fr-CA,fr;q=0.9,en;q=0.8\"\n return normalize(opts.queryLang || opts.cookieLang || fromAL);\n}\n\n// Persister le choix utilisateur (client)\nexport function setUserLocale(loc: string) {\n const n = normalize(loc);\n if (typeof document !== \"undefined\") document.documentElement.lang = n;\n if (typeof window !== \"undefined\") localStorage.setItem(\"locale\", n);\n return n;\n}\n"],"names":["SUPPORTED","normalize","loc","lc","base","fromNavigator","_a","fromStorage","fromQuery","detectClientLocale"],"mappings":"AAGA,MAAMA,IAAY,CAAC,MAAM,IAAI;AAGtB,SAASC,EAAUC,GAAsB;AAC9C,MAAI,CAACA,EAAK,QAAO;AAEjB,QAAMC,IAAKD,EAAI,YAAA,GACTE,IAAOD,EAAG,MAAM,GAAG,EAAE,CAAC;AAC5B,SAAOH,EAAU,SAASG,CAAS,IAAKA,IAAgBH,EAAU,SAASI,CAAW,IAAKA,IAAkB;AAC/G;AAMA,SAASC,IAAoC;AAf7C,MAAAC;AAgBE,MAAI,SAAO,YAAc;AACzB,aAAOA,IAAA,UAAU,cAAV,gBAAAA,EAAsB,OAAM,UAAU;AAC/C;AACA,SAASC,IAAkC;AACzC,MAAI,SAAO,SAAW;AACtB,WAAO,aAAa,QAAQ,QAAQ,KAAK;AAC3C;AACA,SAASC,IAAgC;AACvC,MAAI,SAAO,SAAW;AACtB,WAAO,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,MAAM,KAAK;AACpE;AAEO,SAASC,IAA6B;AAC3C,SAAOR;AAAA,IACLO,EAAA,KACED,EAAA;AAAA,IAEAF,EAAA;AAAA,EAAc;AAEpB;"}
1
+ {"version":3,"file":"i18n.detect.js","sources":["../../../src/lib/i18n/i18n.detect.ts"],"sourcesContent":["// i18n/locale.ts\nexport type Locale = string;\n\nconst SUPPORTED = [\"fr\", \"en\"] as const;\nconst FALLBACK: Locale = \"en\";\n\nexport function normalize(loc?: string): Locale {\n if (!loc) return FALLBACK;\n // garde \"fr-CA\" mais tombe sur \"fr\" si non supporté\n const lc = loc.toLowerCase();\n const base = lc.split(\"-\")[0];\n return SUPPORTED.includes(lc as any) ? (lc as Locale) : SUPPORTED.includes(base as any) ? (base as Locale) : FALLBACK;\n}\n\n// Client-only helpers\nfunction fromHtmlLang(): string | undefined {\n return typeof document !== \"undefined\" ? document.documentElement.lang : undefined;\n}\nfunction fromNavigator(): string | undefined {\n if (typeof navigator === \"undefined\") return undefined;\n return navigator.languages?.[0] || navigator.language;\n}\nfunction fromStorage(): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n return localStorage.getItem(\"locale\") || undefined;\n}\nfunction fromQuery(): string | undefined {\n if (typeof window === \"undefined\") return undefined;\n return new URLSearchParams(window.location.search).get(\"lang\") || undefined;\n}\n\nexport function detectClientLocale(): Locale {\n return normalize(\n fromQuery() ||\n fromStorage() ||\n // fromHtmlLang() ||\n fromNavigator(),\n );\n}\n\n// SSR-side (ex: Next.js route handler / Node middleware)\nexport function detectServerLocale(opts: {\n queryLang?: string | null;\n cookieLang?: string | null;\n acceptLanguage?: string | null;\n}): Locale {\n const fromAL = opts.acceptLanguage?.split(\",\")?.[0]; // ex: \"fr-CA,fr;q=0.9,en;q=0.8\"\n return normalize(opts.queryLang || opts.cookieLang || fromAL);\n}\n\n// Persister le choix utilisateur (client)\nexport function setUserLocale(loc: string) {\n const n = normalize(loc);\n if (typeof document !== \"undefined\") document.documentElement.lang = n;\n if (typeof window !== \"undefined\") localStorage.setItem(\"locale\", n);\n return n;\n}\n"],"names":["SUPPORTED","normalize","loc","lc","base","fromNavigator","fromStorage","fromQuery","detectClientLocale"],"mappings":"AAGA,MAAMA,IAAY,CAAC,MAAM,IAAI;AAGtB,SAASC,EAAUC,GAAsB;AAC9C,MAAI,CAACA,EAAK,QAAO;AAEjB,QAAMC,IAAKD,EAAI,YAAA,GACTE,IAAOD,EAAG,MAAM,GAAG,EAAE,CAAC;AAC5B,SAAOH,EAAU,SAASG,CAAS,IAAKA,IAAgBH,EAAU,SAASI,CAAW,IAAKA,IAAkB;AAC/G;AAMA,SAASC,IAAoC;AAC3C,MAAI,SAAO,YAAc;AACzB,WAAO,UAAU,YAAY,CAAC,KAAK,UAAU;AAC/C;AACA,SAASC,IAAkC;AACzC,MAAI,SAAO,SAAW;AACtB,WAAO,aAAa,QAAQ,QAAQ,KAAK;AAC3C;AACA,SAASC,IAAgC;AACvC,MAAI,SAAO,SAAW;AACtB,WAAO,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,MAAM,KAAK;AACpE;AAEO,SAASC,IAA6B;AAC3C,SAAOP;AAAA,IACLM,EAAA,KACED,EAAA;AAAA,IAEAD,EAAA;AAAA,EAAc;AAEpB;"}
@@ -1,3 +1,4 @@
1
1
  export * from './i18n.types';
2
2
  export * from './i18n.factory';
3
+ export { useI18n, I18nProvider, type I18nProviderProps } from './i18n.react';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/i18n/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/i18n/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAC,MAAM,cAAc,CAAC"}
@@ -1,82 +1,82 @@
1
- import { jsx as R } from "react/jsx-runtime";
2
- import { makeStyles as u, Input as y } from "@fluentui/react-components";
3
- import _, { useMemo as w, useEffect as L } from "react";
4
- const j = [",", "."], O = (r, c, t) => new RegExp(
5
- "^" + (r ? "-?" : "") + "\\d*" + (c > 0 ? "((\\.|,)\\d{0," + c + "})?" : "") + "$"
6
- ), T = u({
1
+ import { jsx as A } from "react/jsx-runtime";
2
+ import { makeStyles as I, Input as g } from "@fluentui/react-components";
3
+ import S, { useMemo as x, useEffect as E } from "react";
4
+ const T = [",", "."], R = (e, s, o) => new RegExp(
5
+ "^" + (e ? "-?" : "") + "\\d*" + (s > 0 ? "((\\.|,)\\d{0," + s + "})?" : "") + "$"
6
+ ), y = I({
7
7
  root: {
8
8
  "> input": {
9
9
  textAlign: "right"
10
10
  }
11
11
  }
12
- }), k = ({
13
- value: r,
14
- defaultValue: c,
15
- onValueChange: t,
16
- decimalScale: e = 0,
17
- allowNegative: N = !1,
18
- thousandSeparator: M = " ",
19
- min: d,
20
- max: p,
21
- size: B = 10,
22
- unit: A,
23
- ...I
12
+ }), B = ({
13
+ value: e,
14
+ defaultValue: s,
15
+ onValueChange: o,
16
+ decimalScale: a = 0,
17
+ allowNegative: p = !1,
18
+ thousandSeparator: l = " ",
19
+ min: i,
20
+ max: u,
21
+ size: _ = 10,
22
+ unit: N,
23
+ ...b
24
24
  }) => {
25
- const [m, f] = _.useState((r == null ? void 0 : r.toString()) ?? ""), S = T();
26
- r === void 0 && c === void 0 && console.warn("InputNumber must be provided a value or a defaultValue"), r !== void 0 && c !== void 0 && console.warn(
25
+ const [c, d] = S.useState(e?.toString() ?? ""), h = y();
26
+ e === void 0 && s === void 0 && console.warn("InputNumber must be provided a value or a defaultValue"), e !== void 0 && s !== void 0 && console.warn(
27
27
  "InputNumber can not be used as a controlled and uncontrolled component at the same time. You muse provide a value or a defaultValue but not both at the same time."
28
28
  );
29
- const b = w(
30
- () => O(N, e),
31
- [N, e, M]
29
+ const m = x(
30
+ () => R(p, a),
31
+ [p, a, l]
32
32
  );
33
- L(() => {
34
- f((r == null ? void 0 : r.toString()) ?? "");
35
- }, [r]);
36
- const x = (o) => {
37
- const s = o.target.value;
38
- if (b.test(s) || s === "") {
39
- if (f(s), s === "") {
40
- t == null || t(0);
33
+ E(() => {
34
+ d(e?.toString() ?? "");
35
+ }, [e]);
36
+ const v = (r) => {
37
+ const t = r.target.value;
38
+ if (m.test(t) || t === "") {
39
+ if (d(t), t === "") {
40
+ o?.(0);
41
41
  return;
42
42
  }
43
- const n = Number(s);
44
- if (!isNaN(n)) {
45
- let i = n;
46
- d !== void 0 && (i = Math.max(i, d)), p !== void 0 && (i = Math.min(i, p)), i !== r && (t == null || t(i));
43
+ const f = Number(t);
44
+ if (!isNaN(f)) {
45
+ let n = f;
46
+ i !== void 0 && (n = Math.max(n, i)), u !== void 0 && (n = Math.min(n, u)), n !== e && o?.(n);
47
47
  }
48
48
  }
49
- }, E = () => {
50
- if (m === "") {
51
- t == null || t(0);
49
+ }, M = () => {
50
+ if (c === "") {
51
+ o?.(0);
52
52
  return;
53
53
  }
54
- const o = Number(m);
55
- if (isNaN(o))
56
- t == null || t(0);
54
+ const r = Number(c);
55
+ if (isNaN(r))
56
+ o?.(0);
57
57
  else {
58
- let s = o;
59
- d !== void 0 && (s = Math.max(s, d)), p !== void 0 && (s = Math.min(s, p)), f(s.toString()), t == null || t(s);
58
+ let t = r;
59
+ i !== void 0 && (t = Math.max(t, i)), u !== void 0 && (t = Math.min(t, u)), d(t.toString()), o?.(t);
60
60
  }
61
61
  };
62
- return /* @__PURE__ */ R(
63
- y,
62
+ return /* @__PURE__ */ A(
63
+ g,
64
64
  {
65
- ...I,
66
- className: S.root,
65
+ ...b,
66
+ className: h.root,
67
67
  type: "number",
68
- value: m,
69
- onChange: x,
70
- onBlur: E,
71
- inputMode: e > 0 ? "decimal" : "numeric",
72
- pattern: b.source,
73
- onFocus: (o) => o.target.select(),
74
- contentAfter: A
68
+ value: c,
69
+ onChange: v,
70
+ onBlur: M,
71
+ inputMode: a > 0 ? "decimal" : "numeric",
72
+ pattern: m.source,
73
+ onFocus: (r) => r.target.select(),
74
+ contentAfter: N
75
75
  }
76
76
  );
77
77
  };
78
78
  export {
79
- j as INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS,
80
- k as InputNumber
79
+ T as INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS,
80
+ B as InputNumber
81
81
  };
82
82
  //# sourceMappingURL=InputNumber.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumber.js","sources":["../../../src/lib/number/InputNumber.tsx"],"sourcesContent":["import { Input, InputProps, makeStyles } from \"@fluentui/react-components\";\nimport React, { useEffect, useMemo } from \"react\";\n\ntype HTMLInputElementCurated = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\" | \"min\" | \"max\" | \"children\"\n>;\nexport interface InputNumberProps extends HTMLInputElementCurated {\n id?: string;\n name?: string;\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n onValueChange?: (value: number) => void;\n\n unit?: InputProps[\"contentAfter\"];\n}\n\nexport const INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS = [\",\", \".\"];\n\ninterface InputNumberCompletProps extends InputNumberProps {\n decimalScale?: number;\n allowNegative?: boolean;\n thousandSeparator?: string | boolean;\n}\n\nconst createRegexp = (allowNegative: boolean, decimalScale: number, thousandSeparator: string | boolean) => {\n return new RegExp(\n \"^\" +\n (allowNegative ? \"-?\" : \"\") +\n \"\\\\d*\" +\n (decimalScale > 0 ? \"((\\\\.|,)\\\\d{0,\" + decimalScale + \"})?\" : \"\") +\n \"$\",\n );\n};\n\nconst useStyles = makeStyles({\n root: {\n \"> input\": {\n textAlign: \"right\",\n },\n },\n});\n\nexport const InputNumber: React.FC<InputNumberCompletProps> = ({\n value,\n defaultValue,\n onValueChange,\n decimalScale = 0,\n allowNegative = false,\n thousandSeparator = \" \",\n min,\n max,\n size = 10,\n unit,\n ...rest\n}: InputNumberCompletProps) => {\n const [internalValue, setInternalValue] = React.useState<string>(value?.toString() ?? \"\");\n const styles = useStyles();\n\n if (value === undefined && defaultValue === undefined) {\n console.warn(\"InputNumber must be provided a value or a defaultValue\");\n }\n if (value !== undefined && defaultValue !== undefined) {\n console.warn(\n \"InputNumber can not be used as a controlled and uncontrolled component at the same time. You muse provide a value or a defaultValue but not both at the same time.\",\n );\n }\n\n // Toujours permettre d'écrire librement (même vide, -, . etc.)\n const rex = useMemo(\n () => createRegexp(allowNegative, decimalScale, thousandSeparator),\n [allowNegative, decimalScale, thousandSeparator],\n );\n\n useEffect(() => {\n // Synchroniser l'état interne si la prop change de l'extérieur\n setInternalValue(value?.toString() ?? \"\");\n }, [value]);\n\n const handleChange = (ev: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = ev.target.value;\n\n if (rex.test(newValue) || newValue === \"\") {\n setInternalValue(newValue);\n\n if (newValue === \"\") {\n onValueChange?.(0);\n return;\n }\n\n const parsed = Number(newValue);\n if (!isNaN(parsed)) {\n let clamped = parsed;\n if (min !== undefined) clamped = Math.max(clamped, min);\n if (max !== undefined) clamped = Math.min(clamped, max);\n if (clamped !== value) {\n onValueChange?.(clamped);\n }\n }\n }\n };\n\n const handleBlur = () => {\n if (internalValue === \"\") {\n onValueChange?.(0);\n return;\n }\n\n const parsed = Number(internalValue);\n if (!isNaN(parsed)) {\n let clamped = parsed;\n if (min !== undefined) clamped = Math.max(clamped, min);\n if (max !== undefined) clamped = Math.min(clamped, max);\n // IMPORTANT: on recale l'affichage après blur\n setInternalValue(clamped.toString());\n onValueChange?.(clamped);\n } else {\n onValueChange?.(0);\n }\n };\n\n return (\n <Input\n {...rest}\n className={styles.root}\n type=\"number\"\n value={internalValue}\n onChange={handleChange}\n onBlur={handleBlur}\n inputMode={decimalScale > 0 ? \"decimal\" : \"numeric\"}\n pattern={rex.source}\n onFocus={(e) => e.target.select()}\n contentAfter={unit}\n />\n );\n};\n"],"names":["INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS","createRegexp","allowNegative","decimalScale","thousandSeparator","useStyles","makeStyles","InputNumber","value","defaultValue","onValueChange","min","max","size","unit","rest","internalValue","setInternalValue","React","styles","rex","useMemo","useEffect","handleChange","ev","newValue","parsed","clamped","handleBlur","jsx","Input","e"],"mappings":";;;AAmBO,MAAMA,IAA0C,CAAC,KAAK,GAAG,GAQ1DC,IAAe,CAACC,GAAwBC,GAAsBC,MAC3D,IAAI;AAAA,EACT,OACGF,IAAgB,OAAO,MACxB,UACCC,IAAe,IAAI,mBAAmBA,IAAe,QAAQ,MAC9D;AAAA,GAIAE,IAAYC,EAAW;AAAA,EAC3B,MAAM;AAAA,IACJ,WAAW;AAAA,MACT,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ,CAAC,GAEYC,IAAiD,CAAC;AAAA,EAC7D,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAP,IAAe;AAAA,EACf,eAAAD,IAAgB;AAAA,EAChB,mBAAAE,IAAoB;AAAA,EACpB,KAAAO;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,GAAGC;AACL,MAA+B;AAC7B,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAM,UAAiBV,KAAA,gBAAAA,EAAO,eAAc,EAAE,GAClFW,IAASd,EAAA;AAEf,EAAIG,MAAU,UAAaC,MAAiB,UAC1C,QAAQ,KAAK,wDAAwD,GAEnED,MAAU,UAAaC,MAAiB,UAC1C,QAAQ;AAAA,IACN;AAAA,EAAA;AAKJ,QAAMW,IAAMC;AAAA,IACV,MAAMpB,EAAaC,GAAeC,CAA+B;AAAA,IACjE,CAACD,GAAeC,GAAcC,CAAiB;AAAA,EAAA;AAGjD,EAAAkB,EAAU,MAAM;AAEd,IAAAL,GAAiBT,KAAA,gBAAAA,EAAO,eAAc,EAAE;AAAA,EAC1C,GAAG,CAACA,CAAK,CAAC;AAEV,QAAMe,IAAe,CAACC,MAA4C;AAChE,UAAMC,IAAWD,EAAG,OAAO;AAE3B,QAAIJ,EAAI,KAAKK,CAAQ,KAAKA,MAAa,IAAI;AAGzC,UAFAR,EAAiBQ,CAAQ,GAErBA,MAAa,IAAI;AACnB,QAAAf,KAAA,QAAAA,EAAgB;AAChB;AAAA,MACF;AAEA,YAAMgB,IAAS,OAAOD,CAAQ;AAC9B,UAAI,CAAC,MAAMC,CAAM,GAAG;AAClB,YAAIC,IAAUD;AACd,QAAIf,MAAQ,WAAWgB,IAAU,KAAK,IAAIA,GAAShB,CAAG,IAClDC,MAAQ,WAAWe,IAAU,KAAK,IAAIA,GAASf,CAAG,IAClDe,MAAYnB,MACdE,KAAA,QAAAA,EAAgBiB;AAAA,MAEpB;AAAA,IACF;AAAA,EACF,GAEMC,IAAa,MAAM;AACvB,QAAIZ,MAAkB,IAAI;AACxB,MAAAN,KAAA,QAAAA,EAAgB;AAChB;AAAA,IACF;AAEA,UAAMgB,IAAS,OAAOV,CAAa;AACnC,QAAK,MAAMU,CAAM;AAQf,MAAAhB,KAAA,QAAAA,EAAgB;AAAA,SARE;AAClB,UAAIiB,IAAUD;AACd,MAAIf,MAAQ,WAAWgB,IAAU,KAAK,IAAIA,GAAShB,CAAG,IAClDC,MAAQ,WAAWe,IAAU,KAAK,IAAIA,GAASf,CAAG,IAEtDK,EAAiBU,EAAQ,UAAU,GACnCjB,KAAA,QAAAA,EAAgBiB;AAAA,IAClB;AAAA,EAGF;AAEA,SACE,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGf;AAAA,MACJ,WAAWI,EAAO;AAAA,MAClB,MAAK;AAAA,MACL,OAAOH;AAAA,MACP,UAAUO;AAAA,MACV,QAAQK;AAAA,MACR,WAAWzB,IAAe,IAAI,YAAY;AAAA,MAC1C,SAASiB,EAAI;AAAA,MACb,SAAS,CAACW,MAAMA,EAAE,OAAO,OAAA;AAAA,MACzB,cAAcjB;AAAA,IAAA;AAAA,EAAA;AAGpB;"}
1
+ {"version":3,"file":"InputNumber.js","sources":["../../../src/lib/number/InputNumber.tsx"],"sourcesContent":["import { Input, InputProps, makeStyles } from \"@fluentui/react-components\";\nimport React, { useEffect, useMemo } from \"react\";\n\ntype HTMLInputElementCurated = Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\" | \"min\" | \"max\" | \"children\"\n>;\nexport interface InputNumberProps extends HTMLInputElementCurated {\n id?: string;\n name?: string;\n value?: number;\n defaultValue?: number;\n min?: number;\n max?: number;\n onValueChange?: (value: number) => void;\n\n unit?: InputProps[\"contentAfter\"];\n}\n\nexport const INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS = [\",\", \".\"];\n\ninterface InputNumberCompletProps extends InputNumberProps {\n decimalScale?: number;\n allowNegative?: boolean;\n thousandSeparator?: string | boolean;\n}\n\nconst createRegexp = (allowNegative: boolean, decimalScale: number, thousandSeparator: string | boolean) => {\n return new RegExp(\n \"^\" +\n (allowNegative ? \"-?\" : \"\") +\n \"\\\\d*\" +\n (decimalScale > 0 ? \"((\\\\.|,)\\\\d{0,\" + decimalScale + \"})?\" : \"\") +\n \"$\",\n );\n};\n\nconst useStyles = makeStyles({\n root: {\n \"> input\": {\n textAlign: \"right\",\n },\n },\n});\n\nexport const InputNumber: React.FC<InputNumberCompletProps> = ({\n value,\n defaultValue,\n onValueChange,\n decimalScale = 0,\n allowNegative = false,\n thousandSeparator = \" \",\n min,\n max,\n size = 10,\n unit,\n ...rest\n}: InputNumberCompletProps) => {\n const [internalValue, setInternalValue] = React.useState<string>(value?.toString() ?? \"\");\n const styles = useStyles();\n\n if (value === undefined && defaultValue === undefined) {\n console.warn(\"InputNumber must be provided a value or a defaultValue\");\n }\n if (value !== undefined && defaultValue !== undefined) {\n console.warn(\n \"InputNumber can not be used as a controlled and uncontrolled component at the same time. You muse provide a value or a defaultValue but not both at the same time.\",\n );\n }\n\n // Toujours permettre d'écrire librement (même vide, -, . etc.)\n const rex = useMemo(\n () => createRegexp(allowNegative, decimalScale, thousandSeparator),\n [allowNegative, decimalScale, thousandSeparator],\n );\n\n useEffect(() => {\n // Synchroniser l'état interne si la prop change de l'extérieur\n setInternalValue(value?.toString() ?? \"\");\n }, [value]);\n\n const handleChange = (ev: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = ev.target.value;\n\n if (rex.test(newValue) || newValue === \"\") {\n setInternalValue(newValue);\n\n if (newValue === \"\") {\n onValueChange?.(0);\n return;\n }\n\n const parsed = Number(newValue);\n if (!isNaN(parsed)) {\n let clamped = parsed;\n if (min !== undefined) clamped = Math.max(clamped, min);\n if (max !== undefined) clamped = Math.min(clamped, max);\n if (clamped !== value) {\n onValueChange?.(clamped);\n }\n }\n }\n };\n\n const handleBlur = () => {\n if (internalValue === \"\") {\n onValueChange?.(0);\n return;\n }\n\n const parsed = Number(internalValue);\n if (!isNaN(parsed)) {\n let clamped = parsed;\n if (min !== undefined) clamped = Math.max(clamped, min);\n if (max !== undefined) clamped = Math.min(clamped, max);\n // IMPORTANT: on recale l'affichage après blur\n setInternalValue(clamped.toString());\n onValueChange?.(clamped);\n } else {\n onValueChange?.(0);\n }\n };\n\n return (\n <Input\n {...rest}\n className={styles.root}\n type=\"number\"\n value={internalValue}\n onChange={handleChange}\n onBlur={handleBlur}\n inputMode={decimalScale > 0 ? \"decimal\" : \"numeric\"}\n pattern={rex.source}\n onFocus={(e) => e.target.select()}\n contentAfter={unit}\n />\n );\n};\n"],"names":["INPUT_AMOUNT_ALLOWED_DECIMAL_SEPARATORS","createRegexp","allowNegative","decimalScale","thousandSeparator","useStyles","makeStyles","InputNumber","value","defaultValue","onValueChange","min","max","size","unit","rest","internalValue","setInternalValue","React","styles","rex","useMemo","useEffect","handleChange","ev","newValue","parsed","clamped","handleBlur","jsx","Input","e"],"mappings":";;;AAmBO,MAAMA,IAA0C,CAAC,KAAK,GAAG,GAQ1DC,IAAe,CAACC,GAAwBC,GAAsBC,MAC3D,IAAI;AAAA,EACT,OACGF,IAAgB,OAAO,MACxB,UACCC,IAAe,IAAI,mBAAmBA,IAAe,QAAQ,MAC9D;AAAA,GAIAE,IAAYC,EAAW;AAAA,EAC3B,MAAM;AAAA,IACJ,WAAW;AAAA,MACT,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ,CAAC,GAEYC,IAAiD,CAAC;AAAA,EAC7D,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAP,IAAe;AAAA,EACf,eAAAD,IAAgB;AAAA,EAChB,mBAAAE,IAAoB;AAAA,EACpB,KAAAO;AAAA,EACA,KAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,GAAGC;AACL,MAA+B;AAC7B,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAM,SAAiBV,GAAO,SAAA,KAAc,EAAE,GAClFW,IAASd,EAAA;AAEf,EAAIG,MAAU,UAAaC,MAAiB,UAC1C,QAAQ,KAAK,wDAAwD,GAEnED,MAAU,UAAaC,MAAiB,UAC1C,QAAQ;AAAA,IACN;AAAA,EAAA;AAKJ,QAAMW,IAAMC;AAAA,IACV,MAAMpB,EAAaC,GAAeC,CAA+B;AAAA,IACjE,CAACD,GAAeC,GAAcC,CAAiB;AAAA,EAAA;AAGjD,EAAAkB,EAAU,MAAM;AAEd,IAAAL,EAAiBT,GAAO,SAAA,KAAc,EAAE;AAAA,EAC1C,GAAG,CAACA,CAAK,CAAC;AAEV,QAAMe,IAAe,CAACC,MAA4C;AAChE,UAAMC,IAAWD,EAAG,OAAO;AAE3B,QAAIJ,EAAI,KAAKK,CAAQ,KAAKA,MAAa,IAAI;AAGzC,UAFAR,EAAiBQ,CAAQ,GAErBA,MAAa,IAAI;AACnB,QAAAf,IAAgB,CAAC;AACjB;AAAA,MACF;AAEA,YAAMgB,IAAS,OAAOD,CAAQ;AAC9B,UAAI,CAAC,MAAMC,CAAM,GAAG;AAClB,YAAIC,IAAUD;AACd,QAAIf,MAAQ,WAAWgB,IAAU,KAAK,IAAIA,GAAShB,CAAG,IAClDC,MAAQ,WAAWe,IAAU,KAAK,IAAIA,GAASf,CAAG,IAClDe,MAAYnB,KACdE,IAAgBiB,CAAO;AAAA,MAE3B;AAAA,IACF;AAAA,EACF,GAEMC,IAAa,MAAM;AACvB,QAAIZ,MAAkB,IAAI;AACxB,MAAAN,IAAgB,CAAC;AACjB;AAAA,IACF;AAEA,UAAMgB,IAAS,OAAOV,CAAa;AACnC,QAAK,MAAMU,CAAM;AAQf,MAAAhB,IAAgB,CAAC;AAAA,SARC;AAClB,UAAIiB,IAAUD;AACd,MAAIf,MAAQ,WAAWgB,IAAU,KAAK,IAAIA,GAAShB,CAAG,IAClDC,MAAQ,WAAWe,IAAU,KAAK,IAAIA,GAASf,CAAG,IAEtDK,EAAiBU,EAAQ,UAAU,GACnCjB,IAAgBiB,CAAO;AAAA,IACzB;AAAA,EAGF;AAEA,SACE,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGf;AAAA,MACJ,WAAWI,EAAO;AAAA,MAClB,MAAK;AAAA,MACL,OAAOH;AAAA,MACP,UAAUO;AAAA,MACV,QAAQK;AAAA,MACR,WAAWzB,IAAe,IAAI,YAAY;AAAA,MAC1C,SAASiB,EAAI;AAAA,MACb,SAAS,CAACW,MAAMA,EAAE,OAAO,OAAA;AAAA,MACzB,cAAcjB;AAAA,IAAA;AAAA,EAAA;AAGpB;"}
@@ -1,25 +1,25 @@
1
- import { jsx as n } from "react/jsx-runtime";
1
+ import { jsx as d } from "react/jsx-runtime";
2
2
  import { InputNumber as s } from "../number/InputNumber.js";
3
- import { isNil as u } from "lodash-es";
4
- const N = (a) => {
5
- const { min: r, max: m, onValueChange: e, value: t, defaultValue: i, ...d } = a, l = (o) => {
6
- o == null ? e == null || e(0) : e == null || e(Number((o / 100).toFixed(4)));
3
+ import { isNil as l } from "lodash-es";
4
+ const N = (n) => {
5
+ const { min: a, max: i, onValueChange: u, value: e, defaultValue: o, ...r } = n, m = (t) => {
6
+ t == null ? u?.(0) : u?.(Number((t / 100).toFixed(4)));
7
7
  };
8
- return /* @__PURE__ */ n(
8
+ return /* @__PURE__ */ d(
9
9
  s,
10
10
  {
11
- ...d,
11
+ ...r,
12
12
  decimalScale: 2,
13
13
  allowNegative: !1,
14
14
  inputMode: "decimal",
15
15
  thousandSeparator: !1,
16
16
  size: 9,
17
17
  unit: "%",
18
- min: r ? Number((r * 100).toFixed(2)) : void 0,
19
- max: m ? Number((m * 100).toFixed(2)) : void 0,
20
- value: u(t) ? t : Number((t * 100).toFixed(2)),
21
- defaultValue: u(i) ? i : Number((i * 100).toFixed(2)),
22
- onValueChange: l
18
+ min: a ? Number((a * 100).toFixed(2)) : void 0,
19
+ max: i ? Number((i * 100).toFixed(2)) : void 0,
20
+ value: l(e) ? e : Number((e * 100).toFixed(2)),
21
+ defaultValue: l(o) ? o : Number((o * 100).toFixed(2)),
22
+ onValueChange: m
23
23
  }
24
24
  );
25
25
  };
@@ -1 +1 @@
1
- {"version":3,"file":"InputPercent.js","sources":["../../../src/lib/percent/InputPercent.tsx"],"sourcesContent":["import React from \"react\";\nimport { InputNumber, InputNumberProps } from \"../number/InputNumber\";\nimport { isNil } from \"lodash-es\";\n\nexport interface InputPercentProps extends InputNumberProps {}\n\n/**\n * Un input special annee.\n */\nexport const InputPercent: React.FC<InputPercentProps> = (props) => {\n const { min, max, onValueChange, value, defaultValue, ...other } = props;\n\n const handleValueChange = (value: number | null | undefined) => {\n if (value === null || value === undefined) {\n onValueChange?.(0);\n } else {\n onValueChange?.(Number((value / 100).toFixed(4)));\n }\n };\n\n return (\n <InputNumber\n {...other}\n decimalScale={2}\n allowNegative={false}\n inputMode=\"decimal\"\n thousandSeparator={false}\n size={9}\n unit={\"%\"}\n min={min ? Number((min * 100).toFixed(2)) : undefined}\n max={max ? Number((max * 100).toFixed(2)) : undefined}\n value={isNil(value) ? value : Number((value * 100).toFixed(2))}\n defaultValue={isNil(defaultValue) ? defaultValue : Number((defaultValue * 100).toFixed(2))}\n onValueChange={handleValueChange}\n />\n );\n};\n"],"names":["InputPercent","props","min","max","onValueChange","value","defaultValue","other","handleValueChange","jsx","InputNumber","isNil"],"mappings":";;;AASO,MAAMA,IAA4C,CAACC,MAAU;AAClE,QAAM,EAAE,KAAAC,GAAK,KAAAC,GAAK,eAAAC,GAAe,OAAAC,GAAO,cAAAC,GAAc,GAAGC,MAAUN,GAE7DO,IAAoB,CAACH,MAAqC;AAC9D,IAAIA,KAAU,OACZD,KAAA,QAAAA,EAAgB,KAEhBA,KAAA,QAAAA,EAAgB,QAAQC,IAAQ,KAAK,QAAQ,CAAC,CAAC;AAAA,EAEnD;AAEA,SACE,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,cAAc;AAAA,MACd,eAAe;AAAA,MACf,WAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAKL,IAAM,QAAQA,IAAM,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,MAC5C,KAAKC,IAAM,QAAQA,IAAM,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,MAC5C,OAAOQ,EAAMN,CAAK,IAAIA,IAAQ,QAAQA,IAAQ,KAAK,QAAQ,CAAC,CAAC;AAAA,MAC7D,cAAcM,EAAML,CAAY,IAAIA,IAAe,QAAQA,IAAe,KAAK,QAAQ,CAAC,CAAC;AAAA,MACzF,eAAeE;AAAA,IAAA;AAAA,EAAA;AAGrB;"}
1
+ {"version":3,"file":"InputPercent.js","sources":["../../../src/lib/percent/InputPercent.tsx"],"sourcesContent":["import React from \"react\";\nimport { InputNumber, InputNumberProps } from \"../number/InputNumber\";\nimport { isNil } from \"lodash-es\";\n\nexport interface InputPercentProps extends InputNumberProps {}\n\n/**\n * Un input special annee.\n */\nexport const InputPercent: React.FC<InputPercentProps> = (props) => {\n const { min, max, onValueChange, value, defaultValue, ...other } = props;\n\n const handleValueChange = (value: number | null | undefined) => {\n if (value === null || value === undefined) {\n onValueChange?.(0);\n } else {\n onValueChange?.(Number((value / 100).toFixed(4)));\n }\n };\n\n return (\n <InputNumber\n {...other}\n decimalScale={2}\n allowNegative={false}\n inputMode=\"decimal\"\n thousandSeparator={false}\n size={9}\n unit={\"%\"}\n min={min ? Number((min * 100).toFixed(2)) : undefined}\n max={max ? Number((max * 100).toFixed(2)) : undefined}\n value={isNil(value) ? value : Number((value * 100).toFixed(2))}\n defaultValue={isNil(defaultValue) ? defaultValue : Number((defaultValue * 100).toFixed(2))}\n onValueChange={handleValueChange}\n />\n );\n};\n"],"names":["InputPercent","props","min","max","onValueChange","value","defaultValue","other","handleValueChange","jsx","InputNumber","isNil"],"mappings":";;;AASO,MAAMA,IAA4C,CAACC,MAAU;AAClE,QAAM,EAAE,KAAAC,GAAK,KAAAC,GAAK,eAAAC,GAAe,OAAAC,GAAO,cAAAC,GAAc,GAAGC,MAAUN,GAE7DO,IAAoB,CAACH,MAAqC;AAC9D,IAAIA,KAAU,OACZD,IAAgB,CAAC,IAEjBA,IAAgB,QAAQC,IAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;AAAA,EAEpD;AAEA,SACE,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,cAAc;AAAA,MACd,eAAe;AAAA,MACf,WAAU;AAAA,MACV,mBAAmB;AAAA,MACnB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAKL,IAAM,QAAQA,IAAM,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,MAC5C,KAAKC,IAAM,QAAQA,IAAM,KAAK,QAAQ,CAAC,CAAC,IAAI;AAAA,MAC5C,OAAOQ,EAAMN,CAAK,IAAIA,IAAQ,QAAQA,IAAQ,KAAK,QAAQ,CAAC,CAAC;AAAA,MAC7D,cAAcM,EAAML,CAAY,IAAIA,IAAe,QAAQA,IAAe,KAAK,QAAQ,CAAC,CAAC;AAAA,MACzF,eAAeE;AAAA,IAAA;AAAA,EAAA;AAGrB;"}
@@ -1,31 +1,30 @@
1
- import { jsxs as a, jsx as i } from "react/jsx-runtime";
2
- import { Select as h, Caption1 as s } from "@fluentui/react-components";
3
- function u({
4
- id: o,
1
+ import { jsxs as p, jsx as i } from "react/jsx-runtime";
2
+ import { Select as a, Caption1 as h } from "@fluentui/react-components";
3
+ function m({
4
+ id: d,
5
5
  value: n,
6
- disabled: t = !1,
6
+ disabled: o = !1,
7
7
  options: c,
8
- onValueChange: l
8
+ onValueChange: t
9
9
  }) {
10
- var d;
11
- const r = (d = c.find((e) => e.code === n)) == null ? void 0 : d.description;
12
- return /* @__PURE__ */ a("div", { children: [
10
+ const r = c.find((e) => e.code === n)?.description;
11
+ return /* @__PURE__ */ p("div", { children: [
13
12
  /* @__PURE__ */ i(
14
- h,
13
+ a,
15
14
  {
16
- id: o,
15
+ id: d,
17
16
  value: n,
18
- onChange: (e, p) => {
19
- l(p.value ?? "");
17
+ onChange: (e, l) => {
18
+ t(l.value ?? "");
20
19
  },
21
- disabled: t,
20
+ disabled: o,
22
21
  children: c.map((e) => /* @__PURE__ */ i("option", { value: e.code, children: e.label }, e.code))
23
22
  }
24
23
  ),
25
- r && /* @__PURE__ */ i("div", { children: /* @__PURE__ */ i(s, { children: r }) })
24
+ r && /* @__PURE__ */ i("div", { children: /* @__PURE__ */ i(h, { children: r }) })
26
25
  ] });
27
26
  }
28
27
  export {
29
- u as InputSelect
28
+ m as InputSelect
30
29
  };
31
30
  //# sourceMappingURL=InputSelect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InputSelect.js","sources":["../../../src/lib/select/InputSelect.tsx"],"sourcesContent":["import { Caption1, Select } from \"@fluentui/react-components\";\n\nexport interface InputSelectOption {\n code: string;\n label: string;\n description?: string | null | undefined;\n}\nexport interface InputSelectProps<T extends InputSelectOption> {\n id?: string;\n /** Le code de la valeur sélectionnée. */\n value: string;\n /** Indique si le champ est désactivé */\n disabled?: boolean;\n /** La liste des options à afficher dans la liste déroulante. */\n options: T[];\n /** La fonction à appeler lorsque la valeur sélectionnée change. */\n onValueChange: (value: string) => void;\n}\n/**\n * Une combobox de sélection d'entrée avec une liste déroulante d'options.\n * @returns Un composant de combobox de sélection (sans saisie de texte possible).\n */\nexport function InputSelect<T extends InputSelectOption>({\n id,\n value,\n disabled = false,\n options,\n onValueChange,\n}: InputSelectProps<T>) {\n const description = options.find((it) => it.code === value)?.description;\n return (\n <div>\n <Select\n id={id}\n value={value}\n onChange={(ev, data) => {\n onValueChange(data.value ?? \"\");\n }}\n disabled={disabled}\n >\n {options.map((o) => (\n <option key={o.code} value={o.code}>\n {o.label}\n </option>\n ))}\n </Select>\n {description && (\n <div>\n <Caption1>{description}</Caption1>\n </div>\n )}\n </div>\n );\n}\n"],"names":["InputSelect","id","value","disabled","options","onValueChange","description","_a","it","jsx","Select","ev","data","o","Caption1"],"mappings":";;AAsBO,SAASA,EAAyC;AAAA,EACvD,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,eAAAC;AACF,GAAwB;;AACtB,QAAMC,KAAcC,IAAAH,EAAQ,KAAK,CAACI,MAAOA,EAAG,SAASN,CAAK,MAAtC,gBAAAK,EAAyC;AAC7D,2BACG,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAAT;AAAA,QACA,OAAAC;AAAA,QACA,UAAU,CAACS,GAAIC,MAAS;AACtB,UAAAP,EAAcO,EAAK,SAAS,EAAE;AAAA,QAChC;AAAA,QACA,UAAAT;AAAA,QAEC,UAAAC,EAAQ,IAAI,CAACS,MACZ,gBAAAJ,EAAC,UAAA,EAAoB,OAAOI,EAAE,MAC3B,UAAAA,EAAE,MAAA,GADQA,EAAE,IAEf,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAEFP,KACC,gBAAAG,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACK,GAAA,EAAU,aAAY,EAAA,CACzB;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"InputSelect.js","sources":["../../../src/lib/select/InputSelect.tsx"],"sourcesContent":["import { Caption1, Select } from \"@fluentui/react-components\";\n\nexport interface InputSelectOption {\n code: string;\n label: string;\n description?: string | null | undefined;\n}\nexport interface InputSelectProps<T extends InputSelectOption> {\n id?: string;\n /** Le code de la valeur sélectionnée. */\n value: string;\n /** Indique si le champ est désactivé */\n disabled?: boolean;\n /** La liste des options à afficher dans la liste déroulante. */\n options: T[];\n /** La fonction à appeler lorsque la valeur sélectionnée change. */\n onValueChange: (value: string) => void;\n}\n/**\n * Une combobox de sélection d'entrée avec une liste déroulante d'options.\n * @returns Un composant de combobox de sélection (sans saisie de texte possible).\n */\nexport function InputSelect<T extends InputSelectOption>({\n id,\n value,\n disabled = false,\n options,\n onValueChange,\n}: InputSelectProps<T>) {\n const description = options.find((it) => it.code === value)?.description;\n return (\n <div>\n <Select\n id={id}\n value={value}\n onChange={(ev, data) => {\n onValueChange(data.value ?? \"\");\n }}\n disabled={disabled}\n >\n {options.map((o) => (\n <option key={o.code} value={o.code}>\n {o.label}\n </option>\n ))}\n </Select>\n {description && (\n <div>\n <Caption1>{description}</Caption1>\n </div>\n )}\n </div>\n );\n}\n"],"names":["InputSelect","id","value","disabled","options","onValueChange","description","it","jsx","Select","ev","data","o","Caption1"],"mappings":";;AAsBO,SAASA,EAAyC;AAAA,EACvD,IAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,eAAAC;AACF,GAAwB;AACtB,QAAMC,IAAcF,EAAQ,KAAK,CAACG,MAAOA,EAAG,SAASL,CAAK,GAAG;AAC7D,2BACG,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAM;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAAR;AAAA,QACA,OAAAC;AAAA,QACA,UAAU,CAACQ,GAAIC,MAAS;AACtB,UAAAN,EAAcM,EAAK,SAAS,EAAE;AAAA,QAChC;AAAA,QACA,UAAAR;AAAA,QAEC,UAAAC,EAAQ,IAAI,CAACQ,MACZ,gBAAAJ,EAAC,UAAA,EAAoB,OAAOI,EAAE,MAC3B,UAAAA,EAAE,MAAA,GADQA,EAAE,IAEf,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAEFN,KACC,gBAAAE,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACK,GAAA,EAAU,aAAY,EAAA,CACzB;AAAA,EAAA,GAEJ;AAEJ;"}
@@ -1,8 +1,8 @@
1
1
  import { jsxs as c, jsx as n } from "react/jsx-runtime";
2
- import { makeStyles as y, Button as r, Title3 as x, Menu as b, MenuTrigger as g, MenuPopover as C, MenuList as I, MenuItem as k } from "@fluentui/react-components";
3
- import { ArrowLeftFilled as A, MoreVerticalFilled as M, AddSquareRegular as N, DeleteRegular as j } from "@fluentui/react-icons";
4
- import { isFunction as v } from "lodash-es";
5
- const B = y({
2
+ import { makeStyles as h, Button as r, Title3 as y, Menu as x, MenuTrigger as b, MenuPopover as g, MenuList as C, MenuItem as I } from "@fluentui/react-components";
3
+ import { ArrowLeftFilled as k, MoreVerticalFilled as A, AddSquareRegular as M, DeleteRegular as N } from "@fluentui/react-icons";
4
+ import { isFunction as j } from "lodash-es";
5
+ const v = h({
6
6
  root: {
7
7
  display: "flex",
8
8
  align: "center",
@@ -34,38 +34,37 @@ const B = y({
34
34
  justifyContent: "flex-end"
35
35
  }
36
36
  });
37
- function E({
37
+ function w({
38
38
  children: l,
39
39
  onBack: t,
40
40
  actions: i
41
41
  }) {
42
- const s = B(), d = v(t), o = (i ?? []).filter((e) => e.type === "ADDITIONAL"), p = (i ?? []).filter((e) => e.type === "SECONDARY"), u = (i ?? []).filter((e) => e.type === "PRIMARY"), m = () => {
42
+ const s = v(), d = j(t), o = (i ?? []).filter((e) => e.type === "ADDITIONAL"), p = (i ?? []).filter((e) => e.type === "SECONDARY"), u = (i ?? []).filter((e) => e.type === "PRIMARY"), f = () => {
43
43
  d && t && t();
44
44
  }, a = async (e) => {
45
- var f;
46
- (f = (i ?? []).find((h) => h.id === e)) == null || f.onClick();
45
+ (i ?? []).find((m) => m.id === e)?.onClick();
47
46
  };
48
47
  return /* @__PURE__ */ c("div", { className: s.root, children: [
49
- d && /* @__PURE__ */ n("div", { className: s.backButton, children: /* @__PURE__ */ n(r, { icon: /* @__PURE__ */ n(A, {}), appearance: "subtle", onClick: m }) }),
50
- /* @__PURE__ */ n("div", { className: s.title, children: /* @__PURE__ */ n(x, { children: l }) }),
48
+ d && /* @__PURE__ */ n("div", { className: s.backButton, children: /* @__PURE__ */ n(r, { icon: /* @__PURE__ */ n(k, {}), appearance: "subtle", onClick: f }) }),
49
+ /* @__PURE__ */ n("div", { className: s.title, children: /* @__PURE__ */ n(y, { children: l }) }),
51
50
  /* @__PURE__ */ c("div", { className: s.actions, children: [
52
51
  p.length > 0 && p.map((e) => /* @__PURE__ */ n(r, { disabled: e.disabled, appearance: "secondary", onClick: () => a(e.id), children: e.label }, e.id)),
53
52
  u.length > 0 && u.map((e) => /* @__PURE__ */ n(r, { disabled: e.disabled, appearance: "primary", onClick: () => a(e.id), children: e.label }, e.id))
54
53
  ] }),
55
- /* @__PURE__ */ n("div", { className: s.moreActions, children: o.length > 0 && /* @__PURE__ */ c(b, { positioning: { autoSize: !0 }, children: [
56
- /* @__PURE__ */ n(g, { disableButtonEnhancement: !0, children: /* @__PURE__ */ n(r, { icon: /* @__PURE__ */ n(M, {}) }) }),
57
- /* @__PURE__ */ n(C, { children: /* @__PURE__ */ n(I, { children: o.map((e) => /* @__PURE__ */ n(R, { action: e, onClick: a }, e.id)) }) })
54
+ /* @__PURE__ */ n("div", { className: s.moreActions, children: o.length > 0 && /* @__PURE__ */ c(x, { positioning: { autoSize: !0 }, children: [
55
+ /* @__PURE__ */ n(b, { disableButtonEnhancement: !0, children: /* @__PURE__ */ n(r, { icon: /* @__PURE__ */ n(A, {}) }) }),
56
+ /* @__PURE__ */ n(g, { children: /* @__PURE__ */ n(C, { children: o.map((e) => /* @__PURE__ */ n(L, { action: e, onClick: a }, e.id)) }) })
58
57
  ] }) })
59
58
  ] });
60
59
  }
61
- function L() {
60
+ function B() {
62
61
  return /* @__PURE__ */ n("span", {});
63
62
  }
64
- function R({ action: l, onClick: t }) {
63
+ function L({ action: l, onClick: t }) {
65
64
  let i;
66
- return l.icon === "plus" ? i = N : l.icon === "trash" ? i = j : i = L, /* @__PURE__ */ n(k, { disabled: l.disabled, onClick: () => t(l.id), icon: /* @__PURE__ */ n(i, {}), children: l.label });
65
+ return l.icon === "plus" ? i = M : l.icon === "trash" ? i = N : i = B, /* @__PURE__ */ n(I, { disabled: l.disabled, onClick: () => t(l.id), icon: /* @__PURE__ */ n(i, {}), children: l.label });
67
66
  }
68
67
  export {
69
- E as ViewTitle
68
+ w as ViewTitle
70
69
  };
71
70
  //# sourceMappingURL=ViewTitle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewTitle.js","sources":["../../../src/lib/view_layout/ViewTitle.tsx"],"sourcesContent":["import {\n Button,\n makeStyles,\n Menu,\n MenuItem,\n MenuList,\n MenuPopover,\n MenuTrigger,\n Title3,\n} from \"@fluentui/react-components\";\nimport { AddSquareRegular, ArrowLeftFilled, DeleteRegular, MoreVerticalFilled } from \"@fluentui/react-icons\";\nimport { isFunction } from \"lodash-es\";\nimport { ReactNode } from \"react\";\n\nexport interface Action {\n id: string;\n label: string;\n icon?: \"plus\" | \"trash\";\n onClick: () => any;\n disabled?: boolean;\n type: \"PRIMARY\" | \"SECONDARY\" | \"ADDITIONAL\";\n}\n\nconst useStyles = makeStyles({\n root: {\n display: \"flex\",\n align: \"center\",\n justify: \"space-between\",\n justifyContent: \"center\",\n height: \"48px\",\n },\n title: {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n },\n backButton: {\n flex: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n },\n actions: {\n flex: 0,\n display: \"flex\",\n alignItems: \"center\",\n },\n moreActions: {\n flex: 0,\n display: \"flex\",\n alignItems: \"center\",\n minWidth: \"48px\",\n justifyContent: \"flex-end\",\n },\n});\n\n/**\n * Zone de titre d'une vue\n */\nexport function ViewTitle({\n children,\n onBack,\n actions,\n}: {\n /** Titre de la vue (en tout cas ce que l'on met dans la zone de titre) */\n children: ReactNode;\n /** Si spécifié, on ajoute une fleche \"back\" pour revenir en arrière */\n onBack?: () => void;\n /** Liste d'actions a ajouter à droite dans la zone d'actions */\n actions?: Action[];\n}) {\n const styles = useStyles();\n\n const displayBackButton = isFunction(onBack);\n const additionalList = (actions ?? []).filter((it) => it.type === \"ADDITIONAL\");\n const secondaryList = (actions ?? []).filter((it) => it.type === \"SECONDARY\");\n const primary = (actions ?? []).filter((it) => it.type === \"PRIMARY\");\n const handleBack = () => {\n if (displayBackButton && onBack) onBack();\n };\n const handleClick = async (id: string) => {\n (actions ?? []).find((it) => it.id === id)?.onClick();\n };\n return (\n <div className={styles.root}>\n {displayBackButton && (\n <div className={styles.backButton}>\n <Button icon={<ArrowLeftFilled />} appearance=\"subtle\" onClick={handleBack} />\n </div>\n )}\n <div className={styles.title}>\n <Title3>{children}</Title3>\n </div>\n <div className={styles.actions}>\n {secondaryList.length > 0 &&\n secondaryList.map((it) => (\n <Button key={it.id} disabled={it.disabled} appearance=\"secondary\" onClick={() => handleClick(it.id)}>\n {it.label}\n </Button>\n ))}\n {primary.length > 0 &&\n primary.map((it) => (\n <Button key={it.id} disabled={it.disabled} appearance=\"primary\" onClick={() => handleClick(it.id)}>\n {it.label}\n </Button>\n ))}\n </div>\n <div className={styles.moreActions}>\n {additionalList.length > 0 && (\n <Menu positioning={{ autoSize: true }}>\n <MenuTrigger disableButtonEnhancement>\n <Button icon={<MoreVerticalFilled />} />\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n {additionalList.map((it) => (\n <AdditionalActionMenuItem key={it.id} action={it} onClick={handleClick} />\n ))}\n </MenuList>\n </MenuPopover>\n </Menu>\n )}\n </div>\n </div>\n );\n}\n\nfunction EmptyIcon() {\n return <span />;\n}\n\nfunction AdditionalActionMenuItem({ action, onClick }: { action: Action; onClick: (id: string) => void }) {\n let Icon: any;\n if (action.icon === \"plus\") {\n Icon = AddSquareRegular;\n } else if (action.icon === \"trash\") {\n Icon = DeleteRegular;\n } else {\n Icon = EmptyIcon;\n }\n return (\n <MenuItem disabled={action.disabled} onClick={() => onClick(action.id)} icon={<Icon />}>\n {action.label}\n </MenuItem>\n );\n}\n"],"names":["useStyles","makeStyles","ViewTitle","children","onBack","actions","styles","displayBackButton","isFunction","additionalList","it","secondaryList","primary","handleBack","handleClick","id","_a","jsxs","jsx","Button","ArrowLeftFilled","Title3","Menu","MenuTrigger","MoreVerticalFilled","MenuPopover","MenuList","AdditionalActionMenuItem","EmptyIcon","action","onClick","Icon","AddSquareRegular","DeleteRegular","MenuItem"],"mappings":"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"}
1
+ {"version":3,"file":"ViewTitle.js","sources":["../../../src/lib/view_layout/ViewTitle.tsx"],"sourcesContent":["import {\n Button,\n makeStyles,\n Menu,\n MenuItem,\n MenuList,\n MenuPopover,\n MenuTrigger,\n Title3,\n} from \"@fluentui/react-components\";\nimport { AddSquareRegular, ArrowLeftFilled, DeleteRegular, MoreVerticalFilled } from \"@fluentui/react-icons\";\nimport { isFunction } from \"lodash-es\";\nimport { ReactNode } from \"react\";\n\nexport interface Action {\n id: string;\n label: string;\n icon?: \"plus\" | \"trash\";\n onClick: () => any;\n disabled?: boolean;\n type: \"PRIMARY\" | \"SECONDARY\" | \"ADDITIONAL\";\n}\n\nconst useStyles = makeStyles({\n root: {\n display: \"flex\",\n align: \"center\",\n justify: \"space-between\",\n justifyContent: \"center\",\n height: \"48px\",\n },\n title: {\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n },\n backButton: {\n flex: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n },\n actions: {\n flex: 0,\n display: \"flex\",\n alignItems: \"center\",\n },\n moreActions: {\n flex: 0,\n display: \"flex\",\n alignItems: \"center\",\n minWidth: \"48px\",\n justifyContent: \"flex-end\",\n },\n});\n\n/**\n * Zone de titre d'une vue\n */\nexport function ViewTitle({\n children,\n onBack,\n actions,\n}: {\n /** Titre de la vue (en tout cas ce que l'on met dans la zone de titre) */\n children: ReactNode;\n /** Si spécifié, on ajoute une fleche \"back\" pour revenir en arrière */\n onBack?: () => void;\n /** Liste d'actions a ajouter à droite dans la zone d'actions */\n actions?: Action[];\n}) {\n const styles = useStyles();\n\n const displayBackButton = isFunction(onBack);\n const additionalList = (actions ?? []).filter((it) => it.type === \"ADDITIONAL\");\n const secondaryList = (actions ?? []).filter((it) => it.type === \"SECONDARY\");\n const primary = (actions ?? []).filter((it) => it.type === \"PRIMARY\");\n const handleBack = () => {\n if (displayBackButton && onBack) onBack();\n };\n const handleClick = async (id: string) => {\n (actions ?? []).find((it) => it.id === id)?.onClick();\n };\n return (\n <div className={styles.root}>\n {displayBackButton && (\n <div className={styles.backButton}>\n <Button icon={<ArrowLeftFilled />} appearance=\"subtle\" onClick={handleBack} />\n </div>\n )}\n <div className={styles.title}>\n <Title3>{children}</Title3>\n </div>\n <div className={styles.actions}>\n {secondaryList.length > 0 &&\n secondaryList.map((it) => (\n <Button key={it.id} disabled={it.disabled} appearance=\"secondary\" onClick={() => handleClick(it.id)}>\n {it.label}\n </Button>\n ))}\n {primary.length > 0 &&\n primary.map((it) => (\n <Button key={it.id} disabled={it.disabled} appearance=\"primary\" onClick={() => handleClick(it.id)}>\n {it.label}\n </Button>\n ))}\n </div>\n <div className={styles.moreActions}>\n {additionalList.length > 0 && (\n <Menu positioning={{ autoSize: true }}>\n <MenuTrigger disableButtonEnhancement>\n <Button icon={<MoreVerticalFilled />} />\n </MenuTrigger>\n <MenuPopover>\n <MenuList>\n {additionalList.map((it) => (\n <AdditionalActionMenuItem key={it.id} action={it} onClick={handleClick} />\n ))}\n </MenuList>\n </MenuPopover>\n </Menu>\n )}\n </div>\n </div>\n );\n}\n\nfunction EmptyIcon() {\n return <span />;\n}\n\nfunction AdditionalActionMenuItem({ action, onClick }: { action: Action; onClick: (id: string) => void }) {\n let Icon: any;\n if (action.icon === \"plus\") {\n Icon = AddSquareRegular;\n } else if (action.icon === \"trash\") {\n Icon = DeleteRegular;\n } else {\n Icon = EmptyIcon;\n }\n return (\n <MenuItem disabled={action.disabled} onClick={() => onClick(action.id)} icon={<Icon />}>\n {action.label}\n </MenuItem>\n );\n}\n"],"names":["useStyles","makeStyles","ViewTitle","children","onBack","actions","styles","displayBackButton","isFunction","additionalList","it","secondaryList","primary","handleBack","handleClick","id","jsxs","jsx","Button","ArrowLeftFilled","Title3","Menu","MenuTrigger","MoreVerticalFilled","MenuPopover","MenuList","AdditionalActionMenuItem","EmptyIcon","action","onClick","Icon","AddSquareRegular","DeleteRegular","MenuItem"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seij/common-ui",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -10,19 +10,19 @@
10
10
  "dependencies": {
11
11
  "@fluentui/react-components": "9.72.9",
12
12
  "@fluentui/react-icons": "2.0.316",
13
- "@seij/common-types": "0.1.3",
14
13
  "i18next": "25.7.3",
15
- "date-fns": "4.1.0",
14
+ "@seij/common-types": "0.1.3",
15
+ "rifm": "0.12.1",
16
16
  "i18next-icu": "2.4.1",
17
- "lodash-es": "4.17.22",
18
- "rifm": "0.12.1"
17
+ "date-fns": "4.1.0",
18
+ "lodash-es": "4.17.22"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@types/lodash-es": "4.17.12"
22
22
  },
23
23
  "peerDependencies": {
24
- "react-dom": "18.3.1",
25
- "react": "18.3.1"
24
+ "react-dom": "19.2.3",
25
+ "react": "19.2.3"
26
26
  },
27
27
  "exports": {
28
28
  ".": {