@linyao.tw/ui 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +9 -1
  2. package/dist/components/date-time/calendar.js +7 -6
  3. package/dist/components/date-time/calendar.js.map +1 -1
  4. package/dist/components/date-time/date-field.js +9 -8
  5. package/dist/components/date-time/date-field.js.map +1 -1
  6. package/dist/components/date-time/date-picker.js +7 -6
  7. package/dist/components/date-time/date-picker.js.map +1 -1
  8. package/dist/components/date-time/date-range-picker.js +7 -6
  9. package/dist/components/date-time/date-range-picker.js.map +1 -1
  10. package/dist/components/date-time/index.js +0 -1
  11. package/dist/components/date-time/shared.d.ts +0 -1
  12. package/dist/components/date-time/shared.js +6 -9
  13. package/dist/components/date-time/shared.js.map +1 -1
  14. package/dist/components/date-time/time-field.js +7 -6
  15. package/dist/components/date-time/time-field.js.map +1 -1
  16. package/dist/components/feedback/alert.js +34 -34
  17. package/dist/components/feedback/alert.js.map +1 -1
  18. package/dist/components/feedback/banner.js +14 -14
  19. package/dist/components/feedback/banner.js.map +1 -1
  20. package/dist/components/feedback/empty-state.d.ts +2 -1
  21. package/dist/components/feedback/empty-state.js +30 -31
  22. package/dist/components/feedback/empty-state.js.map +1 -1
  23. package/dist/components/feedback/feedback.types.d.ts +0 -1
  24. package/dist/components/feedback/feedback.types.js +2 -5
  25. package/dist/components/feedback/feedback.types.js.map +1 -1
  26. package/dist/components/feedback/index.d.ts +8 -8
  27. package/dist/components/feedback/meter.js +20 -21
  28. package/dist/components/feedback/meter.js.map +1 -1
  29. package/dist/components/feedback/progress.js +20 -21
  30. package/dist/components/feedback/progress.js.map +1 -1
  31. package/dist/components/feedback/skeleton.js +10 -11
  32. package/dist/components/feedback/skeleton.js.map +1 -1
  33. package/dist/components/feedback/spinner.js +24 -25
  34. package/dist/components/feedback/spinner.js.map +1 -1
  35. package/dist/components/feedback/toast.js +22 -21
  36. package/dist/components/feedback/toast.js.map +1 -1
  37. package/dist/components/forms/{CodeField.d.ts → code-field.d.ts} +1 -1
  38. package/dist/components/forms/code-field.js +65 -0
  39. package/dist/components/forms/code-field.js.map +1 -0
  40. package/dist/components/forms/{FileUpload.d.ts → file-upload.d.ts} +1 -1
  41. package/dist/components/forms/{FileUpload.js → file-upload.js} +127 -111
  42. package/dist/components/forms/file-upload.js.map +1 -0
  43. package/dist/components/forms/index.d.ts +6 -6
  44. package/dist/components/forms/{Input.js → input.js} +3 -3
  45. package/dist/components/forms/input.js.map +1 -0
  46. package/dist/components/forms/internal.d.ts +0 -2
  47. package/dist/components/forms/internal.js +12 -17
  48. package/dist/components/forms/internal.js.map +1 -1
  49. package/dist/components/forms/number-field.js +73 -0
  50. package/dist/components/forms/number-field.js.map +1 -0
  51. package/dist/components/forms/otp-field.js +57 -0
  52. package/dist/components/forms/otp-field.js.map +1 -0
  53. package/dist/components/forms/{TextField.d.ts → text-field.d.ts} +5 -0
  54. package/dist/components/forms/text-field.js +200 -0
  55. package/dist/components/forms/text-field.js.map +1 -0
  56. package/dist/components/foundations/{Avatar.js → avatar.js} +3 -3
  57. package/dist/components/foundations/avatar.js.map +1 -0
  58. package/dist/components/foundations/{Badge.d.ts → badge.d.ts} +1 -1
  59. package/dist/components/foundations/{Badge.js → badge.js} +3 -3
  60. package/dist/components/foundations/badge.js.map +1 -0
  61. package/dist/components/foundations/{Button.js → button.js} +3 -3
  62. package/dist/components/foundations/button.js.map +1 -0
  63. package/dist/components/foundations/{Card.d.ts → card.d.ts} +9 -2
  64. package/dist/components/foundations/{Card.js → card.js} +5 -5
  65. package/dist/components/foundations/card.js.map +1 -0
  66. package/dist/components/foundations/{IconButton.d.ts → icon-button.d.ts} +2 -8
  67. package/dist/components/foundations/{IconButton.js → icon-button.js} +4 -4
  68. package/dist/components/foundations/icon-button.js.map +1 -0
  69. package/dist/components/foundations/index.d.ts +9 -9
  70. package/dist/components/foundations/{Link.d.ts → link.d.ts} +1 -1
  71. package/dist/components/foundations/link.js +46 -0
  72. package/dist/components/foundations/link.js.map +1 -0
  73. package/dist/components/foundations/{ListCell.d.ts → list-cell.d.ts} +1 -8
  74. package/dist/components/foundations/{ListCell.js → list-cell.js} +3 -3
  75. package/dist/components/foundations/list-cell.js.map +1 -0
  76. package/dist/components/foundations/{SectionHeading.d.ts → section-heading.d.ts} +5 -2
  77. package/dist/components/foundations/{SectionHeading.js → section-heading.js} +3 -3
  78. package/dist/components/foundations/section-heading.js.map +1 -0
  79. package/dist/components/foundations/{Separator.js → separator.js} +3 -3
  80. package/dist/components/foundations/separator.js.map +1 -0
  81. package/dist/components/navigation-data/breadcrumb-pagination.js +88 -81
  82. package/dist/components/navigation-data/breadcrumb-pagination.js.map +1 -1
  83. package/dist/components/navigation-data/command-palette.d.ts +26 -0
  84. package/dist/components/navigation-data/command-palette.js +100 -72
  85. package/dist/components/navigation-data/command-palette.js.map +1 -1
  86. package/dist/components/navigation-data/header-tab-bar.js +49 -46
  87. package/dist/components/navigation-data/header-tab-bar.js.map +1 -1
  88. package/dist/components/navigation-data/index.d.ts +7 -7
  89. package/dist/components/navigation-data/menubar-toolbar.js +1 -1
  90. package/dist/components/navigation-data/menubar-toolbar.js.map +1 -1
  91. package/dist/components/navigation-data/navigation-menu.js +1 -1
  92. package/dist/components/navigation-data/navigation-menu.js.map +1 -1
  93. package/dist/components/navigation-data/scroll-area.js +1 -1
  94. package/dist/components/navigation-data/scroll-area.js.map +1 -1
  95. package/dist/components/navigation-data/table-collection.d.ts +12 -3
  96. package/dist/components/navigation-data/table-collection.js +11 -9
  97. package/dist/components/navigation-data/table-collection.js.map +1 -1
  98. package/dist/components/overlays/dialog.d.ts +13 -2
  99. package/dist/components/overlays/dialog.js +136 -131
  100. package/dist/components/overlays/dialog.js.map +1 -1
  101. package/dist/components/overlays/disclosure.js +1 -1
  102. package/dist/components/overlays/disclosure.js.map +1 -1
  103. package/dist/components/overlays/drawer.d.ts +5 -1
  104. package/dist/components/overlays/drawer.js +156 -152
  105. package/dist/components/overlays/drawer.js.map +1 -1
  106. package/dist/components/overlays/floating.js +115 -113
  107. package/dist/components/overlays/floating.js.map +1 -1
  108. package/dist/components/overlays/index.d.ts +4 -4
  109. package/dist/components/selection/combobox.js +93 -93
  110. package/dist/components/selection/combobox.js.map +1 -1
  111. package/dist/components/selection/controls.d.ts +4 -1
  112. package/dist/components/selection/controls.js +140 -118
  113. package/dist/components/selection/controls.js.map +1 -1
  114. package/dist/components/selection/menu.js +120 -121
  115. package/dist/components/selection/menu.js.map +1 -1
  116. package/dist/components/selection/select.js +107 -107
  117. package/dist/components/selection/select.js.map +1 -1
  118. package/dist/fonts.css +13 -0
  119. package/dist/index.d.ts +1 -0
  120. package/dist/index.js +37 -33
  121. package/dist/internal/accessible-name.d.ts +12 -0
  122. package/dist/internal/class-names.d.ts +12 -0
  123. package/dist/{components/selection/classnames.js → internal/class-names.js} +3 -3
  124. package/dist/internal/class-names.js.map +1 -0
  125. package/dist/internal/index.d.ts +3 -0
  126. package/dist/{components/foundations/shared.d.ts → internal/render.d.ts} +2 -1
  127. package/dist/intl/index.d.ts +2 -0
  128. package/dist/intl/messages.d.ts +48 -0
  129. package/dist/intl/messages.js +80 -0
  130. package/dist/intl/messages.js.map +1 -0
  131. package/dist/intl/provider.d.ts +18 -0
  132. package/dist/intl/provider.js +22 -0
  133. package/dist/intl/provider.js.map +1 -0
  134. package/dist/styles.css +1 -1
  135. package/package.json +6 -4
  136. package/dist/components/feedback/feedback.module.js +0 -42
  137. package/dist/components/feedback/feedback.module.js.map +0 -1
  138. package/dist/components/forms/CodeField.js +0 -63
  139. package/dist/components/forms/CodeField.js.map +0 -1
  140. package/dist/components/forms/FileUpload.js.map +0 -1
  141. package/dist/components/forms/Input.js.map +0 -1
  142. package/dist/components/forms/NumberField.js +0 -71
  143. package/dist/components/forms/NumberField.js.map +0 -1
  144. package/dist/components/forms/OTPField.js +0 -54
  145. package/dist/components/forms/OTPField.js.map +0 -1
  146. package/dist/components/forms/TextField.js +0 -199
  147. package/dist/components/forms/TextField.js.map +0 -1
  148. package/dist/components/foundations/Avatar.js.map +0 -1
  149. package/dist/components/foundations/Badge.js.map +0 -1
  150. package/dist/components/foundations/Button.js.map +0 -1
  151. package/dist/components/foundations/Card.js.map +0 -1
  152. package/dist/components/foundations/IconButton.js.map +0 -1
  153. package/dist/components/foundations/Link.js +0 -40
  154. package/dist/components/foundations/Link.js.map +0 -1
  155. package/dist/components/foundations/ListCell.js.map +0 -1
  156. package/dist/components/foundations/SectionHeading.js.map +0 -1
  157. package/dist/components/foundations/Separator.js.map +0 -1
  158. package/dist/components/foundations/shared.js +0 -8
  159. package/dist/components/foundations/shared.js.map +0 -1
  160. package/dist/components/navigation-data/utils.d.ts +0 -2
  161. package/dist/components/navigation-data/utils.js +0 -11
  162. package/dist/components/navigation-data/utils.js.map +0 -1
  163. package/dist/components/overlays/class-names.d.ts +0 -6
  164. package/dist/components/overlays/class-names.js +0 -11
  165. package/dist/components/overlays/class-names.js.map +0 -1
  166. package/dist/components/selection/classnames.d.ts +0 -4
  167. package/dist/components/selection/classnames.js.map +0 -1
  168. package/dist/components/selection/selection.module.js +0 -51
  169. package/dist/components/selection/selection.module.js.map +0 -1
  170. /package/dist/components/forms/{Input.d.ts → input.d.ts} +0 -0
  171. /package/dist/components/forms/{NumberField.d.ts → number-field.d.ts} +0 -0
  172. /package/dist/components/forms/{OTPField.d.ts → otp-field.d.ts} +0 -0
  173. /package/dist/components/foundations/{Avatar.d.ts → avatar.d.ts} +0 -0
  174. /package/dist/components/foundations/{Button.d.ts → button.d.ts} +0 -0
  175. /package/dist/components/foundations/{Separator.d.ts → separator.d.ts} +0 -0
