@tedi-design-system/react 18.0.0-rc.15 → 18.0.0-rc.17

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 (63) hide show
  1. package/_virtual/index.es13.js +2 -2
  2. package/_virtual/index.es14.js +2 -2
  3. package/bundle-stats.html +1 -1
  4. package/external/react-is/index.cjs.js +1 -1
  5. package/external/react-is/index.es.js +1 -1
  6. package/external/toposort/index.cjs.js +1 -1
  7. package/external/toposort/index.es.js +1 -1
  8. package/index.css +1 -1
  9. package/package.json +1 -1
  10. package/src/community/components/accordion/accordion-item/accordion-item.d.ts +3 -0
  11. package/src/community/components/accordion/accordion-item-content/accordion-item-content.d.ts +3 -0
  12. package/src/community/components/accordion/accordion-item-header/accordion-item-header.d.ts +3 -0
  13. package/src/community/components/accordion/accordion.d.ts +3 -0
  14. package/src/tedi/components/buttons/collapse-button/collapse-button.cjs.js +1 -0
  15. package/src/tedi/components/buttons/collapse-button/collapse-button.d.ts +61 -0
  16. package/src/tedi/components/buttons/collapse-button/collapse-button.es.js +68 -0
  17. package/src/tedi/components/buttons/collapse-button/collapse-button.module.scss.cjs.js +1 -0
  18. package/src/tedi/components/buttons/collapse-button/collapse-button.module.scss.es.js +17 -0
  19. package/src/tedi/components/content/accordion/accordion-context.cjs.js +1 -0
  20. package/src/tedi/components/content/accordion/accordion-context.d.ts +27 -0
  21. package/src/tedi/components/content/accordion/accordion-context.es.js +6 -0
  22. package/src/tedi/components/content/accordion/accordion-item/accordion-item-context.cjs.js +1 -0
  23. package/src/tedi/components/content/accordion/accordion-item/accordion-item-context.d.ts +24 -0
  24. package/src/tedi/components/content/accordion/accordion-item/accordion-item-context.es.js +11 -0
  25. package/src/tedi/components/content/accordion/accordion-item/accordion-item.cjs.js +1 -0
  26. package/src/tedi/components/content/accordion/accordion-item/accordion-item.d.ts +76 -0
  27. package/src/tedi/components/content/accordion/accordion-item/accordion-item.es.js +70 -0
  28. package/src/tedi/components/content/accordion/accordion-item-content/accordion-item-content.cjs.js +1 -0
  29. package/src/tedi/components/content/accordion/accordion-item-content/accordion-item-content.d.ts +16 -0
  30. package/src/tedi/components/content/accordion/accordion-item-content/accordion-item-content.es.js +31 -0
  31. package/src/tedi/components/content/accordion/accordion-item-header/accordion-item-header.cjs.js +1 -0
  32. package/src/tedi/components/content/accordion/accordion-item-header/accordion-item-header.d.ts +134 -0
  33. package/src/tedi/components/content/accordion/accordion-item-header/accordion-item-header.es.js +127 -0
  34. package/src/tedi/components/content/accordion/accordion.cjs.js +1 -0
  35. package/src/tedi/components/content/accordion/accordion.d.ts +61 -0
  36. package/src/tedi/components/content/accordion/accordion.es.js +52 -0
  37. package/src/tedi/components/content/accordion/accordion.module.scss.cjs.js +1 -0
  38. package/src/tedi/components/content/accordion/accordion.module.scss.es.js +32 -0
  39. package/src/tedi/components/content/accordion/index.d.ts +6 -0
  40. package/src/tedi/components/form/time-field/time-field-helpers.cjs.js +1 -1
  41. package/src/tedi/components/form/time-field/time-field-helpers.d.ts +1 -1
  42. package/src/tedi/components/form/time-field/time-field-helpers.es.js +1 -1
  43. package/src/tedi/components/form/time-field/time-field.cjs.js +1 -1
  44. package/src/tedi/components/form/time-field/time-field.d.ts +23 -1
  45. package/src/tedi/components/form/time-field/time-field.es.js +126 -94
  46. package/src/tedi/components/form/time-field/time-picker-modal/time-picker-modal.cjs.js +1 -0
  47. package/src/tedi/components/form/time-field/time-picker-modal/time-picker-modal.d.ts +30 -0
  48. package/src/tedi/components/form/time-field/time-picker-modal/time-picker-modal.es.js +59 -0
  49. package/src/tedi/components/form/time-field/time-picker-modal/time-picker-modal.module.scss.cjs.js +1 -0
  50. package/src/tedi/components/form/time-field/time-picker-modal/time-picker-modal.module.scss.es.js +10 -0
  51. package/src/tedi/components/form/time-picker/components/time-grid/time-grid.cjs.js +1 -1
  52. package/src/tedi/components/form/time-picker/components/time-grid/time-grid.d.ts +5 -1
  53. package/src/tedi/components/form/time-picker/components/time-grid/time-grid.es.js +47 -64
  54. package/src/tedi/components/form/time-picker/components/time-wheel/time-wheel.cjs.js +1 -1
  55. package/src/tedi/components/form/time-picker/components/time-wheel/time-wheel.es.js +1 -1
  56. package/src/tedi/components/form/time-picker/time-picker.module.scss.cjs.js +1 -1
  57. package/src/tedi/components/form/time-picker/time-picker.module.scss.es.js +1 -2
  58. package/src/tedi/index.d.ts +2 -0
  59. package/src/tedi/providers/label-provider/labels-map.cjs.js +1 -1
  60. package/src/tedi/providers/label-provider/labels-map.d.ts +21 -0
  61. package/src/tedi/providers/label-provider/labels-map.es.js +23 -2
  62. package/tedi.cjs.js +1 -1
  63. package/tedi.es.js +299 -283
