@tempots/beatui 1.5.0 → 1.6.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 (184) hide show
  1. package/dist/ar-Wr6gMs-M.cjs +1 -0
  2. package/dist/{ar-C-kUt6f9.js → ar-fdUqbCvM.js} +154 -1
  3. package/dist/auth/index.cjs.js +1 -1
  4. package/dist/auth/index.es.js +1 -1
  5. package/dist/auth-divider-DewHpITQ.cjs +1 -0
  6. package/dist/{auth-divider-BIATan1F.js → auth-divider-qnJuYK-x.js} +7 -7
  7. package/dist/beatui.css +1711 -132
  8. package/dist/beatui.tailwind.css +1711 -132
  9. package/dist/better-auth/index.cjs.js +1 -1
  10. package/dist/better-auth/index.es.js +5 -5
  11. package/dist/{modal-BHlp4QeT.js → custom-validation-BetUqAEz.js} +186 -186
  12. package/dist/custom-validation-CLscGHY4.cjs +1 -0
  13. package/dist/{de-CP0kbElb.js → de-C5-k5Eov.js} +156 -3
  14. package/dist/de-DZqdSEta.cjs +1 -0
  15. package/dist/deep-merge-D90SW1Ci.cjs +1 -0
  16. package/dist/deep-merge-ZVigk5Qf.js +1765 -0
  17. package/dist/{duration-input-C5il_E0F.cjs → duration-input-4AQnQpyo.cjs} +1 -1
  18. package/dist/{duration-input-DoCCrqOG.js → duration-input-GMBmT1BE.js} +4 -4
  19. package/dist/{editor-toolbar-group-QVdBUbB8.cjs → editor-toolbar-group-C_ft_T8D.cjs} +1 -1
  20. package/dist/{editor-toolbar-group-DWUWUO-B.js → editor-toolbar-group-FpOHrmtx.js} +2 -2
  21. package/dist/es-CJgYfRap.cjs +1 -0
  22. package/dist/{es-BtIkcnsw.js → es-h6jmoF4X.js} +156 -3
  23. package/dist/fa-BQ5PzwNY.cjs +1 -0
  24. package/dist/{fa-11-rZmQ-.js → fa-BuxK837l.js} +154 -1
  25. package/dist/fr-Bv3TG44U.cjs +1 -0
  26. package/dist/{fr-C-L2F8w2.js → fr-BwILQ9G2.js} +165 -12
  27. package/dist/he-5LbvgMCC.cjs +1 -0
  28. package/dist/{he-Bu1xGoQ9.js → he-yC9Sc7JD.js} +154 -1
  29. package/dist/{hi-CewH-MAH.js → hi-Da7rcCpP.js} +154 -1
  30. package/dist/hi-YWhWcG_L.cjs +1 -0
  31. package/dist/{index-BGKz2Nol.js → index-DI8bf9oC.js} +175 -172
  32. package/dist/index-DeUj-5ph.cjs +1 -0
  33. package/dist/index.cjs.js +4 -4
  34. package/dist/index.es.js +11548 -8326
  35. package/dist/{input-container-CO3DNqpp.js → input-container-8JFB11xN.js} +1 -1
  36. package/dist/{input-container-BkPcNDaZ.cjs → input-container-CyOgiiQD.cjs} +1 -1
  37. package/dist/it-BxOIJE45.cjs +1 -0
  38. package/dist/{it-5hiKQO_p.js → it-Yeklau78.js} +156 -3
  39. package/dist/ja-CNhjK06P.cjs +1 -0
  40. package/dist/{ja-CGfEmZrm.js → ja-Dxj9Q5Yd.js} +155 -2
  41. package/dist/json-schema/index.cjs.js +1 -1
  42. package/dist/json-schema/index.es.js +10 -10
  43. package/dist/json-schema-display/index.cjs.js +1 -1
  44. package/dist/json-schema-display/index.es.js +1 -1
  45. package/dist/json-structure/index.cjs.js +1 -1
  46. package/dist/json-structure/index.es.js +5 -5
  47. package/dist/ko-DgkqcXTs.cjs +1 -0
  48. package/dist/{ko-DZthvREd.js → ko-gn_MsegK.js} +154 -1
  49. package/dist/lexical/index.cjs.js +1 -1
  50. package/dist/lexical/index.es.js +4 -4
  51. package/dist/nl-Dy9lmbBO.cjs +1 -0
  52. package/dist/{nl-CcKyHlQ7.js → nl-vHNFtXXb.js} +162 -9
  53. package/dist/{notice-BXKtBEiC.js → notice-B6ojfenv.js} +4 -4
  54. package/dist/{notice-BBnSXYUc.cjs → notice-p2IqXS5-.cjs} +1 -1
  55. package/dist/{oneof-branch-detection-DSzC0PkO.js → oneof-branch-detection-Q_jxvJIA.js} +1 -1
  56. package/dist/{oneof-branch-detection-BEkAezNi.cjs → oneof-branch-detection-xDDDdYRk.cjs} +1 -1
  57. package/dist/pl-BtYbtsmG.cjs +1 -0
  58. package/dist/{pl-Mwtjp4MV.js → pl-C0UdHla0.js} +184 -31
  59. package/dist/prosemirror/index.cjs.js +1 -1
  60. package/dist/prosemirror/index.es.js +4 -4
  61. package/dist/pt-CtNmqQ1X.cjs +1 -0
  62. package/dist/{pt-BaTsY-8f.js → pt-DGKtfN0d.js} +156 -3
  63. package/dist/ru-BaL_NPRU.cjs +1 -0
  64. package/dist/{ru-CvbGmz5s.js → ru-CpXYLt-v.js} +154 -1
  65. package/dist/tailwind/preset.cjs.js +1 -1
  66. package/dist/tailwind/preset.es.js +1 -1
  67. package/dist/tailwind/vite-plugin.cjs.js +1 -1
  68. package/dist/tailwind/vite-plugin.es.js +1 -1
  69. package/dist/{text-input-D_IxFd0M.cjs → text-input-DS5zlXb2.cjs} +1 -1
  70. package/dist/{text-input-BAn02BzO.js → text-input-NJypZSnE.js} +1 -1
  71. package/dist/{toolbar-CnecqhaU.cjs → toolbar-BBwfe8U9.cjs} +1 -1
  72. package/dist/{toolbar-BKan3NHw.js → toolbar-BF2L6WKC.js} +1 -1
  73. package/dist/{tr-YFqQdZjM.js → tr-DIFZDFW_.js} +156 -3
  74. package/dist/tr-DwOd87oB.cjs +1 -0
  75. package/dist/{translations-CxDUnbXn.js → translations-5cXBrENb.js} +1 -1
  76. package/dist/{translations-DT5QQ4WO.js → translations-BCMP-h52.js} +269 -115
  77. package/dist/{translations-C_-cObaF.cjs → translations-BqWc0ZHz.cjs} +1 -1
  78. package/dist/translations-EwEmHe3v.cjs +1 -0
  79. package/dist/types/beatui-i18n/default.d.ts +109 -0
  80. package/dist/types/beatui-i18n/locales/en.d.ts +109 -0
  81. package/dist/types/beatui-i18n/translations.d.ts +109 -0
  82. package/dist/types/components/button/copy-button.d.ts +42 -0
  83. package/dist/types/components/button/index.d.ts +1 -0
  84. package/dist/types/components/button/toggle-button-group.d.ts +2 -2
  85. package/dist/types/components/button/toggle-button.d.ts +2 -2
  86. package/dist/types/components/data/date-picker-shared.d.ts +2 -5
  87. package/dist/types/components/data/date-picker.d.ts +1 -1
  88. package/dist/types/components/data/date-range-picker.d.ts +1 -1
  89. package/dist/types/components/data/index.d.ts +3 -0
  90. package/dist/types/components/data/stat-card.d.ts +108 -0
  91. package/dist/types/components/data/time-picker.d.ts +54 -0
  92. package/dist/types/components/data/virtual-scrolling/index.d.ts +1 -0
  93. package/dist/types/components/data/virtual-scrolling/virtual-list.d.ts +91 -0
  94. package/dist/types/components/form/input/checkbox-input.d.ts +1 -1
  95. package/dist/types/components/form/input/color-input.d.ts +1 -1
  96. package/dist/types/components/form/input/color-picker/canvas-draw.d.ts +12 -0
  97. package/dist/types/components/form/input/color-picker/channel-picker.d.ts +71 -0
  98. package/dist/types/components/form/input/color-picker/hex-color-picker.d.ts +20 -0
  99. package/dist/types/components/form/input/color-picker/hsl-color-picker.d.ts +14 -0
  100. package/dist/types/components/form/input/color-picker/hwb-color-picker.d.ts +15 -0
  101. package/dist/types/components/form/input/color-picker/index.d.ts +7 -0
  102. package/dist/types/components/form/input/color-picker/oklch-color-picker.d.ts +15 -0
  103. package/dist/types/components/form/input/color-picker/rgb-color-picker.d.ts +17 -0
  104. package/dist/types/components/form/input/color-swatch-input.d.ts +1 -1
  105. package/dist/types/components/form/input/combobox-input.d.ts +1 -1
  106. package/dist/types/components/form/input/date-input.d.ts +1 -1
  107. package/dist/types/components/form/input/date-range-select-base.d.ts +23 -0
  108. package/dist/types/components/form/input/date-range-select.d.ts +64 -0
  109. package/dist/types/components/form/input/date-select.d.ts +52 -0
  110. package/dist/types/components/form/input/date-time-input.d.ts +1 -1
  111. package/dist/types/components/form/input/date-time-select-base.d.ts +23 -0
  112. package/dist/types/components/form/input/date-time-select.d.ts +66 -0
  113. package/dist/types/components/form/input/dropdown-input.d.ts +1 -1
  114. package/dist/types/components/form/input/email-input.d.ts +1 -1
  115. package/dist/types/components/form/input/index.d.ts +17 -0
  116. package/dist/types/components/form/input/nullable-date-select.d.ts +55 -0
  117. package/dist/types/components/form/input/nullable-date-time-select.d.ts +68 -0
  118. package/dist/types/components/form/input/nullable-time-select.d.ts +64 -0
  119. package/dist/types/components/form/input/number-input.d.ts +5 -40
  120. package/dist/types/components/form/input/number-stepper.d.ts +53 -0
  121. package/dist/types/components/form/input/open-date-range-select.d.ts +75 -0
  122. package/dist/types/components/form/input/otp-input.d.ts +2 -2
  123. package/dist/types/components/form/input/password-input.d.ts +1 -1
  124. package/dist/types/components/form/input/radio-group.d.ts +1 -1
  125. package/dist/types/components/form/input/range-slider.d.ts +4 -4
  126. package/dist/types/components/form/input/rating-input.d.ts +1 -1
  127. package/dist/types/components/form/input/segmented-input.d.ts +6 -2
  128. package/dist/types/components/form/input/segmented-select.d.ts +84 -0
  129. package/dist/types/components/form/input/slider-input.d.ts +2 -2
  130. package/dist/types/components/form/input/sortable-list.d.ts +68 -0
  131. package/dist/types/components/form/input/switch.d.ts +1 -1
  132. package/dist/types/components/form/input/text-area.d.ts +1 -1
  133. package/dist/types/components/form/input/text-input.d.ts +1 -1
  134. package/dist/types/components/form/input/time-format.d.ts +31 -0
  135. package/dist/types/components/form/input/time-select-base.d.ts +23 -0
  136. package/dist/types/components/form/input/time-select.d.ts +61 -0
  137. package/dist/types/components/form/input/transfer-list.d.ts +56 -0
  138. package/dist/types/components/form/input/tri-state-checkbox-input.d.ts +1 -1
  139. package/dist/types/components/form/input/url-input.d.ts +1 -1
  140. package/dist/types/components/layout/nine-slice-scroll-view.d.ts +1 -1
  141. package/dist/types/components/navigation/index.d.ts +1 -0
  142. package/dist/types/components/navigation/stepper.d.ts +102 -0
  143. package/dist/types/components/overlay/index.d.ts +1 -1
  144. package/dist/types/components/overlay/spotlight.d.ts +62 -0
  145. package/dist/types/utils/index.d.ts +0 -1
  146. package/dist/ur-D9nLchps.cjs +1 -0
  147. package/dist/{ur-CdnwwnG_.js → ur-DBst-TXc.js} +154 -1
  148. package/dist/{use-form-CP6nftVl.cjs → use-form-Dcra7GeE.cjs} +1 -1
  149. package/dist/{use-form-CmQdxpOi.js → use-form-NfobsGNl.js} +2 -2
  150. package/dist/{vi-Bwvz1d_n.js → vi-DQOJp32U.js} +183 -30
  151. package/dist/vi-Dg1aiMr5.cjs +1 -0
  152. package/dist/widget-customization-BtkexHgm.js +1458 -0
  153. package/dist/widget-customization-pqmtsraC.cjs +1 -0
  154. package/dist/{zh-hy7Uw6c5.js → zh-DPK4HXl2.js} +154 -1
  155. package/dist/zh-tbwSTbmn.cjs +1 -0
  156. package/package.json +9 -9
  157. package/dist/ar-Dc56zcjW.cjs +0 -1
  158. package/dist/auth-divider-CVKfA8Cp.cjs +0 -1
  159. package/dist/de-DboQlEC4.cjs +0 -1
  160. package/dist/deep-merge-B33Qtlmw.cjs +0 -1
  161. package/dist/deep-merge-BUsrE2v4.js +0 -1704
  162. package/dist/es-CAmE_0Ph.cjs +0 -1
  163. package/dist/fa-D9LrFZdW.cjs +0 -1
  164. package/dist/fr-DKogQyss.cjs +0 -1
  165. package/dist/he-CVx91Jdr.cjs +0 -1
  166. package/dist/hi-BgrHV72l.cjs +0 -1
  167. package/dist/index-DFF7Uahh.cjs +0 -1
  168. package/dist/it-B1rA1F9l.cjs +0 -1
  169. package/dist/ja-DZnjjqoi.cjs +0 -1
  170. package/dist/ko-CDnYKYWU.cjs +0 -1
  171. package/dist/modal-BmpfNL48.cjs +0 -1
  172. package/dist/nl-Bj8QnDEY.cjs +0 -1
  173. package/dist/pl-BmuuxxVd.cjs +0 -1
  174. package/dist/pt-RiC0yeVA.cjs +0 -1
  175. package/dist/ru-pRqtOQHF.cjs +0 -1
  176. package/dist/tr-B9JhBJeL.cjs +0 -1
  177. package/dist/translations-qefRsdGi.cjs +0 -1
  178. package/dist/types/components/overlay/command-palette.d.ts +0 -17
  179. package/dist/types/utils/color.d.ts +0 -346
  180. package/dist/ur-BZakU0iv.cjs +0 -1
  181. package/dist/vi-D1nly0nb.cjs +0 -1
  182. package/dist/widget-customization-B0y-eesp.cjs +0 -1
  183. package/dist/widget-customization-CKbR4Dsg.js +0 -1066
  184. package/dist/zh-DBk7sSD9.cjs +0 -1