@@ -1,15 +1,10 @@
1
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
- import { Field as n } from "@base-ui/react/field";
1
+ import { cx as e } from "../../internal/class-names.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { Field as r } from "@base-ui/react/field";
3
4
  //#region src/components/forms/internal.tsx
4
- function r(...e) {
5
- return e.filter(Boolean).join(" ");
6
- }
7
- function i(e, t) {
8
- return typeof t == "function" ? (n) => r(e, t(n)) : r(e, t);
9
- }
10
- function a({ children: i, label: a, description: o, error: s, invalid: c, disabled: l, readOnly: u, required: d, name: f, size: p = "md", className: m, style: h, requiredIndicator: g, labelId: _, descriptionId: v, errorId: y, validate: b, validationMode: x, validationDebounceTime: S, dirty: C, touched: w, actionsRef: T }) {
11
- return /* @__PURE__ */ t(n.Root, {
12
- className: r("lyds-field", m),
5
+ function i({ children: i, label: a, description: o, error: s, invalid: c, disabled: l, readOnly: u, required: d, name: f, size: p = "md", className: m, style: h, requiredIndicator: g, labelId: _, descriptionId: v, errorId: y, validate: b, validationMode: x, validationDebounceTime: S, dirty: C, touched: w, actionsRef: T }) {
6
+ return /* @__PURE__ */ n(r.Root, {
7
+ className: e("lyds-field", m),
13
8
  style: h,
14
9
  name: f,
15
10
  disabled: l,
@@ -24,27 +19,27 @@ function a({ children: i, label: a, description: o, error: s, invalid: c, disabl
24
19
  "data-readonly": u || void 0,
25
20
  "data-required": d || void 0,
26
21
  children: [
27
- a == null ? null : /* @__PURE__ */ t(n.Label, {
22
+ a == null ? null : /* @__PURE__ */ n(r.Label, {
28
23
  id: _,
29
24
  className: "lyds-field__label",
30
- children: [/* @__PURE__ */ e("span", { children: a }), d && g != null ? /* @__PURE__ */ e("span", {
25
+ children: [/* @__PURE__ */ t("span", { children: a }), d && g != null ? /* @__PURE__ */ t("span", {
31
26
  className: "lyds-field__required",
32
27
  "aria-hidden": "true",
33
28
  children: g
34
29
  }) : null]
35
30
  }),
36
31
  i,
37
- o == null ? null : /* @__PURE__ */ e(n.Description, {
32
+ o == null ? null : /* @__PURE__ */ t(r.Description, {
38
33
  id: v,
39
34
  className: "lyds-field__description",
40
35
  children: o
41
36
  }),
42
- s == null ? /* @__PURE__ */ e(n.Error, {
37
+ s == null ? /* @__PURE__ */ t(r.Error, {
43
38
  id: y,
44
39
  className: "lyds-field__error",
45
40
  "aria-live": "polite",
46
41
  "aria-atomic": "true"
47
- }) : /* @__PURE__ */ e(n.Error, {
42
+ }) : /* @__PURE__ */ t(r.Error, {
48
43
  id: y,
49
44
  className: "lyds-field__error",
50
45
  match: c ? !0 : void 0,
@@ -56,6 +51,6 @@ function a({ children: i, label: a, description: o, error: s, invalid: c, disabl
56
51
  });
57
52
  }
58
53
  //#endregion
59
- export { a as FieldFrame, r as cx, i as withStateClassName };
54
+ export { i as FieldFrame };
60
55
 
61
56
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","names":[],"sources":["../../../src/components/forms/internal.tsx"],"sourcesContent":["import { Field as BaseField } from \"@base-ui/react/field\";\nimport type * as React from \"react\";\n\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\nexport type FieldValidationProps = Pick<BaseField.Root.Props, \"actionsRef\" | \"dirty\" | \"touched\" | \"validate\" | \"validationDebounceTime\" | \"validationMode\">;\n\nexport interface FieldAnatomyProps extends FieldValidationProps {\n\t/** 欄位的可見標籤。省略時,請在控制項提供 `aria-label`。 */\n\tlabel?: React.ReactNode;\n\t/** 透過 Base UI Field 與控制項關聯的補充說明。 */\n\tdescription?: React.ReactNode;\n\t/** 透過 Base UI Field 與控制項關聯的驗證訊息。 */\n\terror?: React.ReactNode;\n\t/** 將經外部驗證的欄位標記為無效。 */\n\tinvalid?: boolean | undefined;\n\tdisabled?: boolean | undefined;\n\treadOnly?: boolean | undefined;\n\trequired?: boolean | undefined;\n\tname?: string | undefined;\n\tsize?: FieldSize | undefined;\n\tclassName?: string | undefined;\n\tstyle?: React.CSSProperties | undefined;\n\t/** 顯示於標籤後方的選用在地化註記。 */\n\trequiredIndicator?: React.ReactNode;\n}\n\ninterface FieldFrameProps extends FieldAnatomyProps {\n\tchildren: React.ReactNode;\n\tlabelId?: string | undefined;\n\tdescriptionId?: string | undefined;\n\terrorId?: string | undefined;\n}\n\nexport function cx(...classes: Array<string | false | null | undefined>): string {\n\treturn classes.filter(Boolean).join(\" \");\n}\n\nexport function withStateClassName<State>(baseClassName: string, className: string | ((state: State) => string | undefined) | undefined): string | ((state: State) => string) {\n\tif (typeof className === \"function\") {\n\t\treturn state => cx(baseClassName, className(state));\n\t}\n\n\treturn cx(baseClassName, className);\n}\n\nexport function FieldFrame({\n\tchildren,\n\tlabel,\n\tdescription,\n\terror,\n\tinvalid,\n\tdisabled,\n\treadOnly,\n\trequired,\n\tname,\n\tsize = \"md\",\n\tclassName,\n\tstyle,\n\trequiredIndicator,\n\tlabelId,\n\tdescriptionId,\n\terrorId,\n\tvalidate,\n\tvalidationMode,\n\tvalidationDebounceTime,\n\tdirty,\n\ttouched,\n\tactionsRef\n}: FieldFrameProps) {\n\treturn (\n\t\t<BaseField.Root\n\t\t\tclassName={cx(\"lyds-field\", className)}\n\t\t\tstyle={style}\n\t\t\tname={name}\n\t\t\tdisabled={disabled}\n\t\t\tinvalid={invalid}\n\t\t\tvalidate={validate}\n\t\t\tvalidationMode={validationMode}\n\t\t\tvalidationDebounceTime={validationDebounceTime}\n\t\t\tdirty={dirty}\n\t\t\ttouched={touched}\n\t\t\tactionsRef={actionsRef}\n\t\t\tdata-size={size}\n\t\t\tdata-readonly={readOnly || undefined}\n\t\t\tdata-required={required || undefined}\n\t\t>\n\t\t\t{label != null ? (\n\t\t\t\t<BaseField.Label id={labelId} className=\"lyds-field__label\">\n\t\t\t\t\t<span>{label}</span>\n\t\t\t\t\t{required && requiredIndicator != null ? (\n\t\t\t\t\t\t<span className=\"lyds-field__required\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t{requiredIndicator}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</BaseField.Label>\n\t\t\t) : null}\n\t\t\t{children}\n\t\t\t{description != null ? (\n\t\t\t\t<BaseField.Description id={descriptionId} className=\"lyds-field__description\">\n\t\t\t\t\t{description}\n\t\t\t\t</BaseField.Description>\n\t\t\t) : null}\n\t\t\t{error != null ? (\n\t\t\t\t<BaseField.Error id={errorId} className=\"lyds-field__error\" match={invalid ? true : undefined} aria-live=\"polite\" aria-atomic=\"true\">\n\t\t\t\t\t{error}\n\t\t\t\t</BaseField.Error>\n\t\t\t) : (\n\t\t\t\t<BaseField.Error id={errorId} className=\"lyds-field__error\" aria-live=\"polite\" aria-atomic=\"true\" />\n\t\t\t)}\n\t\t</BaseField.Root>\n\t);\n}\n"],"mappings":";;;AAkCA,SAAgB,EAAG,GAAG,GAA2D;CAChF,OAAO,EAAQ,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AACxC;AAEA,SAAgB,EAA0B,GAAuB,GAA6G;CAK7K,OAJI,OAAO,KAAc,cACjB,MAAS,EAAG,GAAe,EAAU,CAAK,CAAC,IAG5C,EAAG,GAAe,CAAS;AACnC;AAEA,SAAgB,EAAW,EAC1B,aACA,UACA,gBACA,UACA,YACA,aACA,aACA,aACA,SACA,UAAO,MACP,cACA,UACA,sBACA,YACA,kBACA,YACA,aACA,mBACA,2BACA,UACA,YACA,iBACmB;CACnB,OACC,kBAAC,EAAU,MAAX;EACC,WAAW,EAAG,cAAc,CAAS;EAC9B;EACD;EACI;EACD;EACC;EACM;EACQ;EACjB;EACE;EACG;EACZ,aAAW;EACX,iBAAe,KAAY,KAAA;EAC3B,iBAAe,KAAY,KAAA;EAd5B,UAAA;GAgBE,KAAS,OASN,OARH,kBAAC,EAAU,OAAX;IAAiB,IAAI;IAAS,WAAU;IAAxC,UAAA,CACC,kBAAC,QAAD,EAAA,UAAO,EAAY,CAAA,GAClB,KAAY,KAAqB,OACjC,kBAAC,QAAD;KAAM,WAAU;KAAuB,eAAY;KACjD,UAAA;IACI,CAAA,IACH,IACY;GACd,CAAA;GACH;GACA,KAAe,OAIZ,OAHH,kBAAC,EAAU,aAAX;IAAuB,IAAI;IAAe,WAAU;IAClD,UAAA;GACqB,CAAA;GAEvB,KAAS,OAKT,kBAAC,EAAU,OAAX;IAAiB,IAAI;IAAS,WAAU;IAAoB,aAAU;IAAS,eAAY;GAAQ,CAAA,IAJnG,kBAAC,EAAU,OAAX;IAAiB,IAAI;IAAS,WAAU;IAAoB,OAAO,IAAU,KAAO,KAAA;IAAW,aAAU;IAAS,eAAY;IAC5H,UAAA;GACe,CAAA;EAIH;;AAElB"}
1
+ {"version":3,"file":"internal.js","names":[],"sources":["../../../src/components/forms/internal.tsx"],"sourcesContent":["import { Field as BaseField } from \"@base-ui/react/field\";\nimport type * as React from \"react\";\n\nimport { cx } from \"@/internal\";\n\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\nexport type FieldValidationProps = Pick<BaseField.Root.Props, \"actionsRef\" | \"dirty\" | \"touched\" | \"validate\" | \"validationDebounceTime\" | \"validationMode\">;\n\nexport interface FieldAnatomyProps extends FieldValidationProps {\n\t/** 欄位的可見標籤。省略時,請在控制項提供 `aria-label`。 */\n\tlabel?: React.ReactNode;\n\t/** 透過 Base UI Field 與控制項關聯的補充說明。 */\n\tdescription?: React.ReactNode;\n\t/** 透過 Base UI Field 與控制項關聯的驗證訊息。 */\n\terror?: React.ReactNode;\n\t/** 將經外部驗證的欄位標記為無效。 */\n\tinvalid?: boolean | undefined;\n\tdisabled?: boolean | undefined;\n\treadOnly?: boolean | undefined;\n\trequired?: boolean | undefined;\n\tname?: string | undefined;\n\tsize?: FieldSize | undefined;\n\tclassName?: string | undefined;\n\tstyle?: React.CSSProperties | undefined;\n\t/** 顯示於標籤後方的選用在地化註記。 */\n\trequiredIndicator?: React.ReactNode;\n}\n\ninterface FieldFrameProps extends FieldAnatomyProps {\n\tchildren: React.ReactNode;\n\tlabelId?: string | undefined;\n\tdescriptionId?: string | undefined;\n\terrorId?: string | undefined;\n}\n\nexport function FieldFrame({\n\tchildren,\n\tlabel,\n\tdescription,\n\terror,\n\tinvalid,\n\tdisabled,\n\treadOnly,\n\trequired,\n\tname,\n\tsize = \"md\",\n\tclassName,\n\tstyle,\n\trequiredIndicator,\n\tlabelId,\n\tdescriptionId,\n\terrorId,\n\tvalidate,\n\tvalidationMode,\n\tvalidationDebounceTime,\n\tdirty,\n\ttouched,\n\tactionsRef\n}: FieldFrameProps) {\n\treturn (\n\t\t<BaseField.Root\n\t\t\tclassName={cx(\"lyds-field\", className)}\n\t\t\tstyle={style}\n\t\t\tname={name}\n\t\t\tdisabled={disabled}\n\t\t\tinvalid={invalid}\n\t\t\tvalidate={validate}\n\t\t\tvalidationMode={validationMode}\n\t\t\tvalidationDebounceTime={validationDebounceTime}\n\t\t\tdirty={dirty}\n\t\t\ttouched={touched}\n\t\t\tactionsRef={actionsRef}\n\t\t\tdata-size={size}\n\t\t\tdata-readonly={readOnly || undefined}\n\t\t\tdata-required={required || undefined}\n\t\t>\n\t\t\t{label != null ? (\n\t\t\t\t<BaseField.Label id={labelId} className=\"lyds-field__label\">\n\t\t\t\t\t<span>{label}</span>\n\t\t\t\t\t{required && requiredIndicator != null ? (\n\t\t\t\t\t\t<span className=\"lyds-field__required\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t{requiredIndicator}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</BaseField.Label>\n\t\t\t) : null}\n\t\t\t{children}\n\t\t\t{description != null ? (\n\t\t\t\t<BaseField.Description id={descriptionId} className=\"lyds-field__description\">\n\t\t\t\t\t{description}\n\t\t\t\t</BaseField.Description>\n\t\t\t) : null}\n\t\t\t{error != null ? (\n\t\t\t\t<BaseField.Error id={errorId} className=\"lyds-field__error\" match={invalid ? true : undefined} aria-live=\"polite\" aria-atomic=\"true\">\n\t\t\t\t\t{error}\n\t\t\t\t</BaseField.Error>\n\t\t\t) : (\n\t\t\t\t<BaseField.Error id={errorId} className=\"lyds-field__error\" aria-live=\"polite\" aria-atomic=\"true\" />\n\t\t\t)}\n\t\t</BaseField.Root>\n\t);\n}\n"],"mappings":";;;;AAoCA,SAAgB,EAAW,EAC1B,aACA,UACA,gBACA,UACA,YACA,aACA,aACA,aACA,SACA,UAAO,MACP,cACA,UACA,sBACA,YACA,kBACA,YACA,aACA,mBACA,2BACA,UACA,YACA,iBACmB;CACnB,OACC,kBAAC,EAAU,MAAX;EACC,WAAW,EAAG,cAAc,CAAS;EAC9B;EACD;EACI;EACD;EACC;EACM;EACQ;EACjB;EACE;EACG;EACZ,aAAW;EACX,iBAAe,KAAY,KAAA;EAC3B,iBAAe,KAAY,KAAA;EAd5B,UAAA;GAgBE,KAAS,OASN,OARH,kBAAC,EAAU,OAAX;IAAiB,IAAI;IAAS,WAAU;IAAxC,UAAA,CACC,kBAAC,QAAD,EAAA,UAAO,EAAY,CAAA,GAClB,KAAY,KAAqB,OACjC,kBAAC,QAAD;KAAM,WAAU;KAAuB,eAAY;KACjD,UAAA;IACI,CAAA,IACH,IACY;GACd,CAAA;GACH;GACA,KAAe,OAIZ,OAHH,kBAAC,EAAU,aAAX;IAAuB,IAAI;IAAe,WAAU;IAClD,UAAA;GACqB,CAAA;GAEvB,KAAS,OAKT,kBAAC,EAAU,OAAX;IAAiB,IAAI;IAAS,WAAU;IAAoB,aAAU;IAAS,eAAY;GAAQ,CAAA,IAJnG,kBAAC,EAAU,OAAX;IAAiB,IAAI;IAAS,WAAU;IAAoB,OAAO,IAAU,KAAO,KAAA;IAAW,aAAU;IAAS,eAAY;IAC5H,UAAA;GACe,CAAA;EAIH;;AAElB"}
@@ -0,0 +1,73 @@
1
+ /* empty css */
2
+ import { cx as e, withStateClassName as t } from "../../internal/class-names.js";
3
+ import { useMessages as n } from "../../intl/provider.js";
4
+ import { FieldFrame as r } from "./internal.js";
5
+ import * as i from "react";
6
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
+ import { PlusIcon as s } from "@phosphor-icons/react/dist/csr/Plus";
8
+ import { NumberField as c } from "@base-ui/react/number-field";
9
+ import { MinusIcon as l } from "@phosphor-icons/react/dist/csr/Minus";
10
+ //#region src/components/forms/number-field.tsx
11
+ var u = i.forwardRef(function({ label: i, description: u, error: d, invalid: f, disabled: p, readOnly: m, required: h, name: g, size: _ = "md", className: v, style: y, requiredIndicator: b, validate: x, validationMode: S, validationDebounceTime: C, dirty: w, touched: T, actionsRef: E, inputClassName: D, inputStyle: O, groupClassName: k, showSteppers: A = !0, incrementLabel: j, decrementLabel: M, ...N }, P) {
12
+ let F = n(), I = N["aria-label"], L = N["aria-labelledby"];
13
+ return /* @__PURE__ */ a(r, {
14
+ label: i,
15
+ description: u,
16
+ error: d,
17
+ invalid: f,
18
+ disabled: p,
19
+ readOnly: m,
20
+ required: h,
21
+ name: g,
22
+ size: _,
23
+ className: v,
24
+ style: y,
25
+ requiredIndicator: b,
26
+ validate: x,
27
+ validationMode: S,
28
+ validationDebounceTime: C,
29
+ dirty: w,
30
+ touched: T,
31
+ actionsRef: E,
32
+ children: /* @__PURE__ */ a(c.Root, {
33
+ ...N,
34
+ ref: P,
35
+ className: "lyds-number-field",
36
+ name: g,
37
+ disabled: p,
38
+ readOnly: m,
39
+ required: h,
40
+ "data-size": _,
41
+ children: /* @__PURE__ */ o(c.Group, {
42
+ className: t("lyds-number-field__group", k),
43
+ children: [/* @__PURE__ */ a(c.Input, {
44
+ "aria-label": I,
45
+ "aria-labelledby": L,
46
+ className: t("lyds-number-field__input", D),
47
+ style: O
48
+ }), A ? /* @__PURE__ */ o("span", {
49
+ className: "lyds-number-field__steppers",
50
+ children: [/* @__PURE__ */ a(c.Decrement, {
51
+ className: e("lyds-number-field__stepper", "lyds-number-field__stepper--decrement"),
52
+ "aria-label": M ?? F.numberFieldDecrement,
53
+ children: /* @__PURE__ */ a(l, {
54
+ "aria-hidden": "true",
55
+ weight: "bold"
56
+ })
57
+ }), /* @__PURE__ */ a(c.Increment, {
58
+ className: e("lyds-number-field__stepper", "lyds-number-field__stepper--increment"),
59
+ "aria-label": j ?? F.numberFieldIncrement,
60
+ children: /* @__PURE__ */ a(s, {
61
+ "aria-hidden": "true",
62
+ weight: "bold"
63
+ })
64
+ })]
65
+ }) : null]
66
+ })
67
+ })
68
+ });
69
+ });
70
+ //#endregion
71
+ export { u as NumberField };
72
+
73
+ //# sourceMappingURL=number-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.js","names":[],"sources":["../../../src/components/forms/number-field.tsx"],"sourcesContent":["import { cx, withStateClassName } from \"@/internal\";\nimport { useMessages } from \"@/intl\";\nimport { NumberField as BaseNumberField } from \"@base-ui/react/number-field\";\nimport { MinusIcon } from \"@phosphor-icons/react/dist/csr/Minus\";\nimport { PlusIcon } from \"@phosphor-icons/react/dist/csr/Plus\";\nimport * as React from \"react\";\nimport \"./forms.css\";\nimport { FieldFrame, type FieldAnatomyProps } from \"./internal\";\ntype NumberRootProps = Omit<BaseNumberField.Root.Props, \"className\" | \"disabled\" | \"name\" | \"readOnly\" | \"required\" | \"style\">;\n\nexport interface NumberFieldProps extends NumberRootProps, FieldAnatomyProps {\n\tinputClassName?: BaseNumberField.Input.Props[\"className\"];\n\tinputStyle?: React.CSSProperties;\n\tgroupClassName?: BaseNumberField.Group.Props[\"className\"];\n\tshowSteppers?: boolean;\n\tincrementLabel?: string;\n\tdecrementLabel?: string;\n}\n\n/** 以 Base UI Number Field 實作、支援地區格式的數字輸入元件。 */\nexport const NumberField = React.forwardRef<HTMLDivElement, NumberFieldProps>(function NumberField(\n\t{\n\t\tlabel,\n\t\tdescription,\n\t\terror,\n\t\tinvalid,\n\t\tdisabled,\n\t\treadOnly,\n\t\trequired,\n\t\tname,\n\t\tsize = \"md\",\n\t\tclassName,\n\t\tstyle,\n\t\trequiredIndicator,\n\t\tvalidate,\n\t\tvalidationMode,\n\t\tvalidationDebounceTime,\n\t\tdirty,\n\t\ttouched,\n\t\tactionsRef,\n\t\tinputClassName,\n\t\tinputStyle,\n\t\tgroupClassName,\n\t\tshowSteppers = true,\n\t\tincrementLabel,\n\t\tdecrementLabel,\n\t\t...numberProps\n\t},\n\tref\n) {\n\tconst messages = useMessages();\n\tconst ariaLabel = numberProps[\"aria-label\"];\n\tconst ariaLabelledBy = numberProps[\"aria-labelledby\"];\n\n\treturn (\n\t\t<FieldFrame\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\terror={error}\n\t\t\tinvalid={invalid}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t\trequired={required}\n\t\t\tname={name}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\trequiredIndicator={requiredIndicator}\n\t\t\tvalidate={validate}\n\t\t\tvalidationMode={validationMode}\n\t\t\tvalidationDebounceTime={validationDebounceTime}\n\t\t\tdirty={dirty}\n\t\t\ttouched={touched}\n\t\t\tactionsRef={actionsRef}\n\t\t>\n\t\t\t<BaseNumberField.Root {...numberProps} ref={ref} className=\"lyds-number-field\" name={name} disabled={disabled} readOnly={readOnly} required={required} data-size={size}>\n\t\t\t\t<BaseNumberField.Group className={withStateClassName<BaseNumberField.Group.State>(\"lyds-number-field__group\", groupClassName)}>\n\t\t\t\t\t<BaseNumberField.Input\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\tclassName={withStateClassName<BaseNumberField.Input.State>(\"lyds-number-field__input\", inputClassName)}\n\t\t\t\t\t\tstyle={inputStyle}\n\t\t\t\t\t/>\n\t\t\t\t\t{showSteppers ? (\n\t\t\t\t\t\t<span className=\"lyds-number-field__steppers\">\n\t\t\t\t\t\t\t<BaseNumberField.Decrement className={cx(\"lyds-number-field__stepper\", \"lyds-number-field__stepper--decrement\")} aria-label={decrementLabel ?? messages.numberFieldDecrement}>\n\t\t\t\t\t\t\t\t<MinusIcon aria-hidden=\"true\" weight=\"bold\" />\n\t\t\t\t\t\t\t</BaseNumberField.Decrement>\n\t\t\t\t\t\t\t<BaseNumberField.Increment className={cx(\"lyds-number-field__stepper\", \"lyds-number-field__stepper--increment\")} aria-label={incrementLabel ?? messages.numberFieldIncrement}>\n\t\t\t\t\t\t\t\t<PlusIcon aria-hidden=\"true\" weight=\"bold\" />\n\t\t\t\t\t\t\t</BaseNumberField.Increment>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</BaseNumberField.Group>\n\t\t\t</BaseNumberField.Root>\n\t\t</FieldFrame>\n\t);\n});\n"],"mappings":";;;;;;;;;;AAoBA,IAAa,IAAc,EAAM,WAA6C,SAC7E,EACC,UACA,gBACA,UACA,YACA,aACA,aACA,aACA,SACA,UAAO,MACP,cACA,UACA,sBACA,aACA,mBACA,2BACA,UACA,YACA,eACA,mBACA,eACA,mBACA,kBAAe,IACf,mBACA,mBACA,GAAG,KAEJ,GACC;CACD,IAAM,IAAW,EAAY,GACvB,IAAY,EAAY,eACxB,IAAiB,EAAY;CAEnC,OACC,kBAAC,GAAD;EACQ;EACM;EACN;EACE;EACC;EACA;EACA;EACJ;EACA;EACK;EACJ;EACY;EACT;EACM;EACQ;EACjB;EACE;EACG;EAEZ,UAAA,kBAAC,EAAgB,MAAjB;GAAsB,GAAI;GAAkB;GAAK,WAAU;GAA0B;GAAgB;GAAoB;GAAoB;GAAU,aAAW;GACjK,UAAA,kBAAC,EAAgB,OAAjB;IAAuB,WAAW,EAAgD,4BAA4B,CAAc;IAA5H,UAAA,CACC,kBAAC,EAAgB,OAAjB;KACC,cAAY;KACZ,mBAAiB;KACjB,WAAW,EAAgD,4BAA4B,CAAc;KACrG,OAAO;IACP,CAAA,GACA,IACA,kBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACC,kBAAC,EAAgB,WAAjB;MAA2B,WAAW,EAAG,8BAA8B,uCAAuC;MAAG,cAAY,KAAkB,EAAS;MACvJ,UAAA,kBAAC,GAAD;OAAW,eAAY;OAAO,QAAO;MAAQ,CAAA;KACnB,CAAA,GAC3B,kBAAC,EAAgB,WAAjB;MAA2B,WAAW,EAAG,8BAA8B,uCAAuC;MAAG,cAAY,KAAkB,EAAS;MACvJ,UAAA,kBAAC,GAAD;OAAU,eAAY;OAAO,QAAO;MAAQ,CAAA;KAClB,CAAA,CACtB;IACH,CAAA,IAAA,IACkB;;EACF,CAAA;CACX,CAAA;AAEd,CAAC"}
@@ -0,0 +1,57 @@
1
+ /* empty css */
2
+ import { withStateClassName as e } from "../../internal/class-names.js";
3
+ import { useMessages as t } from "../../intl/provider.js";
4
+ import { FieldFrame as n } from "./internal.js";
5
+ import * as r from "react";
6
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
7
+ import { OTPField as o } from "@base-ui/react/otp-field";
8
+ //#region src/components/forms/otp-field.tsx
9
+ var s = r.forwardRef(function({ label: s, description: c, error: l, invalid: u, disabled: d, readOnly: f, required: p, name: m, size: h = "md", className: g, style: _, requiredIndicator: v, validate: y, validationMode: b, validationDebounceTime: x, dirty: S, touched: C, actionsRef: w, inputClassName: T, inputStyle: E, getSlotLabel: D, separator: O = /* @__PURE__ */ i("span", {
10
+ "aria-hidden": "true",
11
+ children: "—"
12
+ }), separatorAfter: k = [], length: A, ...j }, M) {
13
+ let N = t();
14
+ return /* @__PURE__ */ i(n, {
15
+ label: s,
16
+ description: c,
17
+ error: l,
18
+ invalid: u,
19
+ disabled: d,
20
+ readOnly: f,
21
+ required: p,
22
+ name: m,
23
+ size: h,
24
+ className: g,
25
+ style: _,
26
+ requiredIndicator: v,
27
+ validate: y,
28
+ validationMode: b,
29
+ validationDebounceTime: x,
30
+ dirty: S,
31
+ touched: C,
32
+ actionsRef: w,
33
+ children: /* @__PURE__ */ i(o.Root, {
34
+ ...j,
35
+ ref: M,
36
+ className: "lyds-otp-field",
37
+ name: m,
38
+ disabled: d,
39
+ readOnly: f,
40
+ required: p,
41
+ length: A,
42
+ "data-size": h,
43
+ children: Array.from({ length: A }, (t, n) => /* @__PURE__ */ a(r.Fragment, { children: [/* @__PURE__ */ i(o.Input, {
44
+ className: e("lyds-otp-field__input", T),
45
+ style: E,
46
+ "aria-label": n > 0 ? D?.(n) ?? N.codeSlotLabel(n + 1, A) : void 0
47
+ }), k.includes(n + 1) && n < A - 1 ? /* @__PURE__ */ i("span", {
48
+ className: "lyds-otp-field__separator",
49
+ children: O
50
+ }) : null] }, n))
51
+ })
52
+ });
53
+ });
54
+ //#endregion
55
+ export { s as OTPField };
56
+
57
+ //# sourceMappingURL=otp-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otp-field.js","names":[],"sources":["../../../src/components/forms/otp-field.tsx"],"sourcesContent":["import { withStateClassName } from \"@/internal\";\nimport { useMessages } from \"@/intl\";\nimport { OTPField as BaseOTPField } from \"@base-ui/react/otp-field\";\nimport * as React from \"react\";\nimport \"./forms.css\";\nimport { FieldFrame, type FieldAnatomyProps } from \"./internal\";\ntype OTPRootProps = Omit<BaseOTPField.Root.Props, \"className\" | \"disabled\" | \"name\" | \"readOnly\" | \"required\" | \"style\">;\n\nexport interface OTPFieldProps extends OTPRootProps, FieldAnatomyProps {\n\tinputClassName?: BaseOTPField.Input.Props[\"className\"];\n\tinputStyle?: React.CSSProperties;\n\t/** 第一格之後各輸入格的選用在地化無障礙標籤。 */\n\tgetSlotLabel?: (index: number) => string;\n\tseparator?: React.ReactNode;\n\tseparatorAfter?: readonly number[];\n}\n\n/** 以 Base UI OTP Field 實作的多格驗證碼輸入元件。 */\nexport const OTPField = React.forwardRef<HTMLDivElement, OTPFieldProps>(function OTPField(\n\t{\n\t\tlabel,\n\t\tdescription,\n\t\terror,\n\t\tinvalid,\n\t\tdisabled,\n\t\treadOnly,\n\t\trequired,\n\t\tname,\n\t\tsize = \"md\",\n\t\tclassName,\n\t\tstyle,\n\t\trequiredIndicator,\n\t\tvalidate,\n\t\tvalidationMode,\n\t\tvalidationDebounceTime,\n\t\tdirty,\n\t\ttouched,\n\t\tactionsRef,\n\t\tinputClassName,\n\t\tinputStyle,\n\t\tgetSlotLabel,\n\t\tseparator = <span aria-hidden=\"true\">—</span>,\n\t\tseparatorAfter = [],\n\t\tlength,\n\t\t...otpProps\n\t},\n\tref\n) {\n\tconst messages = useMessages();\n\n\treturn (\n\t\t<FieldFrame\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\terror={error}\n\t\t\tinvalid={invalid}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t\trequired={required}\n\t\t\tname={name}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\trequiredIndicator={requiredIndicator}\n\t\t\tvalidate={validate}\n\t\t\tvalidationMode={validationMode}\n\t\t\tvalidationDebounceTime={validationDebounceTime}\n\t\t\tdirty={dirty}\n\t\t\ttouched={touched}\n\t\t\tactionsRef={actionsRef}\n\t\t>\n\t\t\t<BaseOTPField.Root {...otpProps} ref={ref} className=\"lyds-otp-field\" name={name} disabled={disabled} readOnly={readOnly} required={required} length={length} data-size={size}>\n\t\t\t\t{Array.from({ length }, (_, index) => (\n\t\t\t\t\t<React.Fragment key={index}>\n\t\t\t\t\t\t<BaseOTPField.Input\n\t\t\t\t\t\t\tclassName={withStateClassName<BaseOTPField.Input.State>(\"lyds-otp-field__input\", inputClassName)}\n\t\t\t\t\t\t\tstyle={inputStyle}\n\t\t\t\t\t\t\taria-label={index > 0 ? (getSlotLabel?.(index) ?? messages.codeSlotLabel(index + 1, length)) : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{separatorAfter.includes(index + 1) && index < length - 1 ? <span className=\"lyds-otp-field__separator\">{separator}</span> : null}\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</BaseOTPField.Root>\n\t\t</FieldFrame>\n\t);\n});\n"],"mappings":";;;;;;;;AAkBA,IAAa,IAAW,EAAM,WAA0C,SACvE,EACC,UACA,gBACA,UACA,YACA,aACA,aACA,aACA,SACA,UAAO,MACP,cACA,UACA,sBACA,aACA,mBACA,2BACA,UACA,YACA,eACA,mBACA,eACA,iBACA,eAAY,kBAAC,QAAD;CAAM,eAAY;CAAO,UAAA;AAAO,CAAA,GAC5C,oBAAiB,CAAC,GAClB,WACA,GAAG,KAEJ,GACC;CACD,IAAM,IAAW,EAAY;CAE7B,OACC,kBAAC,GAAD;EACQ;EACM;EACN;EACE;EACC;EACA;EACA;EACJ;EACA;EACK;EACJ;EACY;EACT;EACM;EACQ;EACjB;EACE;EACG;EAEZ,UAAA,kBAAC,EAAa,MAAd;GAAmB,GAAI;GAAe;GAAK,WAAU;GAAuB;GAAgB;GAAoB;GAAoB;GAAkB;GAAQ,aAAW;GACvK,UAAA,MAAM,KAAK,EAAE,UAAO,IAAI,GAAG,MAC3B,kBAAC,EAAM,UAAP,EAAA,UAAA,CACC,kBAAC,EAAa,OAAd;IACC,WAAW,EAA6C,yBAAyB,CAAc;IAC/F,OAAO;IACP,cAAY,IAAQ,IAAK,IAAe,CAAK,KAAK,EAAS,cAAc,IAAQ,GAAG,CAAM,IAAK,KAAA;GAC/F,CAAA,GACA,EAAe,SAAS,IAAQ,CAAC,KAAK,IAAQ,IAAS,IAAI,kBAAC,QAAD;IAAM,WAAU;IAA6B,UAAA;GAAgB,CAAA,IAAI,IAC9G,EAAA,GAPK,CAOL,CAChB;EACiB,CAAA;CACR,CAAA;AAEd,CAAC"}
@@ -34,6 +34,11 @@ export interface SearchFieldProps extends Omit<TextFieldProps, "startAdornment"
34
34
  }
35
35
  export declare const SearchField: React.ForwardRefExoticComponent<Omit<SearchFieldProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
36
36
  export interface PasswordFieldProps extends Omit<TextFieldProps, "endAdornment" | "type"> {
37
+ /**
38
+ * Left to the caller. A sign-in form wants `current-password`, a sign-up or change-password
39
+ * form wants `new-password`, and guessing either one hands the browser the wrong value.
40
+ */
41
+ autoComplete?: string;
37
42
  visible?: boolean;
38
43
  defaultVisible?: boolean;
39
44
  onVisibilityChange?: (visible: boolean) => void;
@@ -0,0 +1,200 @@
1
+ /* empty css */
2
+ import { cx as e, withStateClassName as t } from "../../internal/class-names.js";
3
+ import { useMessages as n } from "../../intl/provider.js";
4
+ import { FieldFrame as r } from "./internal.js";
5
+ import * as i from "react";
6
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
+ import { Field as s } from "@base-ui/react/field";
8
+ import { Input as c } from "@base-ui/react/input";
9
+ import { EyeIcon as l } from "@phosphor-icons/react/dist/csr/Eye";
10
+ import { EyeSlashIcon as u } from "@phosphor-icons/react/dist/csr/EyeSlash";
11
+ import { MagnifyingGlassIcon as d } from "@phosphor-icons/react/dist/csr/MagnifyingGlass";
12
+ //#region src/components/forms/text-field.tsx
13
+ function f({ forwardedRef: n, countrySelector: i, countrySelectorClassName: s, countrySelectorStyle: l, label: u, description: d, error: f, invalid: p, disabled: m, readOnly: h, required: g, name: _, size: v = "md", className: y, style: b, requiredIndicator: x, validate: S, validationMode: C, validationDebounceTime: w, dirty: T, touched: E, actionsRef: D, inputClassName: O, inputStyle: k, inputSize: A, startAdornment: j, endAdornment: M, technical: N, "aria-invalid": P, ...F }) {
14
+ let I = /* @__PURE__ */ o("div", {
15
+ className: e("lyds-field__control-frame", i != null && "lyds-phone-field__input-frame"),
16
+ "data-size": v,
17
+ "data-technical": N || void 0,
18
+ children: [
19
+ j == null ? null : /* @__PURE__ */ a("span", {
20
+ className: "lyds-field__adornment lyds-field__adornment--start",
21
+ children: j
22
+ }),
23
+ /* @__PURE__ */ a(c, {
24
+ ...F,
25
+ ref: n,
26
+ className: t("lyds-field__input", O),
27
+ style: k,
28
+ disabled: m,
29
+ readOnly: h,
30
+ required: g,
31
+ size: A,
32
+ "aria-invalid": p ? !0 : P
33
+ }),
34
+ M == null ? null : /* @__PURE__ */ a("span", {
35
+ className: "lyds-field__adornment lyds-field__adornment--end",
36
+ children: M
37
+ })
38
+ ]
39
+ });
40
+ return /* @__PURE__ */ a(r, {
41
+ label: u,
42
+ description: d,
43
+ error: f,
44
+ invalid: p,
45
+ disabled: m,
46
+ readOnly: h,
47
+ required: g,
48
+ name: _,
49
+ size: v,
50
+ className: y,
51
+ style: b,
52
+ requiredIndicator: x,
53
+ validate: S,
54
+ validationMode: C,
55
+ validationDebounceTime: w,
56
+ dirty: T,
57
+ touched: E,
58
+ actionsRef: D,
59
+ children: i == null ? I : /* @__PURE__ */ o("div", {
60
+ className: "lyds-phone-field",
61
+ children: [/* @__PURE__ */ a("span", {
62
+ className: e("lyds-phone-field__country", s),
63
+ style: l,
64
+ "aria-disabled": m || h || void 0,
65
+ inert: m || h || void 0,
66
+ "data-invalid": p || void 0,
67
+ children: i
68
+ }), I]
69
+ })
70
+ });
71
+ }
72
+ var p = i.forwardRef(function(e, t) {
73
+ return /* @__PURE__ */ a(f, {
74
+ ...e,
75
+ forwardedRef: t
76
+ });
77
+ }), m = i.forwardRef(function({ size: t = "md", invalid: n, disabled: r, readOnly: i, required: o, name: c, value: l, defaultValue: u, onValueChange: d, className: f, style: p, "aria-invalid": m, ...h }, g) {
78
+ return /* @__PURE__ */ a(s.Root, {
79
+ className: "lyds-input-root",
80
+ name: c,
81
+ disabled: r,
82
+ invalid: n,
83
+ "data-size": t,
84
+ "data-readonly": i || void 0,
85
+ "data-required": o || void 0,
86
+ children: /* @__PURE__ */ a(s.Control, {
87
+ ref: g,
88
+ render: /* @__PURE__ */ a("textarea", { ...h }),
89
+ className: e("lyds-textarea", f),
90
+ style: p,
91
+ disabled: r,
92
+ readOnly: i,
93
+ required: o,
94
+ value: l,
95
+ defaultValue: u,
96
+ onValueChange: d,
97
+ "aria-invalid": n ? !0 : m,
98
+ "data-size": t
99
+ })
100
+ });
101
+ }), h = i.forwardRef(function({ label: t, description: n, error: i, invalid: o, disabled: c, readOnly: l, required: u, name: d, size: f = "md", className: p, style: m, requiredIndicator: h, validate: g, validationMode: _, validationDebounceTime: v, dirty: y, touched: b, actionsRef: x, textareaClassName: S, textareaStyle: C, value: w, defaultValue: T, onValueChange: E, "aria-invalid": D, ...O }, k) {
102
+ return /* @__PURE__ */ a(r, {
103
+ label: t,
104
+ description: n,
105
+ error: i,
106
+ invalid: o,
107
+ disabled: c,
108
+ readOnly: l,
109
+ required: u,
110
+ name: d,
111
+ size: f,
112
+ className: p,
113
+ style: m,
114
+ requiredIndicator: h,
115
+ validate: g,
116
+ validationMode: _,
117
+ validationDebounceTime: v,
118
+ dirty: y,
119
+ touched: b,
120
+ actionsRef: x,
121
+ children: /* @__PURE__ */ a(s.Control, {
122
+ ref: k,
123
+ render: /* @__PURE__ */ a("textarea", { ...O }),
124
+ className: e("lyds-textarea", S),
125
+ style: C,
126
+ disabled: c,
127
+ readOnly: l,
128
+ required: u,
129
+ value: w,
130
+ defaultValue: T,
131
+ onValueChange: E,
132
+ "aria-invalid": o ? !0 : D,
133
+ "data-size": f
134
+ })
135
+ });
136
+ });
137
+ function g() {
138
+ return /* @__PURE__ */ a(d, {
139
+ "aria-hidden": "true",
140
+ className: "lyds-field__icon",
141
+ weight: "regular"
142
+ });
143
+ }
144
+ var _ = i.forwardRef(function({ searchIcon: e, autoComplete: t, ...n }, r) {
145
+ return /* @__PURE__ */ a(p, {
146
+ ...n,
147
+ ref: r,
148
+ type: "search",
149
+ autoComplete: t ?? "off",
150
+ startAdornment: e ?? /* @__PURE__ */ a(g, {})
151
+ });
152
+ });
153
+ function v({ visible: e }) {
154
+ return a(e ? l : u, {
155
+ "aria-hidden": "true",
156
+ className: "lyds-field__icon",
157
+ weight: "regular"
158
+ });
159
+ }
160
+ var y = i.forwardRef(function({ visible: e, defaultVisible: t = !1, onVisibilityChange: r, showPasswordLabel: o, hidePasswordLabel: s, ...c }, l) {
161
+ let u = n(), [d, f] = i.useState(t), m = e ?? d, h = () => {
162
+ let t = !m;
163
+ e === void 0 && f(t), r?.(t);
164
+ };
165
+ return /* @__PURE__ */ a(p, {
166
+ ...c,
167
+ ref: l,
168
+ type: m ? "text" : "password",
169
+ endAdornment: /* @__PURE__ */ a("button", {
170
+ className: "lyds-field__utility-button",
171
+ type: "button",
172
+ "aria-label": m ? s ?? u.passwordFieldHide : o ?? u.passwordFieldShow,
173
+ "aria-pressed": m,
174
+ onClick: h,
175
+ disabled: c.disabled,
176
+ children: /* @__PURE__ */ a(v, { visible: m })
177
+ })
178
+ });
179
+ }), b = i.forwardRef(function({ countrySelector: e, countrySelectorClassName: t, countrySelectorStyle: n, autoComplete: r, inputMode: i, ...o }, s) {
180
+ let c = typeof e == "function" ? e({
181
+ disabled: !!o.disabled,
182
+ readOnly: !!o.readOnly,
183
+ externallyInvalid: !!o.invalid
184
+ }) : e, l = c != null && c !== !1;
185
+ return /* @__PURE__ */ a(f, {
186
+ ...o,
187
+ forwardedRef: s,
188
+ type: "tel",
189
+ technical: !0,
190
+ autoComplete: r ?? "tel",
191
+ inputMode: i ?? "tel",
192
+ ...l ? { countrySelector: c } : {},
193
+ ...t === void 0 ? {} : { countrySelectorClassName: t },
194
+ ...n === void 0 ? {} : { countrySelectorStyle: n }
195
+ });
196
+ });
197
+ //#endregion
198
+ export { y as PasswordField, b as PhoneField, _ as SearchField, p as TextField, h as TextView, m as Textarea };
199
+
200
+ //# sourceMappingURL=text-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field.js","names":[],"sources":["../../../src/components/forms/text-field.tsx"],"sourcesContent":["import { cx, withStateClassName } from \"@/internal\";\nimport { useMessages } from \"@/intl\";\nimport { Field as BaseField } from \"@base-ui/react/field\";\nimport { Input as BaseInput } from \"@base-ui/react/input\";\nimport { EyeIcon } from \"@phosphor-icons/react/dist/csr/Eye\";\nimport { EyeSlashIcon } from \"@phosphor-icons/react/dist/csr/EyeSlash\";\nimport { MagnifyingGlassIcon } from \"@phosphor-icons/react/dist/csr/MagnifyingGlass\";\nimport * as React from \"react\";\nimport \"./forms.css\";\nimport { FieldFrame, type FieldAnatomyProps } from \"./internal\";\ntype TextFieldInputProps = Omit<BaseInput.Props, \"className\" | \"disabled\" | \"name\" | \"readOnly\" | \"required\" | \"size\" | \"style\">;\n\nexport interface TextFieldProps extends TextFieldInputProps, FieldAnatomyProps {\n\tinputClassName?: BaseInput.Props[\"className\"];\n\tinputStyle?: React.CSSProperties;\n\t/** 原生 HTML `size` 屬性,並非 Linyao Design System 的視覺尺寸。 */\n\tinputSize?: number;\n\tstartAdornment?: React.ReactNode;\n\tendAdornment?: React.ReactNode;\n\t/** 使用等寬或表格數字排版,不會修改輸入值。 */\n\ttechnical?: boolean;\n}\n\ninterface TextFieldAnatomyProps extends TextFieldProps {\n\tforwardedRef: React.ForwardedRef<HTMLInputElement>;\n\tcountrySelector?: React.ReactNode;\n\tcountrySelectorClassName?: string;\n\tcountrySelectorStyle?: React.CSSProperties;\n}\n\nfunction TextFieldAnatomy({\n\tforwardedRef,\n\tcountrySelector,\n\tcountrySelectorClassName,\n\tcountrySelectorStyle,\n\tlabel,\n\tdescription,\n\terror,\n\tinvalid,\n\tdisabled,\n\treadOnly,\n\trequired,\n\tname,\n\tsize = \"md\",\n\tclassName,\n\tstyle,\n\trequiredIndicator,\n\tvalidate,\n\tvalidationMode,\n\tvalidationDebounceTime,\n\tdirty,\n\ttouched,\n\tactionsRef,\n\tinputClassName,\n\tinputStyle,\n\tinputSize,\n\tstartAdornment,\n\tendAdornment,\n\ttechnical,\n\t\"aria-invalid\": ariaInvalid,\n\t...inputProps\n}: TextFieldAnatomyProps) {\n\tconst control = (\n\t\t<div className={cx(\"lyds-field__control-frame\", countrySelector != null && \"lyds-phone-field__input-frame\")} data-size={size} data-technical={technical || undefined}>\n\t\t\t{startAdornment != null ? <span className=\"lyds-field__adornment lyds-field__adornment--start\">{startAdornment}</span> : null}\n\t\t\t<BaseInput\n\t\t\t\t{...inputProps}\n\t\t\t\tref={forwardedRef}\n\t\t\t\tclassName={withStateClassName<BaseInput.State>(\"lyds-field__input\", inputClassName)}\n\t\t\t\tstyle={inputStyle}\n\t\t\t\tdisabled={disabled}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\trequired={required}\n\t\t\t\tsize={inputSize}\n\t\t\t\taria-invalid={invalid ? true : ariaInvalid}\n\t\t\t/>\n\t\t\t{endAdornment != null ? <span className=\"lyds-field__adornment lyds-field__adornment--end\">{endAdornment}</span> : null}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<FieldFrame\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\terror={error}\n\t\t\tinvalid={invalid}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t\trequired={required}\n\t\t\tname={name}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\trequiredIndicator={requiredIndicator}\n\t\t\tvalidate={validate}\n\t\t\tvalidationMode={validationMode}\n\t\t\tvalidationDebounceTime={validationDebounceTime}\n\t\t\tdirty={dirty}\n\t\t\ttouched={touched}\n\t\t\tactionsRef={actionsRef}\n\t\t>\n\t\t\t{countrySelector != null ? (\n\t\t\t\t<div className=\"lyds-phone-field\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cx(\"lyds-phone-field__country\", countrySelectorClassName)}\n\t\t\t\t\t\tstyle={countrySelectorStyle}\n\t\t\t\t\t\taria-disabled={disabled || readOnly || undefined}\n\t\t\t\t\t\tinert={disabled || readOnly || undefined}\n\t\t\t\t\t\tdata-invalid={invalid || undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{countrySelector}\n\t\t\t\t\t</span>\n\t\t\t\t\t{control}\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\tcontrol\n\t\t\t)}\n\t\t</FieldFrame>\n\t);\n}\n\nexport const TextField = React.forwardRef<HTMLInputElement, TextFieldProps>(function TextField(props, ref) {\n\treturn <TextFieldAnatomy {...props} forwardedRef={ref} />;\n});\n\nexport interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"className\" | \"size\" | \"style\"> {\n\tsize?: FieldAnatomyProps[\"size\"] | undefined;\n\tinvalid?: boolean | undefined;\n\tclassName?: string | undefined;\n\tstyle?: React.CSSProperties | undefined;\n\tonValueChange?: (value: string, eventDetails: BaseField.Control.ChangeEventDetails) => void;\n}\n\nconst TextareaControl = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function TextareaControl(\n\t{ size = \"md\", invalid, disabled, readOnly, required, name, value, defaultValue, onValueChange, className, style, \"aria-invalid\": ariaInvalid, ...props },\n\tref\n) {\n\treturn (\n\t\t<BaseField.Root className=\"lyds-input-root\" name={name} disabled={disabled} invalid={invalid} data-size={size} data-readonly={readOnly || undefined} data-required={required || undefined}>\n\t\t\t<BaseField.Control\n\t\t\t\tref={ref}\n\t\t\t\trender={<textarea {...props} />}\n\t\t\t\tclassName={cx(\"lyds-textarea\", className)}\n\t\t\t\tstyle={style}\n\t\t\t\tdisabled={disabled}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\trequired={required}\n\t\t\t\tvalue={value}\n\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\tonValueChange={onValueChange}\n\t\t\t\taria-invalid={invalid ? true : ariaInvalid}\n\t\t\t\tdata-size={size}\n\t\t\t/>\n\t\t</BaseField.Root>\n\t);\n});\n\n/** 以 Base UI 實作的獨立多行輸入控制項。 */\nexport const Textarea = TextareaControl;\n\nexport interface TextViewProps extends Omit<TextareaProps, \"className\" | \"disabled\" | \"invalid\" | \"name\" | \"readOnly\" | \"required\" | \"size\" | \"style\">, FieldAnatomyProps {\n\ttextareaClassName?: string;\n\ttextareaStyle?: React.CSSProperties;\n}\n\n/** 使用與 TextField 相同結構的完整多行欄位。 */\nexport const TextView = React.forwardRef<HTMLTextAreaElement, TextViewProps>(function TextView(\n\t{\n\t\tlabel,\n\t\tdescription,\n\t\terror,\n\t\tinvalid,\n\t\tdisabled,\n\t\treadOnly,\n\t\trequired,\n\t\tname,\n\t\tsize = \"md\",\n\t\tclassName,\n\t\tstyle,\n\t\trequiredIndicator,\n\t\tvalidate,\n\t\tvalidationMode,\n\t\tvalidationDebounceTime,\n\t\tdirty,\n\t\ttouched,\n\t\tactionsRef,\n\t\ttextareaClassName,\n\t\ttextareaStyle,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tonValueChange,\n\t\t\"aria-invalid\": ariaInvalid,\n\t\t...textareaProps\n\t},\n\tref\n) {\n\treturn (\n\t\t<FieldFrame\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\terror={error}\n\t\t\tinvalid={invalid}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t\trequired={required}\n\t\t\tname={name}\n\t\t\tsize={size}\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\trequiredIndicator={requiredIndicator}\n\t\t\tvalidate={validate}\n\t\t\tvalidationMode={validationMode}\n\t\t\tvalidationDebounceTime={validationDebounceTime}\n\t\t\tdirty={dirty}\n\t\t\ttouched={touched}\n\t\t\tactionsRef={actionsRef}\n\t\t>\n\t\t\t<BaseField.Control\n\t\t\t\tref={ref}\n\t\t\t\trender={<textarea {...textareaProps} />}\n\t\t\t\tclassName={cx(\"lyds-textarea\", textareaClassName)}\n\t\t\t\tstyle={textareaStyle}\n\t\t\t\tdisabled={disabled}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\trequired={required}\n\t\t\t\tvalue={value}\n\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\tonValueChange={onValueChange}\n\t\t\t\taria-invalid={invalid ? true : ariaInvalid}\n\t\t\t\tdata-size={size}\n\t\t\t/>\n\t\t</FieldFrame>\n\t);\n});\n\nfunction SearchIcon() {\n\treturn <MagnifyingGlassIcon aria-hidden=\"true\" className=\"lyds-field__icon\" weight=\"regular\" />;\n}\n\nexport interface SearchFieldProps extends Omit<TextFieldProps, \"startAdornment\" | \"type\"> {\n\tsearchIcon?: React.ReactNode;\n}\n\nexport const SearchField = React.forwardRef<HTMLInputElement, SearchFieldProps>(function SearchField({ searchIcon, autoComplete, ...props }, ref) {\n\treturn <TextField {...props} ref={ref} type=\"search\" autoComplete={autoComplete ?? \"off\"} startAdornment={searchIcon ?? <SearchIcon />} />;\n});\n\nfunction VisibilityIcon({ visible }: { visible: boolean }) {\n\treturn visible ? <EyeIcon aria-hidden=\"true\" className=\"lyds-field__icon\" weight=\"regular\" /> : <EyeSlashIcon aria-hidden=\"true\" className=\"lyds-field__icon\" weight=\"regular\" />;\n}\n\nexport interface PasswordFieldProps extends Omit<TextFieldProps, \"endAdornment\" | \"type\"> {\n\t/**\n\t * Left to the caller. A sign-in form wants `current-password`, a sign-up or change-password\n\t * form wants `new-password`, and guessing either one hands the browser the wrong value.\n\t */\n\tautoComplete?: string;\n\tvisible?: boolean;\n\tdefaultVisible?: boolean;\n\tonVisibilityChange?: (visible: boolean) => void;\n\tshowPasswordLabel?: string;\n\thidePasswordLabel?: string;\n}\n\nexport const PasswordField = React.forwardRef<HTMLInputElement, PasswordFieldProps>(function PasswordField(\n\t{ visible: visibleProp, defaultVisible = false, onVisibilityChange, showPasswordLabel, hidePasswordLabel, ...props },\n\tref\n) {\n\tconst messages = useMessages();\n\tconst [uncontrolledVisible, setUncontrolledVisible] = React.useState(defaultVisible);\n\tconst visible = visibleProp ?? uncontrolledVisible;\n\n\tconst toggleVisibility = () => {\n\t\tconst nextVisible = !visible;\n\t\tif (visibleProp === undefined) {\n\t\t\tsetUncontrolledVisible(nextVisible);\n\t\t}\n\t\tonVisibilityChange?.(nextVisible);\n\t};\n\n\treturn (\n\t\t<TextField\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\ttype={visible ? \"text\" : \"password\"}\n\t\t\tendAdornment={\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"lyds-field__utility-button\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={visible ? (hidePasswordLabel ?? messages.passwordFieldHide) : (showPasswordLabel ?? messages.passwordFieldShow)}\n\t\t\t\t\taria-pressed={visible}\n\t\t\t\t\tonClick={toggleVisibility}\n\t\t\t\t\tdisabled={props.disabled}\n\t\t\t\t>\n\t\t\t\t\t<VisibilityIcon visible={visible} />\n\t\t\t\t</button>\n\t\t\t}\n\t\t/>\n\t);\n});\n\nexport interface PhoneFieldCountrySelectorState {\n\tdisabled: boolean;\n\treadOnly: boolean;\n\t/** 反映由外部控制的 `invalid` 屬性,不代表 Base UI 驗證器產生的狀態。 */\n\texternallyInvalid: boolean;\n}\n\nexport interface PhoneFieldProps extends Omit<TextFieldProps, \"technical\" | \"type\"> {\n\t/**\n\t * 由使用端提供的國家選擇器或其觸發按鈕。提供此插槽後,\n\t * PhoneField 會使用雙區段結構。\n\t */\n\tcountrySelector?: React.ReactNode | ((state: PhoneFieldCountrySelectorState) => React.ReactNode);\n\tcountrySelectorClassName?: string;\n\tcountrySelectorStyle?: React.CSSProperties;\n}\n\n/** 不預設格式的電話欄位。國家選擇與驗證規則由使用端負責。 */\nexport const PhoneField = React.forwardRef<HTMLInputElement, PhoneFieldProps>(function PhoneField(\n\t{ countrySelector, countrySelectorClassName, countrySelectorStyle, autoComplete, inputMode, ...props },\n\tref\n) {\n\tconst resolvedCountrySelector =\n\t\ttypeof countrySelector === \"function\"\n\t\t\t? countrySelector({\n\t\t\t\t\tdisabled: Boolean(props.disabled),\n\t\t\t\t\treadOnly: Boolean(props.readOnly),\n\t\t\t\t\texternallyInvalid: Boolean(props.invalid)\n\t\t\t\t})\n\t\t\t: countrySelector;\n\tconst hasCountrySelector = resolvedCountrySelector !== null && resolvedCountrySelector !== undefined && resolvedCountrySelector !== false;\n\n\treturn (\n\t\t<TextFieldAnatomy\n\t\t\t{...props}\n\t\t\tforwardedRef={ref}\n\t\t\ttype=\"tel\"\n\t\t\ttechnical\n\t\t\tautoComplete={autoComplete ?? \"tel\"}\n\t\t\tinputMode={inputMode ?? \"tel\"}\n\t\t\t{...(hasCountrySelector ? { countrySelector: resolvedCountrySelector } : {})}\n\t\t\t{...(countrySelectorClassName !== undefined ? { countrySelectorClassName } : {})}\n\t\t\t{...(countrySelectorStyle !== undefined ? { countrySelectorStyle } : {})}\n\t\t/>\n\t);\n});\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { mergeClassNames as e } from "./shared.js";
1
+ import { cx as e } from "../../internal/class-names.js";
2
2
  import * as t from "react";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  import { Avatar as i } from "@base-ui/react/avatar";
5
- //#region src/components/foundations/Avatar.tsx
5
+ //#region src/components/foundations/avatar.tsx
6
6
  function a(e) {
7
7
  return e.trim().split(/\s+/u).slice(0, 2).map((e) => Array.from(e)[0] ?? "").join("").toUpperCase();
8
8
  }
@@ -42,4 +42,4 @@ o.displayName = "Avatar";
42
42
  //#endregion
43
43
  export { o as Avatar };
44
44
 
45
- //# sourceMappingURL=Avatar.js.map
45
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","names":[],"sources":["../../../src/components/foundations/avatar.tsx"],"sourcesContent":["import { cx } from \"@/internal\";\nimport { Avatar as BaseAvatar, type AvatarImageProps, type AvatarRootProps, type ImageLoadingStatus } from \"@base-ui/react/avatar\";\nimport * as React from \"react\";\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type AvatarVariant = \"neutral\" | \"accent\";\nexport type AvatarStatus = \"online\" | \"away\" | \"busy\" | \"offline\";\n\nexport interface AvatarBaseProps extends Omit<AvatarRootProps, \"children\" | \"className\" | \"style\"> {\n\tsrc?: string;\n\talt: string;\n\tfallback?: React.ReactNode;\n\tfallbackDelay?: number;\n\tsize?: AvatarSize;\n\tvariant?: AvatarVariant;\n\timageProps?: Omit<AvatarImageProps, \"alt\" | \"className\" | \"onLoadingStatusChange\" | \"src\"> & { className?: string };\n\tonLoadingStatusChange?: (status: ImageLoadingStatus) => void;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\nexport type AvatarProps = AvatarBaseProps & ({ status?: never; statusLabel?: never } | { status: AvatarStatus; statusLabel: string });\n\nfunction getInitials(label: string): string {\n\treturn label\n\t\t.trim()\n\t\t.split(/\\s+/u)\n\t\t.slice(0, 2)\n\t\t.map(part => Array.from(part)[0] ?? \"\")\n\t\t.join(\"\")\n\t\t.toUpperCase();\n}\n\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n\t{ src, alt, fallback, fallbackDelay, size = \"md\", variant = \"neutral\", status, statusLabel, imageProps, onLoadingStatusChange, className, style, ...props },\n\tref\n) {\n\tconst accessibleLabel = statusLabel ? `${alt}, ${statusLabel}` : alt;\n\n\treturn (\n\t\t<BaseAvatar.Root\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\taria-label={props[\"aria-label\"] ?? accessibleLabel}\n\t\t\trole={props.role ?? \"img\"}\n\t\t\tdata-size={size}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cx(\"lyds-avatar\", className)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{src ? <BaseAvatar.Image {...imageProps} src={src} alt=\"\" className={cx(\"lyds-avatar__image\", imageProps?.className)} onLoadingStatusChange={onLoadingStatusChange} /> : null}\n\t\t\t<BaseAvatar.Fallback className=\"lyds-avatar__fallback\" delay={fallbackDelay}>\n\t\t\t\t{fallback ?? getInitials(alt)}\n\t\t\t</BaseAvatar.Fallback>\n\t\t\t{status ? <span className=\"lyds-avatar__status\" data-status={status} aria-hidden=\"true\" /> : null}\n\t\t</BaseAvatar.Root>\n\t);\n});\n\nAvatar.displayName = \"Avatar\";\n"],"mappings":";;;;;AAsBA,SAAS,EAAY,GAAuB;CAC3C,OAAO,EACL,KAAK,CAAC,CACN,MAAM,MAAM,CAAC,CACb,MAAM,GAAG,CAAC,CAAC,CACX,KAAI,MAAQ,MAAM,KAAK,CAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CACtC,KAAK,EAAE,CAAC,CACR,YAAY;AACf;AAEA,IAAa,IAAS,EAAM,WAAyC,SACpE,EAAE,QAAK,QAAK,aAAU,kBAAe,UAAO,MAAM,aAAU,WAAW,WAAQ,gBAAa,eAAY,0BAAuB,cAAW,UAAO,GAAG,KACpJ,GACC;CACD,IAAM,IAAkB,IAAc,GAAG,EAAI,IAAI,MAAgB;CAEjE,OACC,kBAAC,EAAW,MAAZ;EACC,GAAI;EACC;EACL,cAAY,EAAM,iBAAiB;EACnC,MAAM,EAAM,QAAQ;EACpB,aAAW;EACX,gBAAc;EACd,WAAW,EAAG,eAAe,CAAS;EAC/B;EARR,UAAA;GAUE,IAAM,kBAAC,EAAW,OAAZ;IAAkB,GAAI;IAAiB;IAAK,KAAI;IAAG,WAAW,EAAG,sBAAsB,GAAY,SAAS;IAA0B;GAAwB,CAAA,IAAI;GACzK,kBAAC,EAAW,UAAZ;IAAqB,WAAU;IAAwB,OAAO;IAC5D,UAAA,KAAY,EAAY,CAAG;GACR,CAAA;GACpB,IAAS,kBAAC,QAAD;IAAM,WAAU;IAAsB,eAAa;IAAQ,eAAY;GAAQ,CAAA,IAAI;EAC7E;;AAEnB,CAAC;AAED,EAAO,cAAc"}
@@ -1,4 +1,4 @@
1
- import { ComponentRenderProp, ElementProps } from './shared.js';
1
+ import { ComponentRenderProp, ElementProps } from '../../internal/index.js';
2
2
  import * as React from "react";
3
3
  export type BadgeVariant = "neutral" | "accent" | "success" | "warning" | "danger";
4
4
  export type BadgeSize = "sm" | "md";
@@ -1,8 +1,8 @@
1
- import { mergeClassNames as e } from "./shared.js";
1
+ import { cx as e } from "../../internal/class-names.js";
2
2
  import * as t from "react";
3
3
  import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
4
4
  import { useRender as a } from "@base-ui/react/use-render";
5
- //#region src/components/foundations/Badge.tsx
5
+ //#region src/components/foundations/badge.tsx
6
6
  var o = t.forwardRef(function({ children: t, variant: o = "neutral", size: s = "md", render: c, className: l, ...u }, d) {
7
7
  return a({
8
8
  defaultTagName: "span",
@@ -29,4 +29,4 @@ o.displayName = "Badge";
29
29
  //#endregion
30
30
  export { o as Badge };
31
31
 
32
- //# sourceMappingURL=Badge.js.map
32
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","names":[],"sources":["../../../src/components/foundations/badge.tsx"],"sourcesContent":["import { type ComponentRenderProp, cx, type ElementProps } from \"@/internal\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport * as React from \"react\";\nexport type BadgeVariant = \"neutral\" | \"accent\" | \"success\" | \"warning\" | \"danger\";\nexport type BadgeSize = \"sm\" | \"md\";\n\nexport interface BadgeState extends Record<string, unknown> {\n\tsize: BadgeSize;\n\tvariant: BadgeVariant;\n}\n\nexport interface BadgeProps extends Omit<ElementProps<\"span\">, \"children\"> {\n\tchildren: React.ReactNode;\n\tvariant?: BadgeVariant;\n\tsize?: BadgeSize;\n\trender?: ComponentRenderProp<BadgeState>;\n}\n\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge({ children, variant = \"neutral\", size = \"md\", render, className, ...props }, ref) {\n\treturn useRender<BadgeState, HTMLSpanElement>({\n\t\tdefaultTagName: \"span\",\n\t\tref,\n\t\trender,\n\t\tstate: { size, variant },\n\t\tprops: {\n\t\t\t...props,\n\t\t\tchildren: (\n\t\t\t\t<>\n\t\t\t\t\t<span className=\"lyds-badge__indicator\" aria-hidden=\"true\" />\n\t\t\t\t\t<span className=\"lyds-badge__label\">{children}</span>\n\t\t\t\t</>\n\t\t\t),\n\t\t\tclassName: cx(\"lyds-badge\", className)\n\t\t}\n\t});\n});\n\nBadge.displayName = \"Badge\";\n"],"mappings":";;;;;AAkBA,IAAa,IAAQ,EAAM,WAAwC,SAAe,EAAE,aAAU,aAAU,WAAW,UAAO,MAAM,WAAQ,cAAW,GAAG,KAAS,GAAK;CACnK,OAAO,EAAuC;EAC7C,gBAAgB;EAChB;EACA;EACA,OAAO;GAAE;GAAM;EAAQ;EACvB,OAAO;GACN,GAAG;GACH,UACC,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,QAAD;IAAM,WAAU;IAAwB,eAAY;GAAQ,CAAA,GAC5D,kBAAC,QAAD;IAAM,WAAU;IAAqB;GAAe,CAAA,CACnD,EAAA,CAAA;GAEH,WAAW,EAAG,cAAc,CAAS;EACtC;CACD,CAAC;AACF,CAAC;AAED,EAAM,cAAc"}
@@ -1,8 +1,8 @@
1
- import { mergeClassNames as e } from "./shared.js";
1
+ import { cx as e } from "../../internal/class-names.js";
2
2
  import * as t from "react";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  import { Button as i } from "@base-ui/react/button";
5
- //#region src/components/foundations/Button.tsx
5
+ //#region src/components/foundations/button.tsx
6
6
  var a = t.forwardRef(function({ children: t, variant: a = "primary", size: o = "md", loading: s = !1, loadingIndicator: c, startIcon: l, endIcon: u, className: d, disabled: f = !1, focusableWhenDisabled: p, type: m, nativeButton: h, style: g, ..._ }, v) {
7
7
  let y = f || s;
8
8
  return /* @__PURE__ */ r(i, {
@@ -44,4 +44,4 @@ a.displayName = "Button";
44
44
  //#endregion
45
45
  export { a as Button };
46
46
 
47
- //# sourceMappingURL=Button.js.map
47
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","names":[],"sources":["../../../src/components/foundations/button.tsx"],"sourcesContent":["import { cx } from \"@/internal\";\nimport { Button as BaseButton, type ButtonProps as BaseButtonProps } from \"@base-ui/react/button\";\nimport * as React from \"react\";\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"neutral\" | \"quiet\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends Omit<BaseButtonProps, \"children\" | \"className\" | \"style\"> {\n\tchildren: React.ReactNode;\n\tvariant?: ButtonVariant;\n\tsize?: ButtonSize;\n\tloading?: boolean;\n\tloadingIndicator?: React.ReactNode;\n\t/** 裝飾性的前置圖示。請使用 @phosphor-icons/react;按鈕文字仍是無障礙名稱。 */\n\tstartIcon?: React.ReactNode;\n\t/** 裝飾性的後置圖示。請使用 @phosphor-icons/react;按鈕文字仍是無障礙名稱。 */\n\tendIcon?: React.ReactNode;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\nexport const Button = React.forwardRef<HTMLElement, ButtonProps>(function Button(\n\t{ children, variant = \"primary\", size = \"md\", loading = false, loadingIndicator, startIcon, endIcon, className, disabled = false, focusableWhenDisabled, type, nativeButton, style, ...props },\n\tref\n) {\n\tconst isDisabled = disabled || loading;\n\n\treturn (\n\t\t<BaseButton\n\t\t\t{...props}\n\t\t\tref={ref}\n\t\t\tnativeButton={nativeButton}\n\t\t\ttype={type ?? (nativeButton === false ? undefined : \"button\")}\n\t\t\tdisabled={isDisabled}\n\t\t\tfocusableWhenDisabled={focusableWhenDisabled ?? loading}\n\t\t\taria-busy={loading || undefined}\n\t\t\tdata-loading={loading ? \"\" : undefined}\n\t\t\tdata-variant={variant}\n\t\t\tdata-size={size}\n\t\t\tclassName={cx(\"lyds-button\", className)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{loading ? (\n\t\t\t\t<span className=\"lyds-button__spinner\" aria-hidden=\"true\">\n\t\t\t\t\t{loadingIndicator}\n\t\t\t\t</span>\n\t\t\t) : startIcon ? (\n\t\t\t\t<span className=\"lyds-button__icon\" aria-hidden=\"true\">\n\t\t\t\t\t{startIcon}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t\t<span className=\"lyds-button__label\">{children}</span>\n\t\t\t{!loading && endIcon ? (\n\t\t\t\t<span className=\"lyds-button__icon\" aria-hidden=\"true\">\n\t\t\t\t\t{endIcon}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</BaseButton>\n\t);\n});\n\nButton.displayName = \"Button\";\n"],"mappings":";;;;;AAoBA,IAAa,IAAS,EAAM,WAAqC,SAChE,EAAE,aAAU,aAAU,WAAW,UAAO,MAAM,aAAU,IAAO,qBAAkB,cAAW,YAAS,cAAW,cAAW,IAAO,0BAAuB,SAAM,iBAAc,UAAO,GAAG,KACvL,GACC;CACD,IAAM,IAAa,KAAY;CAE/B,OACC,kBAAC,GAAD;EACC,GAAI;EACC;EACS;EACd,MAAM,MAAS,MAAiB,KAAQ,KAAA,IAAY;EACpD,UAAU;EACV,uBAAuB,KAAyB;EAChD,aAAW,KAAW,KAAA;EACtB,gBAAc,IAAU,KAAK,KAAA;EAC7B,gBAAc;EACd,aAAW;EACX,WAAW,EAAG,eAAe,CAAS;EAC/B;EAZR,UAAA;GAcE,IACA,kBAAC,QAAD;IAAM,WAAU;IAAuB,eAAY;IACjD,UAAA;GACI,CAAA,IACH,IACH,kBAAC,QAAD;IAAM,WAAU;IAAoB,eAAY;IAC9C,UAAA;GACI,CAAA,IACH;GACJ,kBAAC,QAAD;IAAM,WAAU;IAAsB;GAAe,CAAA;GACpD,CAAC,KAAW,IACZ,kBAAC,QAAD;IAAM,WAAU;IAAoB,eAAY;IAC9C,UAAA;GACI,CAAA,IACH;EACO;;AAEd,CAAC;AAED,EAAO,cAAc"}
@@ -1,4 +1,5 @@
1
- import { ComponentRenderProp, ElementProps } from './shared.js';
1
+ import { ComponentRenderProp, ElementProps } from '../../internal/index.js';
2
+ import { HeadingLevel } from './section-heading.js';
2
3
  import * as React from "react";
3
4
  export type CardVariant = "material" | "elevated" | "inset" | "outline" | "cloud";
4
5
  export type CardSize = "sm" | "md" | "lg";
@@ -24,10 +25,16 @@ export declare const CardHeader: React.ForwardRefExoticComponent<Omit<ElementPro
24
25
  children: React.ReactNode;
25
26
  render?: ComponentRenderProp<Record<string, unknown>>;
26
27
  } & React.RefAttributes<HTMLDivElement>>;
27
- export type CardTitleProps = CardSlotProps<"h3">;
28
+ export type CardTitleProps = CardSlotProps<"h3"> & {
29
+ /** Heading level for the surrounding document outline. Cards nest, so this is rarely h3. */
30
+ level?: HeadingLevel;
31
+ };
28
32
  export declare const CardTitle: React.ForwardRefExoticComponent<Omit<ElementProps<"h3">, "children"> & {
29
33
  children: React.ReactNode;
30
34
  render?: ComponentRenderProp<Record<string, unknown>>;
35
+ } & {
36
+ /** Heading level for the surrounding document outline. Cards nest, so this is rarely h3. */
37
+ level?: HeadingLevel;
31
38
  } & React.RefAttributes<HTMLHeadingElement>>;
32
39
  export type CardDescriptionProps = CardSlotProps<"p">;
33
40
  export declare const CardDescription: React.ForwardRefExoticComponent<Omit<ElementProps<"p">, "children"> & {
@@ -1,8 +1,8 @@
1
- import { mergeClassNames as e } from "./shared.js";
1
+ import { cx as e } from "../../internal/class-names.js";
2
2
  import * as t from "react";
3
3
  import { jsx as n } from "react/jsx-runtime";
4
4
  import { useRender as r } from "@base-ui/react/use-render";
5
- //#region src/components/foundations/Card.tsx
5
+ //#region src/components/foundations/card.tsx
6
6
  var i = t.forwardRef(function({ children: t, variant: n = "material", size: i = "md", render: a, className: o, ...s }, c) {
7
7
  return r({
8
8
  defaultTagName: "div",
@@ -42,8 +42,8 @@ function o(t, n, i, a, o, s, c) {
42
42
  }
43
43
  var s = t.forwardRef(function({ children: e, render: t, className: n, ...r }, i) {
44
44
  return o("div", "header", e, t, n, r, i);
45
- }), c = t.forwardRef(function({ children: e, render: t, className: n, ...r }, i) {
46
- return o("h3", "title", e, t, n, r, i);
45
+ }), c = t.forwardRef(function({ children: e, level: t = 3, render: n, className: r, ...i }, a) {
46
+ return o(`h${t}`, "title", e, n, r, i, a);
47
47
  }), l = t.forwardRef(function({ children: e, render: t, className: n, ...r }, i) {
48
48
  return o("p", "description", e, t, n, r, i);
49
49
  }), u = t.forwardRef(function({ children: e, render: t, className: n, ...r }, i) {
@@ -54,4 +54,4 @@ var s = t.forwardRef(function({ children: e, render: t, className: n, ...r }, i)
54
54
  //#endregion
55
55
  export { i as Card, u as CardBody, l as CardDescription, d as CardFooter, s as CardHeader, c as CardTitle, a as CloudBox };
56
56
 
57
- //# sourceMappingURL=Card.js.map
57
+ //# sourceMappingURL=card.js.map