@@ -0,0 +1,127 @@
1
+ import { jsxs as a, Fragment as K, jsx as t } from "react/jsx-runtime";
2
+ import d from "../../../../../../external/classnames/index.es.js";
3
+ import { Icon as M } from "../../../base/icon/icon.es.js";
4
+ import { Text as w } from "../../../base/typography/text/text.es.js";
5
+ import { CollapseButton as Q } from "../../../buttons/collapse-button/collapse-button.es.js";
6
+ import e from "../accordion.module.scss.es.js";
7
+ import { useAccordionItemContext as R } from "../accordion-item/accordion-item-context.es.js";
8
+ import { useLabels as V } from "../../../../providers/label-provider/use-labels.es.js";
9
+ const X = (C) => {
10
+ const {
11
+ headerClickable: r = !0,
12
+ titleLayout: I = "hug",
13
+ openText: s,
14
+ closeText: l,
15
+ showExpandLabel: o = !0,
16
+ showDefaultExpandAction: m = !0,
17
+ expandActionPosition: h = "end",
18
+ expandActionArrowType: N = "default",
19
+ expandActionSize: T,
20
+ expandActionInverted: y = !1,
21
+ expandActionUnderline: E = !1,
22
+ headerClass: L,
23
+ title: c,
24
+ beforeTitle: H,
25
+ afterTitle: z,
26
+ startAction: D,
27
+ endAction: S,
28
+ startDescription: p,
29
+ endDescription: j,
30
+ headingLevel: x
31
+ } = C, { headerId: _, contentId: u, expanded: n, toggle: f, showIconCard: k, disabled: i } = R("Accordion.Item.Header"), { getLabel: g } = V(), B = s ?? g("open"), O = l ?? g("close"), F = n ? O : B, P = m && h === "start", U = m && h === "end", W = T ?? (o ? "default" : "small"), $ = d(
32
+ e["tedi-accordion-item-header"],
33
+ {
34
+ [e["tedi-accordion-item-header--hoverable"]]: r && !i,
35
+ [e["tedi-accordion-item-header--expanded"]]: n,
36
+ [e["tedi-accordion-item-header--with-icon-card"]]: k,
37
+ [e["tedi-accordion-item-header--disabled"]]: i
38
+ },
39
+ L
40
+ ), q = () => /* @__PURE__ */ t(
41
+ M,
42
+ {
43
+ name: "expand_more",
44
+ color: "inherit",
45
+ size: 16,
46
+ className: d(e["tedi-accordion-item-header__icon"], {
47
+ [e["tedi-accordion-item-header__icon--expanded"]]: n,
48
+ [e["tedi-accordion-item-header__icon--no-label"]]: !o
49
+ })
50
+ }
51
+ ), A = () => r ? /* @__PURE__ */ a(
52
+ "span",
53
+ {
54
+ className: d(e["tedi-accordion-item-header__expand-indicator"], {
55
+ [e["tedi-accordion-item-header__expand-indicator--with-label"]]: o
56
+ }),
57
+ children: [
58
+ /* @__PURE__ */ t(w, { element: "span", modifiers: "normal", children: o ? F : null }),
59
+ q()
60
+ ]
61
+ }
62
+ ) : /* @__PURE__ */ t(
63
+ Q,
64
+ {
65
+ open: n,
66
+ onOpenChange: () => f(),
67
+ openText: s,
68
+ closeText: l,
69
+ hideText: !o,
70
+ arrowType: N,
71
+ size: W,
72
+ inverted: y,
73
+ underline: E,
74
+ disabled: i,
75
+ "aria-controls": u,
76
+ "aria-disabled": i || void 0,
77
+ tabIndex: i ? -1 : void 0
78
+ }
79
+ ), b = /* @__PURE__ */ a(K, { children: [
80
+ /* @__PURE__ */ a("span", { className: e["tedi-accordion-item-header__start"], children: [
81
+ D,
82
+ H,
83
+ /* @__PURE__ */ a(
84
+ "span",
85
+ {
86
+ className: d(e["tedi-accordion-item-header__title"], {
87
+ [e["tedi-accordion-item-header__title--grow"]]: I === "fill",
88
+ [e["tedi-accordion-item-header__title--with-description"]]: p
89
+ }),
90
+ children: [
91
+ /* @__PURE__ */ a("span", { className: e["tedi-accordion-item-header__title-main"], children: [
92
+ P && A(),
93
+ c != null && /* @__PURE__ */ t(w, { element: "span", color: "secondary", modifiers: "normal", children: c })
94
+ ] }),
95
+ p
96
+ ]
97
+ }
98
+ ),
99
+ z
100
+ ] }),
101
+ j,
102
+ U && A(),
103
+ S
104
+ ] }), v = r ? /* @__PURE__ */ t(
105
+ "button",
106
+ {
107
+ type: "button",
108
+ id: _,
109
+ className: e["tedi-accordion-item-header__trigger"],
110
+ onClick: f,
111
+ disabled: i,
112
+ "aria-expanded": n,
113
+ "aria-controls": u,
114
+ children: b
115
+ }
116
+ ) : /* @__PURE__ */ t("div", { id: _, className: e["tedi-accordion-item-header__trigger"], children: b }), G = (() => {
117
+ if (!x) return v;
118
+ const J = `h${x}`;
119
+ return /* @__PURE__ */ t(J, { className: e["tedi-accordion-item-header__heading-wrapper"], children: v });
120
+ })();
121
+ return /* @__PURE__ */ t("div", { "data-name": "accordion-item-header", className: $, children: G });
122
+ };
123
+ X.displayName = "AccordionItemHeader";
124
+ export {
125
+ X as AccordionItemHeader,
126
+ X as default
127
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("react/jsx-runtime"),C=require("../../../../../external/classnames/index.cjs.js"),e=require("react"),M=require("./accordion.module.scss.cjs.js"),R=require("./accordion-context.cjs.js"),b=require("./accordion-item/accordion-item.cjs.js"),j=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),f=c=>{const{getCurrentBreakpointProps:p}=j.useBreakpointProps(c.defaultServerBreakpoint),{children:x,className:v,allowMultiple:t=!1,defaultExpanded:i=!1,itemGap:a,...q}=p(c),g=a!==void 0?{"--tedi-accordion-item-gap":`${a}rem`}:void 0,r=e.useRef(new Map),s=e.useRef(t);s.current=t;const d=e.useCallback((o,n)=>(r.current.set(o,n),()=>{r.current.delete(o)}),[]),u=e.useCallback(o=>{s.current||r.current.forEach((n,A)=>{A!==o&&n(!1)})},[]),k=e.useMemo(()=>({allowMultiple:t,defaultExpanded:i,notifyExpanded:u,register:d}),[t,i,u,d]);return l.jsx(R.AccordionContext.Provider,{value:k,children:l.jsx("div",{"data-name":"accordion","data-testid":"tedi-accordion",...q,className:C.default(M.default["tedi-accordion"],v),style:g,children:x})})};f.displayName="Accordion";const m=Object.assign(f,{Item:b.AccordionItem});exports.Accordion=m;exports.default=m;
@@ -0,0 +1,61 @@
1
+ import { default as React } from 'react';
2
+ import { BreakpointSupport } from '../../../helpers';
3
+ type AccordionBreakpointProps = {
4
+ /**
5
+ * Additional class.
6
+ */
7
+ className?: string;
8
+ /**
9
+ * Whether the accordion allows multiple items to be expanded at the same time.
10
+ * If false, opening one item will collapse the others automatically.
11
+ * @default false
12
+ */
13
+ allowMultiple?: boolean;
14
+ /**
15
+ * Group-level default for items' initial expanded state. Sets the initial
16
+ * `defaultExpanded` for every child `Accordion.Item` that doesn't specify
17
+ * its own. Per-item `defaultExpanded` (including an explicit `false`)
18
+ * takes precedence.
19
+ *
20
+ * Typically combined with `allowMultiple` to start with all items open.
21
+ * @default false
22
+ */
23
+ defaultExpanded?: boolean;
24
+ /**
25
+ * Vertical gap between sibling `Accordion.Item` components in rem
26
+ * Accepts any number, not limited to a fixed scale.
27
+ *
28
+ * Forwarded as the `--tedi-accordion-item-gap` CSS variable, so consumers
29
+ * can also override it from any ancestor class — or set a px value there
30
+ * directly when an exact-pixel override is needed.
31
+ *
32
+ * When omitted, falls back to the design-token default
33
+ * (`var(--layout-grid-gutters-08)` = 0.5rem).
34
+ */
35
+ itemGap?: number;
36
+ };
37
+ export interface AccordionProps extends BreakpointSupport<AccordionBreakpointProps> {
38
+ /**
39
+ * Accordion content. Should be one or more `AccordionItem` components.
40
+ */
41
+ children?: React.ReactNode;
42
+ }
43
+ export declare const Accordion: {
44
+ (props: AccordionProps): JSX.Element;
45
+ displayName: string;
46
+ } & {
47
+ Item: {
48
+ (props: import('./accordion-item/accordion-item').AccordionItemProps): JSX.Element;
49
+ displayName: string;
50
+ } & {
51
+ Header: {
52
+ (props: import('.').AccordionItemHeaderProps): JSX.Element;
53
+ displayName: string;
54
+ };
55
+ Content: {
56
+ (props: import('.').AccordionItemContentProps): JSX.Element;
57
+ displayName: string;
58
+ };
59
+ };
60
+ };
61
+ export default Accordion;
@@ -0,0 +1,52 @@
1
+ import { jsx as m } from "react/jsx-runtime";
2
+ import C from "../../../../../external/classnames/index.es.js";
3
+ import e from "react";
4
+ import R from "./accordion.module.scss.es.js";
5
+ import { AccordionContext as g } from "./accordion-context.es.js";
6
+ import { AccordionItem as M } from "./accordion-item/accordion-item.es.js";
7
+ import { useBreakpointProps as N } from "../../../helpers/hooks/use-breakpoint-props.es.js";
8
+ const u = (a) => {
9
+ const { getCurrentBreakpointProps: f } = N(a.defaultServerBreakpoint), {
10
+ children: p,
11
+ className: v,
12
+ allowMultiple: t = !1,
13
+ defaultExpanded: c = !1,
14
+ itemGap: i,
15
+ ...x
16
+ } = f(a), k = i !== void 0 ? { "--tedi-accordion-item-gap": `${i}rem` } : void 0, r = e.useRef(/* @__PURE__ */ new Map()), s = e.useRef(t);
17
+ s.current = t;
18
+ const l = e.useCallback((o, n) => (r.current.set(o, n), () => {
19
+ r.current.delete(o);
20
+ }), []), d = e.useCallback((o) => {
21
+ s.current || r.current.forEach((n, A) => {
22
+ A !== o && n(!1);
23
+ });
24
+ }, []), y = e.useMemo(
25
+ () => ({
26
+ allowMultiple: t,
27
+ defaultExpanded: c,
28
+ notifyExpanded: d,
29
+ register: l
30
+ }),
31
+ [t, c, d, l]
32
+ );
33
+ return /* @__PURE__ */ m(g.Provider, { value: y, children: /* @__PURE__ */ m(
34
+ "div",
35
+ {
36
+ "data-name": "accordion",
37
+ "data-testid": "tedi-accordion",
38
+ ...x,
39
+ className: C(R["tedi-accordion"], v),
40
+ style: k,
41
+ children: p
42
+ }
43
+ ) });
44
+ };
45
+ u.displayName = "Accordion";
46
+ const I = Object.assign(u, {
47
+ Item: M
48
+ });
49
+ export {
50
+ I as Accordion,
51
+ I as default
52
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e={"tedi-accordion":"tedi-accordion-3008127b","tedi-accordion__item":"tedi-accordion__item-c42537a8","tedi-accordion__item--selected":"tedi-accordion__item--selected-39cde887","tedi-accordion-item-header":"tedi-accordion-item-header-4a087734","tedi-accordion__item--expanded":"tedi-accordion__item--expanded-ce6f4283","tedi-accordion-item-content":"tedi-accordion-item-content-64aa3ef4","tedi-accordion__icon-card":"tedi-accordion__icon-card-9281697b","tedi-accordion-item-header--with-icon-card":"tedi-accordion-item-header--with-icon-card-7faff869","tedi-accordion-item-content--with-icon-card":"tedi-accordion-item-content--with-icon-card-1d759b0e","tedi-accordion-item-header--expanded":"tedi-accordion-item-header--expanded-449f0882","tedi-accordion__item--disabled":"tedi-accordion__item--disabled-49d29cad","tedi-accordion-item-header--hoverable":"tedi-accordion-item-header--hoverable-5a372e7b","tedi-accordion-item-header__trigger":"tedi-accordion-item-header__trigger-6164d1c8","tedi-accordion-item-header--disabled":"tedi-accordion-item-header--disabled-5532ac3a","tedi-accordion-item-header__heading-wrapper":"tedi-accordion-item-header__heading-wrapper-d419d1f0","tedi-accordion-item-header__start":"tedi-accordion-item-header__start-5c55e3cc","tedi-accordion-item-header__title":"tedi-accordion-item-header__title-678c469e","tedi-accordion-item-header__title-main":"tedi-accordion-item-header__title-main-2222462a","tedi-accordion-item-header__title--with-description":"tedi-accordion-item-header__title--with-description-3f5a3f28","tedi-accordion-item-header__title--grow":"tedi-accordion-item-header__title--grow-30e8c5c7","tedi-accordion-item-header__expand-indicator":"tedi-accordion-item-header__expand-indicator-b9c89257","tedi-accordion-item-header__icon":"tedi-accordion-item-header__icon-4ca47f34","tedi-accordion-item-header__expand-indicator--with-label":"tedi-accordion-item-header__expand-indicator--with-label-c274165b","tedi-accordion-item-header__icon--expanded":"tedi-accordion-item-header__icon--expanded-6e63d6cf","tedi-accordion-item-header__icon--no-label":"tedi-accordion-item-header__icon--no-label-95a984be","tedi-accordion-item-content__inner":"tedi-accordion-item-content__inner-cbfa362f","tedi-accordion__item--with-icon-card":"tedi-accordion__item--with-icon-card-9af46a70"};exports.default=e;
@@ -0,0 +1,32 @@
1
+ const e = {
2
+ "tedi-accordion": "tedi-accordion-3008127b",
3
+ "tedi-accordion__item": "tedi-accordion__item-c42537a8",
4
+ "tedi-accordion__item--selected": "tedi-accordion__item--selected-39cde887",
5
+ "tedi-accordion-item-header": "tedi-accordion-item-header-4a087734",
6
+ "tedi-accordion__item--expanded": "tedi-accordion__item--expanded-ce6f4283",
7
+ "tedi-accordion-item-content": "tedi-accordion-item-content-64aa3ef4",
8
+ "tedi-accordion__icon-card": "tedi-accordion__icon-card-9281697b",
9
+ "tedi-accordion-item-header--with-icon-card": "tedi-accordion-item-header--with-icon-card-7faff869",
10
+ "tedi-accordion-item-content--with-icon-card": "tedi-accordion-item-content--with-icon-card-1d759b0e",
11
+ "tedi-accordion-item-header--expanded": "tedi-accordion-item-header--expanded-449f0882",
12
+ "tedi-accordion__item--disabled": "tedi-accordion__item--disabled-49d29cad",
13
+ "tedi-accordion-item-header--hoverable": "tedi-accordion-item-header--hoverable-5a372e7b",
14
+ "tedi-accordion-item-header__trigger": "tedi-accordion-item-header__trigger-6164d1c8",
15
+ "tedi-accordion-item-header--disabled": "tedi-accordion-item-header--disabled-5532ac3a",
16
+ "tedi-accordion-item-header__heading-wrapper": "tedi-accordion-item-header__heading-wrapper-d419d1f0",
17
+ "tedi-accordion-item-header__start": "tedi-accordion-item-header__start-5c55e3cc",
18
+ "tedi-accordion-item-header__title": "tedi-accordion-item-header__title-678c469e",
19
+ "tedi-accordion-item-header__title-main": "tedi-accordion-item-header__title-main-2222462a",
20
+ "tedi-accordion-item-header__title--with-description": "tedi-accordion-item-header__title--with-description-3f5a3f28",
21
+ "tedi-accordion-item-header__title--grow": "tedi-accordion-item-header__title--grow-30e8c5c7",
22
+ "tedi-accordion-item-header__expand-indicator": "tedi-accordion-item-header__expand-indicator-b9c89257",
23
+ "tedi-accordion-item-header__icon": "tedi-accordion-item-header__icon-4ca47f34",
24
+ "tedi-accordion-item-header__expand-indicator--with-label": "tedi-accordion-item-header__expand-indicator--with-label-c274165b",
25
+ "tedi-accordion-item-header__icon--expanded": "tedi-accordion-item-header__icon--expanded-6e63d6cf",
26
+ "tedi-accordion-item-header__icon--no-label": "tedi-accordion-item-header__icon--no-label-95a984be",
27
+ "tedi-accordion-item-content__inner": "tedi-accordion-item-content__inner-cbfa362f",
28
+ "tedi-accordion__item--with-icon-card": "tedi-accordion__item--with-icon-card-9af46a70"
29
+ };
30
+ export {
31
+ e as default
32
+ };
@@ -0,0 +1,6 @@
1
+ export * from './accordion';
2
+ export * from './accordion-context';
3
+ export * from './accordion-item/accordion-item';
4
+ export * from './accordion-item/accordion-item-context';
5
+ export * from './accordion-item-header/accordion-item-header';
6
+ export * from './accordion-item-content/accordion-item-content';
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=40,u=6,d=()=>Array.from({length:24},(e,t)=>t.toString().padStart(2,"0")),m=e=>{const t=Math.max(1,e??1),r=[];for(let n=0;n<60;n+=t)r.push(n.toString().padStart(2,"0"));return r},T=(e,t)=>{if(!t.length)return"00";const r=Number(e);return isNaN(r)?t[0]:t.reduce((n,s)=>{const o=Math.abs(Number(s)-r),i=Math.abs(Number(n)-r);return o<i||o===i&&Number(s)>Number(n)?s:n},t[0])},p=e=>{if(!e.includes(":"))return{hour:"00",minute:"00"};const[t,r]=e.split(":");return{hour:t.padStart(2,"0"),minute:r.padStart(2,"0")}},f=(e,t)=>{const r=Math.round(e/c);return Math.max(0,Math.min(r,t-1))},l=e=>e*c,S=(e,t,r=1)=>Math.abs(e-t)>r,g=(e,t,r="auto")=>{e.scrollTo({top:l(t),behavior:r})},h=e=>{e&&clearTimeout(e)},a=e=>e?/^([01][0-9]|2[0-3]):[0-5][0-9]$/.test(e.trim()):!1,I=e=>{const t=e.trim();if(!t)return"";if(a(t))return t;const r=t.replace(/[^0-9]/g,"");if(r.length===3){const n=r.slice(0,1).padStart(2,"0"),s=r.slice(1),o=`${n}:${s}`;return a(o)?o:null}if(r.length===4){const n=r.slice(0,2),s=r.slice(2),o=`${n}:${s}`;return a(o)?o:null}if(t.includes(":")){const[n,s]=t.split(":"),o=parseInt(n,10),i=parseInt(s,10);if(!isNaN(o)&&!isNaN(i)&&o>=0&&o<=23&&i>=0&&i<=59)return`${o.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}`}return null};exports.ITEM_HEIGHT=c;exports.TIMEPICKER_OFFSET=u;exports.clearScrollTimeout=h;exports.findClosestMinute=T;exports.generateHours=d;exports.generateMinutes=m;exports.getScrollTopForIndex=l;exports.isValidTime=a;exports.needsScrollCorrection=S;exports.normalizeTime=I;exports.parseTime=p;exports.scrollToIndex=g;exports.snapToNearestItem=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=40,u=2,d=()=>Array.from({length:24},(e,t)=>t.toString().padStart(2,"0")),m=e=>{const t=Math.max(1,e??1),r=[];for(let n=0;n<60;n+=t)r.push(n.toString().padStart(2,"0"));return r},T=(e,t)=>{if(!t.length)return"00";const r=Number(e);return isNaN(r)?t[0]:t.reduce((n,s)=>{const o=Math.abs(Number(s)-r),i=Math.abs(Number(n)-r);return o<i||o===i&&Number(s)>Number(n)?s:n},t[0])},p=e=>{if(!e.includes(":"))return{hour:"00",minute:"00"};const[t,r]=e.split(":");return{hour:t.padStart(2,"0"),minute:r.padStart(2,"0")}},f=(e,t)=>{const r=Math.round(e/c);return Math.max(0,Math.min(r,t-1))},l=e=>e*c,S=(e,t,r=1)=>Math.abs(e-t)>r,g=(e,t,r="auto")=>{e.scrollTo({top:l(t),behavior:r})},h=e=>{e&&clearTimeout(e)},a=e=>e?/^([01][0-9]|2[0-3]):[0-5][0-9]$/.test(e.trim()):!1,I=e=>{const t=e.trim();if(!t)return"";if(a(t))return t;const r=t.replace(/[^0-9]/g,"");if(r.length===3){const n=r.slice(0,1).padStart(2,"0"),s=r.slice(1),o=`${n}:${s}`;return a(o)?o:null}if(r.length===4){const n=r.slice(0,2),s=r.slice(2),o=`${n}:${s}`;return a(o)?o:null}if(t.includes(":")){const[n,s]=t.split(":"),o=parseInt(n,10),i=parseInt(s,10);if(!isNaN(o)&&!isNaN(i)&&o>=0&&o<=23&&i>=0&&i<=59)return`${o.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}`}return null};exports.ITEM_HEIGHT=c;exports.TIMEPICKER_OFFSET=u;exports.clearScrollTimeout=h;exports.findClosestMinute=T;exports.generateHours=d;exports.generateMinutes=m;exports.getScrollTopForIndex=l;exports.isValidTime=a;exports.needsScrollCorrection=S;exports.normalizeTime=I;exports.parseTime=p;exports.scrollToIndex=g;exports.snapToNearestItem=f;
@@ -1,5 +1,5 @@
1
1
  export declare const ITEM_HEIGHT = 40;
2
- export declare const TIMEPICKER_OFFSET = 6;
2
+ export declare const TIMEPICKER_OFFSET = 2;
3
3
  /**
4
4
  * Generates an array of hours (00–23)
5
5
  */
@@ -1,4 +1,4 @@
1
- const u = 40, l = 6, d = () => Array.from({ length: 24 }, (n, t) => t.toString().padStart(2, "0")), m = (n) => {
1
+ const u = 40, l = 2, d = () => Array.from({ length: 24 }, (n, t) => t.toString().padStart(2, "0")), m = (n) => {
2
2
  const t = Math.max(1, n ?? 1), r = [];
3
3
  for (let e = 0; e < 60; e += t)
4
4
  r.push(e.toString().padStart(2, "0"));
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),c=require("../../../../../external/@floating-ui/react/dist/floating-ui.react.cjs.js"),T=require("../../../../../external/classnames/index.cjs.js"),m=require("react"),O=require("../textfield/textfield.cjs.js"),se=require("../time-picker/time-picker.cjs.js"),o=require("./time-field.module.scss.cjs.js"),E=require("./time-field-helpers.cjs.js"),oe=require("../../../../../external/@floating-ui/dom/dist/floating-ui.dom.cjs.js"),q=require("../../../../../external/@floating-ui/react-dom/dist/floating-ui.react-dom.cjs.js"),le=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),k=require("../../overlays/dropdown/dropdown.cjs.js"),S=b=>{const{getCurrentBreakpointProps:V}=le.useBreakpointProps(b.defaultServerBreakpoint),{id:M,label:z,value:u,defaultValue:A,onChange:v,readOnly:C=!1,disabled:l=!1,required:H,placeholder:K,inputProps:t,stepMinutes:G=1,className:I,availableTimes:d}=b,{useNativePicker:J=!1,timePickerTrigger:P="button",showPicker:a=!0,availableTimesVariant:y="grid-buttons"}=V(b),N=u!==void 0,[L,D]=m.useState(u??A??""),g=N?u:L,[F,_]=m.useState(!1),w=P==="input",r=J,Q=c.useFloating({open:F,onOpenChange:_,placement:w?"bottom-start":"bottom-end",middleware:[q.offset(E.TIMEPICKER_OFFSET),q.flip(),q.shift()],whileElementsMounted:oe.autoUpdate}),{refs:j,context:x,x:W,y:X,strategy:Y}=Q,Z=c.useClick(x),$=c.useDismiss(x),ee=c.useRole(x,{role:"listbox"}),R=a&&w&&!C&&!l&&!r,U=c.useInteractions([...R?[Z]:[],$,ee]),p=e=>{const n=e.trim();N||D(n),v==null||v(n)},te=e=>{var h;const n=e.target.value??"";(h=t==null?void 0:t.onBlur)==null||h.call(t,e);const s=E.normalizeTime(n);s!==null&&s!==n&&p(s)};m.useEffect(()=>{u!==void 0&&D(u)},[u]);const f=m.useRef(null);m.useEffect(()=>{var e;(e=f.current)!=null&&e.inner&&j.setReference(f.current.inner)},[j]);const ie=()=>{var n;const e=(n=f.current)==null?void 0:n.input;if(e){if(typeof e.showPicker=="function"){e.showPicker();return}e.focus()}},ne=()=>_(e=>!e),re=()=>{!a||l||(r?ie():P==="button"&&ne())},B={...t,id:M,label:z,value:g,placeholder:K,readOnly:C||!r&&w,disabled:l||(t==null?void 0:t.disabled),icon:"schedule",isClearable:!0,required:H,onIconClick:re,onChange:p,onBlur:te,className:T.default(o.default["tedi-time-field__textfield"],{[o.default["tedi-time-field__icon--disabled"]]:!a||l},{[o.default["tedi-time-field__textfield--disabled"]]:l||(t==null?void 0:t.disabled)},{[o.default["tedi-time-field--native"]]:r}),input:{...t==null?void 0:t.input,...r&&{type:"time"}}};if(!r&&a&&!l&&y==="dropdown"&&!!(d!=null&&d.length)){const e=d.indexOf(g),n=e>=0?e:0;return i.jsxs(k.Dropdown,{width:"trigger",defaultActiveIndex:n,children:[i.jsx(k.Dropdown.Trigger,{children:i.jsx("div",{className:T.default(o.default["tedi-time-field__container"],I,{[o.default["tedi-time-field__container--native"]]:r}),children:i.jsx(O.TextField,{ref:f,...B})})}),i.jsx(k.Dropdown.Content,{children:d.map((s,h)=>i.jsx(k.Dropdown.Item,{index:h,active:s===g,onClick:()=>p(s),children:s},s))})]})}return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:T.default(o.default["tedi-time-field__container"],I),...R?U.getReferenceProps():{},"aria-haspopup":a?"listbox":void 0,tabIndex:-1,children:i.jsx(O.TextField,{ref:f,"aria-expanded":a?F:void 0,...B})}),!r&&a&&!l&&i.jsx(c.FloatingPortal,{children:F&&i.jsx(c.FloatingFocusManager,{context:x,modal:!1,initialFocus:-1,children:i.jsx("div",{ref:j.setFloating,...U.getFloatingProps({style:{position:Y,top:X??0,left:W??0}}),children:i.jsx(se.TimePicker,{value:g,stepMinutes:G,availableTimes:d,onChange:e=>{p(e),d&&_(!1)},gridVariant:y==="grid-radio"?"radio":"button",className:o.default["tedi-time-field__picker-wrapper"]})})})})]})};S.displayName="TimeField";exports.TimeField=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),c=require("../../../../../external/@floating-ui/react/dist/floating-ui.react.cjs.js"),y=require("../../../../../external/classnames/index.cjs.js"),f=require("react"),A=require("../textfield/textfield.cjs.js"),pe=require("../time-picker/time-picker.cjs.js"),d=require("./time-field.module.scss.cjs.js"),H=require("./time-field-helpers.cjs.js"),ge=require("./time-picker-modal/time-picker-modal.cjs.js"),ke=require("../../../../../external/@floating-ui/dom/dist/floating-ui.dom.cjs.js"),B=require("../../../../../external/@floating-ui/react-dom/dist/floating-ui.react-dom.cjs.js"),xe=require("../../../helpers/hooks/use-breakpoint-props.cjs.js"),K=require("../../../helpers/hooks/use-breakpoint.cjs.js"),F=require("../../overlays/dropdown/dropdown.cjs.js"),G=_=>{const{getCurrentBreakpointProps:J}=xe.useBreakpointProps(_.defaultServerBreakpoint),{id:L,label:Q,value:u,defaultValue:W,onChange:C,readOnly:h=!1,disabled:l=!1,required:X,placeholder:Y,inputProps:t,stepMinutes:M=1,className:O,availableTimes:a,modal:P=!1,modalProps:Z}=_,{useNativePicker:$=!1,timePickerTrigger:N="button",showPicker:n=!0,availableTimesVariant:w="grid-buttons"}=J(_),D=u!==void 0,[ee,R]=f.useState(u??W??""),m=D?u:ee,[T,j]=f.useState(!1),[te,U]=f.useState(!1),p=N==="input",s=$,ie=K.useBreakpoint(),g=!s&&n&&!h&&!l&&(P===!0||typeof P=="string"&&K.isBreakpointBelow(ie,P)),ne=c.useFloating({open:T,onOpenChange:j,placement:p?"bottom-start":"bottom-end",middleware:[B.offset(H.TIMEPICKER_OFFSET),B.flip(),B.shift()],whileElementsMounted:ke.autoUpdate}),{refs:q,context:v,x:oe,y:re,strategy:se}=ne,le=c.useClick(v),ae=c.useDismiss(v),de=c.useRole(v,{role:"listbox"}),S=n&&p&&!h&&!l&&!s&&!g,V=c.useInteractions([...S?[le]:[],ae,de]),k=e=>{const o=e.trim();D||R(o),C==null||C(o)},ce=e=>{var b;const o=e.target.value??"";(b=t==null?void 0:t.onBlur)==null||b.call(t,e);const r=H.normalizeTime(o);r!==null&&r!==o&&k(r)};f.useEffect(()=>{u!==void 0&&R(u)},[u]);const x=f.useRef(null);f.useEffect(()=>{var e;(e=x.current)!=null&&e.inner&&q.setReference(x.current.inner)},[q]);const ue=()=>{var o;const e=(o=x.current)==null?void 0:o.input;if(e){if(typeof e.showPicker=="function"){e.showPicker();return}e.focus()}},fe=()=>j(e=>!e),E=()=>U(!0),me=()=>{!n||l||(s?ue():g?E():N==="button"&&fe())},z=g&&p&&!h?()=>{E()}:void 0,I={...t,id:L,label:Q,value:m,placeholder:Y,readOnly:h||!s&&p,disabled:l||(t==null?void 0:t.disabled),icon:n?"schedule":{name:"schedule",color:"inherit"},isClearable:!0,required:X,onIconClick:n?me:void 0,onChange:k,onBlur:ce,className:y.default(d.default["tedi-time-field__textfield"],{[d.default["tedi-time-field__icon--disabled"]]:!n||l},{[d.default["tedi-time-field__textfield--disabled"]]:l||(t==null?void 0:t.disabled)},{[d.default["tedi-time-field--native"]]:s}),input:{...t==null?void 0:t.input,...s&&{type:"time"},...z&&{onClick:z}}};if(!s&&n&&!l&&w==="dropdown"&&!!(a!=null&&a.length)){const e=a.indexOf(m),o=e>=0?e:0;return i.jsxs(F.Dropdown,{width:"trigger",defaultActiveIndex:o,children:[i.jsx(F.Dropdown.Trigger,{children:i.jsx("div",{className:y.default(d.default["tedi-time-field__container"],O,{[d.default["tedi-time-field__container--native"]]:s}),children:i.jsx(A.TextField,{ref:x,...I,input:{...I.input,...!p&&{onClick:r=>r.stopPropagation()}}})})}),i.jsx(F.Dropdown.Content,{children:a.map((r,b)=>i.jsx(F.Dropdown.Item,{index:b,active:r===m,onClick:()=>k(r),children:r},r))})]})}return i.jsxs(i.Fragment,{children:[i.jsx("div",{className:y.default(d.default["tedi-time-field__container"],O),...S?V.getReferenceProps():{},"aria-haspopup":n?"listbox":void 0,tabIndex:-1,children:i.jsx(A.TextField,{ref:x,"aria-expanded":n?T:void 0,...I})}),g&&i.jsx(ge.TimePickerModal,{open:te,onOpenChange:U,value:m,onConfirm:k,stepMinutes:M,availableTimes:a,gridVariant:w==="grid-radio"?"radio":"button",modalProps:Z}),!s&&n&&!l&&!g&&i.jsx(c.FloatingPortal,{children:T&&i.jsx(c.FloatingFocusManager,{context:v,modal:!1,initialFocus:-1,children:i.jsx("div",{ref:q.setFloating,...V.getFloatingProps({style:{position:se,top:re??0,left:oe??0}}),children:i.jsx(pe.TimePicker,{value:m,stepMinutes:M,availableTimes:a,onChange:e=>{k(e),a&&j(!1)},gridVariant:w==="grid-radio"?"radio":"button",className:d.default["tedi-time-field__picker-wrapper"]})})})})]})};G.displayName="TimeField";exports.TimeField=G;
@@ -1,6 +1,8 @@
1
1
  import { default as React } from 'react';