@@ -0,0 +1,68 @@
1
+ import { TNode, Value } from '@tempots/dom';
2
+ import { ControlSize } from '../../theme';
3
+ /** Visual variant for the sortable list items. */
4
+ export type SortableListVariant = 'bordered' | 'card' | 'plain';
5
+ /** Configuration options for the {@link SortableList} component. */
6
+ export interface SortableListOptions<T> {
7
+ /** The ordered list of items. */
8
+ items: Value<T[]>;
9
+ /** Callback invoked with the reordered list after a drag-and-drop or keyboard reorder. */
10
+ onChange: (items: T[]) => void;
11
+ /**
12
+ * Render function for each item. The `handle` TNode is a drag grip
13
+ * that should be placed inside the returned element to serve as the
14
+ * drag handle. Only the handle initiates drag — the rest of the item
15
+ * content remains interactive.
16
+ */
17
+ renderItem: (item: T, handle: TNode) => TNode;
18
+ /** Extract a unique key from an item (used for identity). */
19
+ keyOf: (item: T) => string;
20
+ /** Whether drag-and-drop is disabled. @default false */
21
+ disabled?: Value<boolean>;
22
+ /** Size variant. @default 'md' */
23
+ size?: Value<ControlSize>;
24
+ /** Additional CSS class(es) applied to the list container. */
25
+ class?: Value<string>;
26
+ /**
27
+ * Visual variant for items.
28
+ * - `'bordered'` — border around each item (default)
29
+ * - `'card'` — elevated card with shadow, no border
30
+ * - `'plain'` — no border, no background — items blend into the page
31
+ * @default 'bordered'
32
+ */
33
+ variant?: Value<SortableListVariant>;
34
+ /** Gap between items. Mapped to CSS spacing tokens. @default 'md' */
35
+ gap?: Value<ControlSize>;
36
+ /**
37
+ * Iconify icon identifier for the drag handle.
38
+ * @default 'lucide:grip-vertical'
39
+ */
40
+ handleIcon?: Value<string>;
41
+ }
42
+ /**
43
+ * A drag-and-drop reorderable list.
44
+ *
45
+ * Each item receives a drag handle TNode that the consumer places inside
46
+ * their render function. Dragging initiates only from the handle. Items
47
+ * can also be reordered via keyboard using Alt+ArrowUp / Alt+ArrowDown.
48
+ *
49
+ * @typeParam T - The item type
50
+ * @param options - Configuration for the sortable list
51
+ * @returns A sortable list element
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { prop } from '@tempots/dom'
56
+ * import { SortableList } from '@tempots/beatui'
57
+ *
58
+ * const items = prop(['Apple', 'Banana', 'Cherry'])
59
+ * SortableList({
60
+ * items,
61
+ * onChange: v => items.set(v),
62
+ * renderItem: (item, handle) =>
63
+ * html.div(attr.class('flex items-center gap-2'), handle, item),
64
+ * keyOf: item => item,
65
+ * })
66
+ * ```
67
+ */
68
+ export declare function SortableList<T>(options: SortableListOptions<T>): TNode;
@@ -56,7 +56,7 @@ export type SwitchOptions = {
56
56
  * const enabled = prop(false)
57
57
  * Switch({
58
58
  * value: enabled,
59
- * onChange: enabled.set,
59
+ * onChange: v => enabled.set(v),
60
60
  * size: 'md',
61
61
  * color: 'primary',
62
62
  * })
@@ -30,7 +30,7 @@ export type TextAreaOptions = Merge<InputOptions<string>, {
30
30
  * const bio = prop('')
31
31
  * TextArea({
32
32
  * value: bio,
33
- * onChange: bio.set,
33
+ * onChange: v => bio.set(v),
34
34
  * placeholder: 'Tell us about yourself...',
35
35
  * rows: 5,
36
36
  * size: 'md',
@@ -32,7 +32,7 @@ export type TextInputOptions = Merge<InputOptions<string>, {
32
32
  * const name = prop('John')
33
33
  * TextInput({
34
34
  * value: name,
35
- * onChange: name.set,
35
+ * onChange: v => name.set(v),
36
36
  * placeholder: 'Enter your name',
37
37
  * size: 'md',
38
38
  * })
@@ -0,0 +1,31 @@
1
+ /** Any object with hour/minute/second — covers PlainTime and PlainDateTime. */
2
+ interface TimeLike {
3
+ hour: number;
4
+ minute: number;
5
+ second: number;
6
+ }
7
+ /**
8
+ * Format a time-like value as a 12-hour string (e.g. "2:30 PM").
9
+ */
10
+ export declare function formatTime12(t: TimeLike): string;
11
+ /**
12
+ * Format a time-like value as a 24-hour string (e.g. "14:30").
13
+ */
14
+ export declare function formatTime24(t: TimeLike): string;
15
+ /**
16
+ * Format a time-like value as a 12-hour string with seconds (e.g. "2:30:15 PM").
17
+ */
18
+ export declare function formatTime12WithSeconds(t: TimeLike): string;
19
+ /**
20
+ * Format a time-like value as a 24-hour string with seconds (e.g. "14:30:15").
21
+ */
22
+ export declare function formatTime24WithSeconds(t: TimeLike): string;
23
+ /**
24
+ * Pick the correct formatter based on 12-hour and seconds flags.
25
+ */
26
+ export declare function formatTimeAuto(t: TimeLike, is12Hour: boolean, withSeconds: boolean): string;
27
+ /**
28
+ * Detect whether a locale uses 12-hour time format.
29
+ */
30
+ export declare function localeUses12Hour(locale: string): boolean;
31
+ export {};
@@ -0,0 +1,23 @@
1
+ import { TNode, Value } from '@tempots/dom';
2
+ import { CommonInputOptions } from './input-options';
3
+ /**
4
+ * Internal base options for the time select shell (trigger + flyout).
5
+ * The actual picker content is provided via `panelContent`.
6
+ */
7
+ export interface TimeSelectShellOptions extends CommonInputOptions {
8
+ /** The display text shown in the trigger. */
9
+ displayText: Value<string>;
10
+ /** The content to render inside the flyout panel. */
11
+ panelContent: TNode;
12
+ /** Callback invoked on blur. */
13
+ onBlur?: () => void;
14
+ /** Content to render before the display text. */
15
+ before?: TNode;
16
+ /** Content to render after the display text. */
17
+ after?: TNode;
18
+ }
19
+ /**
20
+ * Shared shell for time selectors: trigger button + flyout panel.
21
+ * Used by both TimeSelect and NullableTimeSelect.
22
+ */
23
+ export declare function TimeSelectShell(options: TimeSelectShellOptions): TNode;
@@ -0,0 +1,61 @@
1
+ import { type TNode, Value, type Merge } from '@tempots/dom';
2
+ import { CommonInputOptions } from './input-options';
3
+ import type { PlainTime } from '../../../temporal/types';
4
+ import { ThemeColorName } from '../../../tokens';
5
+ /**
6
+ * Configuration options for the {@link TimeSelect} component.
7
+ */
8
+ export type TimeSelectOptions = Merge<CommonInputOptions, {
9
+ /** The selected time. */
10
+ value: Value<PlainTime>;
11
+ /** Callback invoked when the time changes. */
12
+ onChange?: (time: PlainTime) => void;
13
+ /** Callback invoked on blur. */
14
+ onBlur?: () => void;
15
+ /** Theme color. @default 'primary' */
16
+ color?: Value<ThemeColorName>;
17
+ /** Whether to show seconds. @default false */
18
+ showSeconds?: Value<boolean>;
19
+ /** Whether to use 12-hour format. When omitted, auto-detected from the current locale. */
20
+ use12Hour?: Value<boolean>;
21
+ /** Step for minutes column. @default 1 */
22
+ minuteStep?: Value<number>;
23
+ /** Step for seconds column. @default 1 */
24
+ secondStep?: Value<number>;
25
+ /** Whether to show a "Now" button. @default false */
26
+ showNow?: Value<boolean>;
27
+ /** Format a PlainTime for display. When omitted, uses locale-aware 12/24-hour format. */
28
+ formatTime?: (time: PlainTime) => string;
29
+ /** Content to render before the display text. */
30
+ before?: TNode;
31
+ /** Content to render after the display text. */
32
+ after?: TNode;
33
+ }>;
34
+ /**
35
+ * A dropdown time selector.
36
+ *
37
+ * Displays the selected time in a styled trigger button. Clicking opens a
38
+ * flyout panel with a {@link TimePicker} for selecting a time.
39
+ *
40
+ * When no custom `formatTime` is provided, the display adapts to the
41
+ * locale's 12/24-hour convention (or the explicit `use12Hour` prop).
42
+ *
43
+ * Use {@link NullableTimeSelect} when the time can be null/unset.
44
+ *
45
+ * @param options - Configuration for the time selector
46
+ * @returns A time selector element
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * import { prop } from '@tempots/dom'
51
+ * import { TimeSelect } from '@tempots/beatui'
52
+ * import { Temporal } from '@js-temporal/polyfill'
53
+ *
54
+ * const time = prop(Temporal.PlainTime.from('14:30'))
55
+ * TimeSelect({
56
+ * value: time,
57
+ * onChange: v => time.set(v),
58
+ * })
59
+ * ```
60
+ */
61
+ export declare function TimeSelect(options: TimeSelectOptions): TNode;
@@ -0,0 +1,56 @@
1
+ import { TNode, Value } from '@tempots/dom';
2
+ import { ControlSize } from '../../theme';
3
+ import { ThemeColorName } from '../../../tokens';
4
+ /** Configuration options for the {@link TransferList} component. */
5
+ export interface TransferListOptions<T> {
6
+ /** Items available for selection (left panel). */
7
+ available: Value<T[]>;
8
+ /** Items currently selected (right panel). */
9
+ selected: Value<T[]>;
10
+ /** Callback invoked with the new selected items array after a transfer. */
11
+ onChange: (selected: T[]) => void;
12
+ /** Render function for each item. */
13
+ renderItem: (item: T) => TNode;
14
+ /** Extract a unique key from an item. */
15
+ keyOf: (item: T) => string;
16
+ /** Extract searchable text from an item. Defaults to {@link keyOf}. */
17
+ searchField?: (item: T) => string;
18
+ /** Whether to show search inputs on each panel. @default false */
19
+ searchable?: Value<boolean>;
20
+ /** Whether the component is disabled. @default false */
21
+ disabled?: Value<boolean>;
22
+ /** Size variant. @default 'md' */
23
+ size?: Value<ControlSize>;
24
+ /** Theme color. @default 'primary' */
25
+ color?: Value<ThemeColorName>;
26
+ }
27
+ /**
28
+ * A dual-list component for transferring items between "available" and
29
+ * "selected" lists. Generic in `T` with user-provided render and key functions.
30
+ *
31
+ * Supports multi-select via checkboxes, move-selected / move-all actions
32
+ * in both directions, and optional search filtering per panel.
33
+ *
34
+ * @typeParam T - The item type
35
+ * @param options - Configuration for the transfer list
36
+ * @returns A transfer list element
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * import { prop } from '@tempots/dom'
41
+ * import { TransferList } from '@tempots/beatui'
42
+ *
43
+ * const available = prop(['Apple', 'Banana', 'Cherry', 'Date'])
44
+ * const selected = prop<string[]>([])
45
+ *
46
+ * TransferList({
47
+ * available,
48
+ * selected,
49
+ * onChange: v => selected.set(v),
50
+ * renderItem: item => html.span(item),
51
+ * keyOf: item => item,
52
+ * searchable: true,
53
+ * })
54
+ * ```
55
+ */
56
+ export declare function TransferList<T>(options: TransferListOptions<T>): TNode;
@@ -49,7 +49,7 @@ export type TriStateCheckboxInputOptions = InputOptions<CheckboxState> & {
49
49
  * const state = prop<CheckboxState>('unchecked')
50
50
  * TriStateCheckboxInput({
51
51
  * value: state,
52
- * onChange: state.set,
52
+ * onChange: v => state.set(v),
53
53
  * placeholder: 'Select all',
54
54
  * })
55
55
  * ```
@@ -17,7 +17,7 @@ import { InputOptions } from './input-options';
17
17
  * const website = prop('https://')
18
18
  * UrlInput({
19
19
  * value: website,
20
- * onChange: website.set,
20
+ * onChange: v => website.set(v),
21
21
  * placeholder: 'https://example.com',
22
22
  * })
23
23
  * ```
@@ -123,4 +123,4 @@ export type NineSliceScrollViewOptions = {
123
123
  * })
124
124
  * ```
125
125
  */
126
- export declare function NineSliceScrollView({ body, contentWidth, contentHeight, header, headerHeight, topStart, topEnd, footer, footerHeight, bottomStart, bottomEnd, sidebarStart, sidebarStartWidth, sidebarEnd, sidebarEndWidth, anchorMode, }: NineSliceScrollViewOptions): import("@tempots/dom").Renderable;
126
+ export declare function NineSliceScrollView({ body, contentWidth, contentHeight, header, headerHeight, topStart, topEnd, footer, footerHeight, bottomStart, bottomEnd, sidebarStart, sidebarStartWidth, sidebarEnd, sidebarEndWidth, anchorMode, }: NineSliceScrollViewOptions): import("@tempots/core").Renderable<import("@tempots/dom").DOMContext, typeof import("@tempots/dom").DOM_RENDERABLE_TYPE>;
@@ -8,3 +8,4 @@ export * from './tabs';
8
8
  export * from './toolbar';
9
9
  export * from './navigation-progress';
10
10
  export * from './tree-view';
11
+ export * from './stepper';
@@ -0,0 +1,102 @@
1
+ import { Signal, TNode, Value } from '@tempots/dom';
2
+ import { ControlSize } from '../theme';
3
+ import { ThemeColorName } from '../../tokens';
4
+ /** State of an individual step in a {@link Stepper}. */
5
+ export type StepState = 'completed' | 'active' | 'pending' | 'error';
6
+ /**
7
+ * Definition of a single step in a {@link Stepper}.
8
+ */
9
+ export interface StepDefinition {
10
+ /** Display label for the step indicator. */
11
+ label: string;
12
+ /** Optional description shown below the label. */
13
+ description?: string;
14
+ /** Optional Iconify icon shown in the step circle. */
15
+ icon?: string;
16
+ /** Content rendered when this step is active. */
17
+ content?: () => TNode;
18
+ /**
19
+ * Async validation before advancing past this step.
20
+ * Return `true` to allow, `false` to block.
21
+ */
22
+ beforeNext?: () => boolean | Promise<boolean>;
23
+ }
24
+ /** Configuration options for the {@link Stepper} component. */
25
+ export interface StepperOptions {
26
+ /** Array of step definitions. */
27
+ steps: StepDefinition[];
28
+ /** The active step index (0-based). */
29
+ value?: Value<number>;
30
+ /** Callback invoked when the active step changes. */
31
+ onChange?: (index: number) => void;
32
+ /** Layout orientation. @default 'horizontal' */
33
+ orientation?: Value<'horizontal' | 'vertical'>;
34
+ /** Visual variant. @default 'default' */
35
+ variant?: Value<'default' | 'compact'>;
36
+ /** Size of the stepper. @default 'md' */
37
+ size?: Value<ControlSize>;
38
+ /** Theme color for active/completed steps. @default 'primary' */
39
+ color?: Value<ThemeColorName>;
40
+ /** Whether the stepper is disabled. @default false */
41
+ disabled?: Value<boolean>;
42
+ /** Whether to show navigation buttons. @default true */
43
+ showNavigation?: Value<boolean>;
44
+ }
45
+ /** Programmatic controller for the stepper. */
46
+ export interface StepperController {
47
+ /** Jump to a specific step. Forward jumps validate intermediate beforeNext guards. */
48
+ goTo: (index: number) => Promise<boolean>;
49
+ /** Advance to the next step (respects beforeNext). Returns false if blocked. */
50
+ next: () => Promise<boolean>;
51
+ /** Go back to the previous step. */
52
+ prev: () => void;
53
+ /** Mark the stepper as complete (validates remaining beforeNext guards first). */
54
+ complete: () => Promise<boolean>;
55
+ /** Reactive signal for the current step index. */
56
+ currentStep: Signal<number>;
57
+ /** Set a step to error state. */
58
+ setError: (index: number) => void;
59
+ /** Clear error state on a step. */
60
+ clearError: (index: number) => void;
61
+ }
62
+ /**
63
+ * Creates a multi-step workflow indicator with content panels and
64
+ * returns a `[TNode, StepperController]` tuple for programmatic control.
65
+ *
66
+ * @param options - Configuration for the stepper
67
+ * @returns A tuple of `[renderable, controller]`
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * const [stepper, ctrl] = createStepper({
72
+ * steps: [
73
+ * { label: 'Account', content: () => html.div('Step 1 content') },
74
+ * { label: 'Profile', content: () => html.div('Step 2 content') },
75
+ * { label: 'Confirm', content: () => html.div('Step 3 content') },
76
+ * ],
77
+ * onChange: idx => console.log('Step', idx),
78
+ * })
79
+ * ```
80
+ */
81
+ export declare function createStepper(options: StepperOptions): [TNode, StepperController];
82
+ /**
83
+ * A multi-step workflow indicator with content panels and navigation buttons.
84
+ *
85
+ * Convenience wrapper around {@link createStepper} that returns only the TNode.
86
+ * Use `createStepper` when you need programmatic control via the controller.
87
+ *
88
+ * @param options - Configuration for the stepper
89
+ * @returns A stepper element
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * Stepper({
94
+ * steps: [
95
+ * { label: 'Account', content: () => html.div('Create your account') },
96
+ * { label: 'Profile', content: () => html.div('Set up your profile') },
97
+ * { label: 'Done', content: () => html.div('All set!') },
98
+ * ],
99
+ * })
100
+ * ```
101
+ */
102
+ export declare function Stepper(options: StepperOptions): TNode;
@@ -6,7 +6,7 @@ export * from './popover';
6
6
  export * from './ribbon';
7
7
  export * from './lightbox';
8
8
  export * from './announcement-bar';
9
- export * from './command-palette';
10
9
  export * from './block-command-palette';
11
10
  export * from './dialogs';
12
11
  export * from './onboarding-tour';
12
+ export * from './spotlight';
@@ -0,0 +1,62 @@
1
+ import { Renderable, Signal, TNode, Value } from '@tempots/dom';
2
+ export interface SpotlightItem {
3
+ id: string;
4
+ label: string;
5
+ description?: string;
6
+ icon?: string;
7
+ shortcut?: string[];
8
+ section?: string;
9
+ /** Extra terms for fuzzy search */
10
+ keywords?: string[];
11
+ onSelect: () => void;
12
+ }
13
+ export interface SpotlightOptions {
14
+ items: Value<SpotlightItem[]>;
15
+ onSelect?: (item: SpotlightItem) => void;
16
+ /** @default 'Search' */
17
+ placeholder?: Value<string>;
18
+ /** @default 'No results' */
19
+ emptyMessage?: Value<string>;
20
+ /** @default 'md' */
21
+ size?: Value<'sm' | 'md' | 'lg'>;
22
+ recentItems?: Value<SpotlightItem[]>;
23
+ /** @default 'mod+k' */
24
+ hotkey?: string;
25
+ /** @default 'body' */
26
+ container?: 'body' | 'element';
27
+ /** Overlay backdrop effect. @default 'opaque' */
28
+ overlayEffect?: 'opaque' | 'transparent';
29
+ }
30
+ export interface SpotlightController {
31
+ open: (items?: SpotlightItem[]) => void;
32
+ close: () => void;
33
+ isOpen: Signal<boolean>;
34
+ }
35
+ /**
36
+ * A unified search/command palette with fuzzy search, section grouping,
37
+ * recent items, and a global hotkey (default: Mod+K).
38
+ *
39
+ * Returns a tuple of the rendered TNode and a controller for programmatic
40
+ * open/close and access to the open state signal.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const [node, controller] = createSpotlight(
45
+ * { items: myItems },
46
+ * ctrl => Button({ onClick: ctrl.open }, 'Open Spotlight')
47
+ * )
48
+ * ```
49
+ */
50
+ export declare function createSpotlight(options: SpotlightOptions, children: (controller: SpotlightController) => TNode): [TNode, SpotlightController];
51
+ /**
52
+ * Convenience Renderable wrapper around `createSpotlight`.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * Spotlight(
57
+ * { items: myItems },
58
+ * ctrl => Button({ onClick: ctrl.open }, 'Open')
59
+ * )
60
+ * ```
61
+ */
62
+ export declare function Spotlight(options: SpotlightOptions, children: (controller: SpotlightController) => TNode): Renderable;
@@ -1,4 +1,3 @@
1
- export * from './color';
2
1
  export * from './delay-signal';
3
2
  export * from './download';
4
3
  export * from './focus-trap';
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./translations-EwEmHe3v.cjs"),r={loadingExtended:"لوڈ ہو رہا ہے، براہ کرم انتظار کریں",loadingShort:"لوڈ ہو رہا ہے...",locale:"زبان",iconDescription:"آئیکن",loadingIcon:"لوڈنگ آئیکن",failedToLoadIcon:"آئیکن لوڈ کرنے میں ناکام",editLabel:"ترمیم",selectOne:"ایک منتخب کریں",selectNone:"کوئی نہیں",selectMany:"متعدد منتخب کریں",noResults:"کوئی نتیجہ نہیں",passwordPlaceholderText:"خفیہ پاس ورڈ",togglePasswordVisibility:"پاس ورڈ کی مرئیت تبدیل کریں",toggleMenu:"مینو ٹوگل کریں",toggleAside:"سائیڈ پینل ٹوگل کریں",mainNavigation:"بنیادی نیویگیشن",sidebar:"سائیڈ بار",closeDrawer:"دراز بند کریں",closeModal:"ماڈل بند کریں",confirm:"تصدیق",cancel:"منسوخ",addLabel:"شامل کریں",removeItem:"آئٹم ہٹائیں",currentLocale:"اردو",ar:"عربی",de:"جرمن",en:"انگریزی",es:"ہسپانوی",fr:"فرانسیسی",he:"عبرانی",hi:"ہندی",it:"اطالوی",ja:"جاپانی",ko:"کوریائی",nl:"ڈچ",pl:"پولش",pt:"پرتگالی",ru:"روسی",tr:"ترکی",vi:"ویتنامی",zh:"چینی",fa:"فارسی",ur:"اردو",emailPlaceholderText:"اپنا ای میل داخل کریں",incrementValue:"قدر اضافہ کریں",decrementValue:"قدر کم کریں",dropZoneInstructions:e=>e?"منتخب کرنے کے لیے کلک کریں یا فائلیں یہاں گھسیٹیں، یا فائل منتخب کرنے کے لیے Enter یا Space دبائیں":"فائلیں یہاں گھسیٹیں",fileSizeUnits:["بائٹس","KB","MB","GB","TB"],removeFile:"فائل حذف کریں",clearAllFiles:"تمام فائلیں صاف کریں",clearValue:"قدر صاف کریں",dateRangeStart:"Start",dateRangeEnd:"End",dateRangeNoLimit:"No limit",dateRangeSelectDate:"Select date",unknownType:"نامعلوم قسم",filesInputInstructions:(e,t,l)=>{let o=e==null||e>1?"منتخب کرنے کے لیے کلک کریں یا فائلیں یہاں گھسیٹیں":"منتخب کرنے کے لیے کلک کریں یا فائل یہاں گھسیٹیں";if(e||t){const n=[];if(e!=null&&e>1&&n.push(`زیادہ سے زیادہ ${e} فائلیں`),t&&l){const a=i.formatFileSize(t,{units:l});n.push(`ہر ایک زیادہ سے زیادہ ${a}`)}n.length>0&&(o+=` (${n.join("، ")})`)}return o},paginationLabel:"صفحہ بندی",paginationRange:(e,t,l,o)=>o>l?`قطاریں ${e} سے ${t} تک، ${l} میں سے ${o} میں سے`:`قطاریں ${e} سے ${t} تک، ${l} میں سے`,firstPage:"پہلا صفحہ",previousPage:"پچھلا صفحہ",nextPage:"اگلا صفحہ",lastPage:"آخری صفحہ",breadcrumbs:"بریڈ کرمبز",commandPalette:"کمانڈ پیلیٹ",typeACommand:"کمانڈ ٹائپ کریں...",noResultsFound:"کوئی نتیجہ نہیں ملا",noMatchingCommands:"کوئی مماثل کمانڈ نہیں ملی",appearanceSystem:"سسٹم",appearanceLight:"ہلکا",appearanceDark:"گہرا",ok:"OK",changeTypeConfirmation:"قسم تبدیل کرنے سے موجودہ قدر صاف ہو جائے گی۔ جاری رکھیں؟",notifications:"اطلاعات",markAllAsRead:"سب کو پڑھا ہوا نشان زد کریں",noNotifications:"کوئی اطلاع نہیں",schemaConflictsDetected:"اسکیما تنازعات کا پتا چلا",schemaViolationsDetected:"اسکیما خلاف ورزیوں کا پتا چلا",properties:"خصوصیات",uploading:"اپ لوڈ ہو رہا ہے...",dropFilesOrBrowse:"فائلیں یہاں چھوڑیں یا براؤز کرنے کے لیے کلک کریں",acceptedTypes:e=>`قابل قبول اقسام: ${e}`,enterUrlPrompt:"URL درج کریں:",exceeded:"(حد سے تجاوز)",pdfPreview:"PDF پیش نظارہ",lexical:{fontFamily:"فونٹ فیملی",fontSize:"فونٹ سائز",lineHeight:"لائن کی اونچائی",fontColor:"فونٹ رنگ",highlightColor:"ہائی لائٹ رنگ",backgroundColor:"پس منظر رنگ",bold:"بولڈ",italic:"ترچھا",underline:"خط کشیدہ",strikethrough:"کٹا ہوا",code:"کوڈ",clearFormatting:"فارمیٹنگ صاف کریں",normal:"عام",heading:e=>`سرخی ${e}`,bulletList:"بلٹ فہرست",orderedList:"نمبر شدہ فہرست",checkList:"چیک فہرست",indent:"اندر کریں",outdent:"باہر کریں",blockquote:"اقتباس",codeBlock:"کوڈ بلاک",horizontalRule:"افقی لکیر",insertTable:"ٹیبل داخل کریں",link:"لنک",undo:"واپس",redo:"دوبارہ",cut:"کاٹیں",copy:"نقل",paste:"چسپاں",defaultOption:"پہلے سے طے شدہ",slashCommands:"سلیش کمانڈز",noCommandsFound:"کوئی کمانڈ نہیں ملی",changeBlockType:"بلاک کی قسم تبدیل کریں",blockTypes:"بلاک کی اقسام",enterUrl:"URL درج کریں:",tableActions:"Table actions",insertRowAbove:"Insert row above",insertRowBelow:"Insert row below",insertColumnLeft:"Insert column left",insertColumnRight:"Insert column right",deleteRow:"Delete row",deleteColumn:"Delete column",deleteTable:"Delete table"},dataTable:{sortAscending:"صعودی ترتیب",sortDescending:"نزولی ترتیب",clearSort:"ترتیب صاف کریں",filterPlaceholder:"فلٹر...",clearFilter:"فلٹر صاف کریں",selectAll:"سب منتخب کریں",deselectAll:"سب غیر منتخب کریں",selectedCount:e=>`${e} منتخب`,resetAll:"سب ری سیٹ کریں",noResults:"کوئی نتائج نہیں ملے",loading:"لوڈ ہو رہا ہے...",filterPanelAddCondition:"شرط شامل کریں",filterPanelApply:"لاگو کریں",filterPanelClear:"فلٹرز صاف کریں",filterPanelAnd:"اور",filterPanelOr:"یا",filterPanelContains:"شامل ہے",filterPanelNotContains:"شامل نہیں ہے",filterPanelEquals:"برابر ہے",filterPanelNotEquals:"برابر نہیں ہے",filterPanelStartsWith:"سے شروع ہوتا ہے",filterPanelEndsWith:"پر ختم ہوتا ہے",filterPanelIsNull:"خالی ہے",filterPanelIsNotNull:"خالی نہیں ہے",filterPanelGt:"سے بڑا",filterPanelGte:"سے بڑا یا برابر",filterPanelLt:"سے چھوٹا",filterPanelLte:"سے چھوٹا یا برابر",filterPanelBetween:"کے درمیان",filterPanelValuePlaceholder:"قدر...",sortMultiHint:"متعدد کالموں کو ترتیب دینے کے لیے Shift دبائیں",columnVisibility:"کالم",showAllColumns:"سب دکھائیں",menuSortAsc:"صعودی ترتیب",menuSortDesc:"نزولی ترتیب",menuClearSort:"ترتیب ہٹائیں",menuHideColumn:"کالم چھپائیں",menuChooseColumns:"کالم منتخب کریں",menuResetColumns:"کالم ری سیٹ کریں",menuFilter:"فلٹر",rowCount:(e,t)=>`قطاریں: ${e} کل قطاریں: ${t}`,filterTagsPlaceholder:"قدریں منتخب کریں...",groupCount:e=>`${e} آئٹم`,collapseGroup:"گروپ سکیڑیں",expandGroup:"گروپ پھیلائیں",describeFilter:{textContains:(e,t)=>`${e} "${t}" پر مشتمل`,textNotContains:(e,t)=>`${e} "${t}" پر مشتمل نہیں`,textEquals:(e,t)=>`${e} "${t}" کے برابر`,textNotEquals:(e,t)=>`${e} "${t}" کے برابر نہیں`,textStartsWith:(e,t)=>`${e} "${t}" سے شروع ہوتا ہے`,textEndsWith:(e,t)=>`${e} "${t}" پر ختم ہوتا ہے`,compareEq:(e,t)=>`${e} = ${t}`,compareNeq:(e,t)=>`${e} ≠ ${t}`,compareGt:(e,t)=>`${e} > ${t}`,compareGte:(e,t)=>`${e} ≥ ${t}`,compareLt:(e,t)=>`${e} < ${t}`,compareLte:(e,t)=>`${e} ≤ ${t}`,rangeBetween:(e,t,l)=>`${e} ${t} اور ${l} کے درمیان`,rangeGte:(e,t)=>`${e} ≥ ${t}`,rangeLte:(e,t)=>`${e} ≤ ${t}`,setIn:(e,t)=>`${e} [${t}] میں`,setNotIn:(e,t)=>`${e} [${t}] میں نہیں`,booleanIs:(e,t)=>`${e} ${t} ہے`,isNull:e=>`${e} خالی ہے`,isNotNull:e=>`${e} خالی نہیں ہے`,compositeAnd:e=>e.join(" اور "),compositeOr:e=>e.join(" یا ")}},prosemirror:{bold:"Bold",italic:"Italic",code:"Code",link:"Link",removeLink:"Remove Link",heading:e=>`Heading ${e}`,bulletList:"Bullet List",orderedList:"Ordered List",blockquote:"Blockquote",codeBlock:"Code Block",horizontalRule:"Horizontal Rule",linkUrlPlaceholder:"https://example.com"},carousel:{label:"کیروسیل",previousSlide:"پچھلی سلائیڈ",nextSlide:"اگلی سلائیڈ",slideNavigation:"سلائیڈ نیویگیشن",slideOfTotal:(e,t)=>`سلائیڈ ${e} از ${t}`,goToSlide:e=>`سلائیڈ ${e} پر جائیں`},datePicker:{label:"تاریخ منتخب کریں",previousYear:"پچھلا سال",previousMonth:"پچھلا مہینہ",selectMonth:"مہینہ منتخب کریں",selectYear:"سال منتخب کریں",nextMonth:"اگلا مہینہ",nextYear:"اگلا سال",previousYears:e=>`پچھلے ${e} سال`,nextYears:e=>`اگلے ${e} سال`,dateRangePickerLabel:"تاریخ کی حد منتخب کریں",monthNames:["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],shortMonthNames:["جنو","فرو","مار","اپر","مئی","جون","جول","اگس","ستم","اکت","نوم","دسم"],dayNames:["اتو","پیر","منگ","بدھ","جمع","جمعہ","ہفت"]},timePicker:{label:"وقت منتخب کنندہ",hoursLabel:"HH",minutesLabel:"MM",secondsLabel:"SS",selectHours:"گھنٹے منتخب کریں",selectMinutes:"منٹ منتخب کریں",selectSeconds:"سیکنڈ منتخب کریں",selectPeriod:"AM/PM منتخب کریں",nowLabel:"ابھی"},timeSelectTime:"وقت منتخب کریں",dateTimeSelectDateTime:"تاریخ اور وقت منتخب کریں",colorPicker:{hue:"رنگت",saturation:"سنترپشن",lightness:"چمک",alpha:"الفا",red:"سرخ",green:"سبز",blue:"نیلا",hex:"Hex",whiteness:"سفیدی",blackness:"سیاہی",chroma:"کروما"},spotlight:{placeholder:"تلاش کریں...",noResults:"کوئی نتائج نہیں ملے",recentItems:"حالیہ",close:"بند کریں"},virtualList:{listLabel:"سکرول کے قابل فہرست"},stepper:{step:"مرحلہ",stepOfTotal:(e,t)=>`مرحلہ ${e} از ${t}`,completed:"مکمل",next:"اگلا",previous:"پچھلا",complete:"مکمل کریں"},sortableList:{dragHandle:"ترتیب بدلنے کے لیے گھسیٹیں"},transferList:{available:"دستیاب",selected:"منتخب",moveRight:"منتخب میں منتقل کریں",moveLeft:"دستیاب میں منتقل کریں",moveAllRight:"سب منتخب میں منتقل کریں",moveAllLeft:"سب دستیاب میں منتقل کریں",searchAvailable:"دستیاب آئٹمز تلاش کریں…",searchSelected:"منتخب آئٹمز تلاش کریں…"},copyButton:{copied:"کاپی ہو گیا!",copyToClipboard:"کلپ بورڈ پر کاپی کریں"},numberStepper:{increment:"بڑھائیں",decrement:"گھٹائیں",value:"قدر"},statCard:{trendUp:"بڑھتا رجحان",trendDown:"گرتا رجحان",trendFlat:"کوئی تبدیلی نہیں"},otpInputLabel:"ایک بار کا پاس ورڈ درج کریں",otpDigitLabel:(e,t)=>`ہندسہ ${e} از ${t}`,scrollableGridView:"سکرول ایبل گرڈ ویو",onboardingTour:{label:"رہنمائی ٹور",stepIndicator:(e,t)=>`مرحلہ ${e} از ${t}`,skip:"چھوڑیں",previous:"پچھلا",next:"اگلا",finish:"مکمل"},searchPlaceholder:"تلاش کریں",pdfPageViewer:{loading:"Loading PDF...",loadFailed:"Failed to load PDF",invalidPdf:"Invalid PDF file",pageOutOfRange:(e,t)=>`Page ${e} is out of range (1-${t})`,renderFailed:"Failed to render PDF page"}};exports.default=r;