2
- import { BreakpointSupport } from '../../../helpers';
2
+ import { Breakpoint, BreakpointSupport } from '../../../helpers';
3
+ import { ModalContentProps } from '../../overlays/modal/modal-content/modal-content';
3
4
  import { TextFieldProps } from '../textfield/textfield';
5
+ export type TimeFieldModal = boolean | Exclude<Breakpoint, 'xs'>;
4
6
  type TimeFieldBreakpointProps = {
5
7
  /**
6
8
  * If `true`, the field swaps the custom time-picker popover for the
@@ -91,6 +93,26 @@ export interface TimeFieldProps extends BreakpointSupport<TimeFieldBreakpointPro
91
93
  * Array of available times to show in the picker or dropdown.
92
94
  */
93
95
  availableTimes?: string[];
96
+ /**
97
+ * Open the picker inside a modal instead of a floating popover. Useful on
98
+ * narrow viewports where a popover overlaps the input itself.
99
+ *
100
+ * - `true` always opens in a modal
101
+ * - `false` (default) always uses the popover
102
+ * - A breakpoint name (e.g. `'md'`) opens in a modal *below* that breakpoint
103
+ * and falls back to the popover from that breakpoint up
104
+ *
105
+ * Ignored when `useNativePicker` resolves to `true`.
106
+ * @default false
107
+ */
108
+ modal?: TimeFieldModal;
109
+ /**
110
+ * Extra props forwarded to the picker modal's `Modal.Content` — e.g. `size`, `width`, `maxWidth`,
111
+ * `position`, `fullscreen`, and per-breakpoint overrides. Lets the consumer tune the modal beyond
112
+ * its `size="small"` / `width="xs"` (capped to 312px) defaults. `className` is merged with the component's own (so
113
+ * the internal padding reset is preserved). Only applies when the picker opens as a modal.
114
+ */
115
+ modalProps?: Omit<ModalContentProps, 'children'>;
94
116
  }
95
117
  export declare const TimeField: React.FC<TimeFieldProps>;
96
118
  export {};