torch-glare 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +8 -0
  2. package/apps/lib/components/ActionButton.tsx +7 -12
  3. package/apps/lib/components/ActionsGroup.tsx +4 -15
  4. package/apps/lib/components/AlertDialog.tsx +173 -191
  5. package/apps/lib/components/Avatar.tsx +13 -16
  6. package/apps/lib/components/Badge.tsx +1 -3
  7. package/apps/lib/components/BadgeField.tsx +76 -71
  8. package/apps/lib/components/Breadcrumb.tsx +49 -85
  9. package/apps/lib/components/Button.tsx +21 -20
  10. package/apps/lib/components/ButtonGroup.tsx +31 -41
  11. package/apps/lib/components/Calendar.tsx +51 -29
  12. package/apps/lib/components/Card.tsx +40 -24
  13. package/apps/lib/components/Checkbox.tsx +9 -16
  14. package/apps/lib/components/ColorPicker.tsx +441 -0
  15. package/apps/lib/components/ConclusionHeader.tsx +148 -0
  16. package/apps/lib/components/ContextMenu.tsx +97 -96
  17. package/apps/lib/components/CountBadge.tsx +4 -6
  18. package/apps/lib/components/DataTable.tsx +196 -216
  19. package/apps/lib/components/DataViews/DataViewRadio.tsx +1 -6
  20. package/apps/lib/components/DataViews/DataViewsConfigPanel.tsx +13 -47
  21. package/apps/lib/components/DataViews/DataViewsHeader.tsx +1 -3
  22. package/apps/lib/components/DataViews/DataViewsLayout.tsx +5 -12
  23. package/apps/lib/components/DataViews/FilterPanel.tsx +155 -149
  24. package/apps/lib/components/DataViews/HeaderSearch.tsx +1 -5
  25. package/apps/lib/components/DataViews/InboxView.tsx +22 -68
  26. package/apps/lib/components/DataViews/InboxViewCard.tsx +68 -77
  27. package/apps/lib/components/DataViews/KanbanView.tsx +8 -25
  28. package/apps/lib/components/DataViews/PanelControls.tsx +3 -13
  29. package/apps/lib/components/DataViews/SettingsPanel.tsx +83 -89
  30. package/apps/lib/components/DataViews/TableView.tsx +8 -28
  31. package/apps/lib/components/DataViews/TreeView.tsx +12 -40
  32. package/apps/lib/components/DataViews/badgeAdapter.ts +32 -28
  33. package/apps/lib/components/DataViews/fieldRenderers.tsx +106 -141
  34. package/apps/lib/components/DataViews/filters/DatePickerRangeFilter.tsx +30 -23
  35. package/apps/lib/components/DataViews/filters/DateRangePopover.tsx +39 -32
  36. package/apps/lib/components/DataViews/filters/PresetChips.tsx +15 -15
  37. package/apps/lib/components/DataViews/filters/RangeSliderWithInputs.tsx +69 -58
  38. package/apps/lib/components/DataViews/index.ts +26 -26
  39. package/apps/lib/components/DataViews/tree/TreeDrawer.tsx +12 -16
  40. package/apps/lib/components/DataViews/tree/TreeSidebar.tsx +28 -31
  41. package/apps/lib/components/DataViews/types.ts +104 -115
  42. package/apps/lib/components/DatePicker.tsx +200 -196
  43. package/apps/lib/components/Dialog.tsx +92 -105
  44. package/apps/lib/components/Divider.tsx +21 -24
  45. package/apps/lib/components/Drawer.tsx +124 -142
  46. package/apps/lib/components/DropdownMenu.tsx +131 -171
  47. package/apps/lib/components/FieldHint.tsx +4 -11
  48. package/apps/lib/components/Form.tsx +146 -155
  49. package/apps/lib/components/FormBuilder/DisplayField.tsx +40 -0
  50. package/apps/lib/components/FormBuilder/context.ts +71 -0
  51. package/apps/lib/components/FormBuilder/fields/ChoiceFields.tsx +65 -0
  52. package/apps/lib/components/FormBuilder/fields/ColorField.tsx +76 -0
  53. package/apps/lib/components/FormBuilder/fields/CustomField.tsx +16 -0
  54. package/apps/lib/components/FormBuilder/fields/DateField.tsx +34 -0
  55. package/apps/lib/components/FormBuilder/fields/FieldArray.tsx +79 -0
  56. package/apps/lib/components/FormBuilder/fields/FieldShell.tsx +174 -0
  57. package/apps/lib/components/FormBuilder/fields/FileField.tsx +40 -0
  58. package/apps/lib/components/FormBuilder/fields/OptionListFields.tsx +139 -0
  59. package/apps/lib/components/FormBuilder/fields/OtpField.tsx +32 -0
  60. package/apps/lib/components/FormBuilder/fields/PhoneField.tsx +82 -0
  61. package/apps/lib/components/FormBuilder/fields/RichTextEditorField.tsx +37 -0
  62. package/apps/lib/components/FormBuilder/fields/SelectField.tsx +101 -0
  63. package/apps/lib/components/FormBuilder/fields/SignatureField.tsx +175 -0
  64. package/apps/lib/components/FormBuilder/fields/SliderField.tsx +72 -0
  65. package/apps/lib/components/FormBuilder/fields/SwitchBoxField.tsx +42 -0
  66. package/apps/lib/components/FormBuilder/fields/TableField.tsx +312 -0
  67. package/apps/lib/components/FormBuilder/fields/TextField.tsx +222 -0
  68. package/apps/lib/components/FormBuilder/fields/TreeSelectField.tsx +49 -0
  69. package/apps/lib/components/FormBuilder/fields/countries.ts +303 -0
  70. package/apps/lib/components/FormBuilder/fields/index.ts +25 -0
  71. package/apps/lib/components/FormBuilder/form-builder.tsx +292 -0
  72. package/apps/lib/components/FormBuilder/header.tsx +105 -0
  73. package/apps/lib/components/FormBuilder/index.ts +37 -0
  74. package/apps/lib/components/FormBuilder/numberFormat.ts +16 -0
  75. package/apps/lib/components/FormBuilder/stepper.tsx +217 -0
  76. package/apps/lib/components/FormBuilder/submit.tsx +41 -0
  77. package/apps/lib/components/FormBuilder/types.ts +264 -0
  78. package/apps/lib/components/FormBuilder/viewFormat.tsx +137 -0
  79. package/apps/lib/components/FormRenderer/FormDrawer.tsx +121 -0
  80. package/apps/lib/components/FormRenderer/form-renderer.tsx +113 -0
  81. package/apps/lib/components/FormRenderer/index.ts +9 -0
  82. package/apps/lib/components/FormRenderer/types.ts +79 -0
  83. package/apps/lib/components/FormStepper.tsx +9 -39
  84. package/apps/lib/components/FormSummary.tsx +282 -0
  85. package/apps/lib/components/HeaderBar.tsx +1 -9
  86. package/apps/lib/components/ImageAttachment.tsx +106 -93
  87. package/apps/lib/components/InnerLabelField.tsx +20 -16
  88. package/apps/lib/components/Input.tsx +171 -172
  89. package/apps/lib/components/InputField.tsx +44 -45
  90. package/apps/lib/components/InputOTP.tsx +68 -69
  91. package/apps/lib/components/Label.tsx +61 -58
  92. package/apps/lib/components/LabelField.tsx +4 -5
  93. package/apps/lib/components/LabeledCheckBox.tsx +8 -12
  94. package/apps/lib/components/LabeledRadio.tsx +7 -5
  95. package/apps/lib/components/LinkButton.tsx +2 -9
  96. package/apps/lib/components/LoginButton.tsx +4 -9
  97. package/apps/lib/components/PasswordLevel.tsx +5 -5
  98. package/apps/lib/components/Popover.tsx +15 -33
  99. package/apps/lib/components/ProfileMenu.tsx +67 -72
  100. package/apps/lib/components/Radio.tsx +1 -5
  101. package/apps/lib/components/RadioCard.tsx +11 -28
  102. package/apps/lib/components/ScrollArea.tsx +45 -43
  103. package/apps/lib/components/SearchField.tsx +49 -39
  104. package/apps/lib/components/SearchableSelect.tsx +16 -16
  105. package/apps/lib/components/SearchableTable.tsx +108 -118
  106. package/apps/lib/components/SearchableTree.tsx +469 -0
  107. package/apps/lib/components/SearchableTreeDialog.tsx +493 -0
  108. package/apps/lib/components/SectionBlock.tsx +19 -23
  109. package/apps/lib/components/Select.tsx +80 -186
  110. package/apps/lib/components/SimpleSelect.tsx +196 -187
  111. package/apps/lib/components/Skeleton.tsx +9 -12
  112. package/apps/lib/components/SlideDatePicker.tsx +215 -166
  113. package/apps/lib/components/SpinLoading.tsx +33 -49
  114. package/apps/lib/components/Stepper.tsx +13 -56
  115. package/apps/lib/components/Switch.tsx +8 -10
  116. package/apps/lib/components/TabFormItem.tsx +3 -12
  117. package/apps/lib/components/TabSwitch.tsx +7 -34
  118. package/apps/lib/components/Table.tsx +60 -75
  119. package/apps/lib/components/{ChartBlockTool.ts → TextEditor/ChartBlockTool.ts} +17 -52
  120. package/apps/lib/components/TextEditor/RichTextField.tsx +46 -0
  121. package/apps/lib/components/{TableDnDWrapper.ts → TextEditor/TableDnDWrapper.ts} +15 -48
  122. package/apps/lib/components/{TextEditor.tsx → TextEditor/TextEditor.tsx} +156 -113
  123. package/apps/lib/components/TextEditor/TextEditorToolbar.tsx +429 -0
  124. package/apps/lib/components/TextEditor/editor-tools/AlignmentTune.ts +70 -0
  125. package/apps/lib/components/TextEditor/editor-tools/ColorInlineTool.ts +50 -0
  126. package/apps/lib/components/TextEditor/editor-tools/StrikethroughInlineTool.ts +48 -0
  127. package/apps/lib/components/TextEditor/editor-tools/inlineFormat.ts +98 -0
  128. package/apps/lib/{types → components/TextEditor}/editorjs.d.ts +19 -0
  129. package/apps/lib/components/TextEditor/index.ts +7 -0
  130. package/apps/lib/{utils → components/TextEditor}/markdownParser.ts +2 -7
  131. package/apps/lib/components/Textarea.tsx +9 -13
  132. package/apps/lib/components/Timeline.tsx +21 -41
  133. package/apps/lib/components/Toast.tsx +83 -83
  134. package/apps/lib/components/Toggle.tsx +112 -114
  135. package/apps/lib/components/ToggleButton.tsx +1 -1
  136. package/apps/lib/components/Tooltip.tsx +24 -19
  137. package/apps/lib/components/TransparentLabel.tsx +61 -62
  138. package/apps/lib/components/TreeDropDown.tsx +86 -52
  139. package/apps/lib/components/TreeFolder/TreeFolder.tsx +15 -48
  140. package/apps/lib/components/TreeFolder/TreeFolderBreadcrumb.tsx +16 -21
  141. package/apps/lib/components/TreeFolder/TreeFolderRow.tsx +9 -20
  142. package/apps/lib/components/TreeFolder/TreeFolderStyles.tsx +3 -3
  143. package/apps/lib/components/TreeFolder/icons.tsx +14 -17
  144. package/apps/lib/components/TreeFolder/index.ts +15 -8
  145. package/apps/lib/components/TreeFolder/treeFolderUtils.ts +47 -52
  146. package/apps/lib/components/TreeFolder/types.ts +32 -32
  147. package/apps/lib/components/TreeFolder/useTreeFolderDnD.ts +117 -123
  148. package/apps/lib/hooks/useActiveTreeItem.ts +52 -55
  149. package/apps/lib/hooks/useClickOutside.ts +21 -20
  150. package/apps/lib/hooks/useDataViewsState.ts +86 -80
  151. package/apps/lib/hooks/useIsMobile.ts +12 -12
  152. package/apps/lib/hooks/useResize.ts +54 -65
  153. package/apps/lib/hooks/useTagSelection.ts +201 -201
  154. package/apps/lib/layouts/CNLayout.tsx +181 -140
  155. package/apps/lib/layouts/DataViewCard.tsx +4 -18
  156. package/apps/lib/layouts/FieldSection.tsx +2 -6
  157. package/apps/lib/layouts/TreeSubLayout.tsx +24 -38
  158. package/apps/lib/providers/ThemeProvider.tsx +8 -23
  159. package/apps/lib/registry.json +997 -0
  160. package/apps/lib/tsconfig.json +9 -0
  161. package/apps/lib/tsconfig.tsbuildinfo +1 -0
  162. package/apps/lib/utils/cn.ts +1 -1
  163. package/apps/lib/utils/color.ts +175 -0
  164. package/apps/lib/utils/dataViews/columnUtils.ts +46 -44
  165. package/apps/lib/utils/dataViews/fieldUtils.ts +70 -71
  166. package/apps/lib/utils/dataViews/nestedDataUtils.tsx +129 -122
  167. package/apps/lib/utils/dataViews/pathUtils.ts +74 -67
  168. package/apps/lib/utils/dataViews/rangeUtils.ts +121 -112
  169. package/apps/lib/utils/dataViews/treeUtils.ts +204 -211
  170. package/apps/lib/utils/dateFormat.ts +64 -54
  171. package/apps/lib/utils/resize.ts +21 -25
  172. package/apps/lib/utils/types.ts +13 -13
  173. package/dist/bin/index.js +8 -2
  174. package/dist/bin/index.js.map +1 -1
  175. package/dist/src/shared/getAvailableFiles.d.ts.map +1 -1
  176. package/dist/src/shared/getAvailableFiles.js +6 -1
  177. package/dist/src/shared/getAvailableFiles.js.map +1 -1
  178. package/dist/src/shared/loadRegistry.d.ts +7 -0
  179. package/dist/src/shared/loadRegistry.d.ts.map +1 -0
  180. package/dist/src/shared/loadRegistry.js +31 -0
  181. package/dist/src/shared/loadRegistry.js.map +1 -0
  182. package/dist/src/shared/resolveInstallPlan.d.ts +12 -0
  183. package/dist/src/shared/resolveInstallPlan.d.ts.map +1 -0
  184. package/dist/src/shared/resolveInstallPlan.js +39 -0
  185. package/dist/src/shared/resolveInstallPlan.js.map +1 -0
  186. package/dist/src/types/main.d.ts +24 -0
  187. package/dist/src/types/main.d.ts.map +1 -1
  188. package/docs/README.md +10 -2
  189. package/docs/components/action-button.md +30 -24
  190. package/docs/components/actions-group.md +26 -20
  191. package/docs/components/alert-dialog.md +45 -45
  192. package/docs/components/avatar.md +6 -2
  193. package/docs/components/badge-field.md +6 -2
  194. package/docs/components/badge.md +7 -1
  195. package/docs/components/breadcrumb.md +15 -40
  196. package/docs/components/button-group.md +13 -10
  197. package/docs/components/button.md +58 -33
  198. package/docs/components/calendar.md +26 -19
  199. package/docs/components/card.md +23 -18
  200. package/docs/components/chart-block-tool.md +129 -0
  201. package/docs/components/checkbox.md +16 -8
  202. package/docs/components/cn-layout.md +7 -1
  203. package/docs/components/color-picker.md +101 -0
  204. package/docs/components/conclusion-header.md +80 -0
  205. package/docs/components/context-menu.md +18 -25
  206. package/docs/components/count-badge.md +7 -1
  207. package/docs/components/data-table.md +45 -33
  208. package/docs/components/data-views-config-panel.md +15 -11
  209. package/docs/components/data-views-layout.md +13 -16
  210. package/docs/components/date-picker.md +30 -23
  211. package/docs/components/dialog.md +43 -42
  212. package/docs/components/divider.md +10 -4
  213. package/docs/components/drawer.md +161 -135
  214. package/docs/components/dropdown-menu.md +25 -34
  215. package/docs/components/field-hint.md +37 -25
  216. package/docs/components/field-section.md +9 -3
  217. package/docs/components/form-builder.md +270 -0
  218. package/docs/components/form-renderer.md +228 -0
  219. package/docs/components/form-stepper.md +6 -0
  220. package/docs/components/form-summary.md +123 -0
  221. package/docs/components/form.md +17 -20
  222. package/docs/components/header-bar.md +6 -0
  223. package/docs/components/image-attachment.md +43 -45
  224. package/docs/components/inbox-view.md +16 -5
  225. package/docs/components/inner-label-field.md +34 -24
  226. package/docs/components/input-field.md +18 -10
  227. package/docs/components/input-otp.md +14 -11
  228. package/docs/components/input.md +22 -16
  229. package/docs/components/kanban-view.md +15 -5
  230. package/docs/components/label-field.md +32 -22
  231. package/docs/components/label.md +43 -32
  232. package/docs/components/labeled-check-box.md +16 -8
  233. package/docs/components/labeled-radio.md +18 -11
  234. package/docs/components/link-button.md +7 -1
  235. package/docs/components/login-button.md +8 -2
  236. package/docs/components/password-level.md +37 -24
  237. package/docs/components/popover.md +26 -23
  238. package/docs/components/profile-menu.md +38 -27
  239. package/docs/components/radio-card.md +16 -9
  240. package/docs/components/radio.md +16 -8
  241. package/docs/components/scroll-area.md +6 -2
  242. package/docs/components/search-field.md +14 -6
  243. package/docs/components/searchable-select.md +19 -14
  244. package/docs/components/searchable-table.md +18 -13
  245. package/docs/components/searchable-tree-dialog.md +190 -0
  246. package/docs/components/searchable-tree.md +200 -0
  247. package/docs/components/section-block.md +12 -4
  248. package/docs/components/select.md +23 -18
  249. package/docs/components/simple-select.md +14 -10
  250. package/docs/components/skeleton.md +43 -33
  251. package/docs/components/slide-date-picker.md +37 -29
  252. package/docs/components/spin-loading.md +32 -23
  253. package/docs/components/stepper.md +6 -0
  254. package/docs/components/switch.md +14 -6
  255. package/docs/components/tab-form-item.md +7 -1
  256. package/docs/components/tab-switch.md +13 -6
  257. package/docs/components/table-dnd-wrapper.md +107 -0
  258. package/docs/components/table-view.md +15 -5
  259. package/docs/components/table.md +28 -28
  260. package/docs/components/text-editor.md +37 -13
  261. package/docs/components/textarea.md +15 -7
  262. package/docs/components/timeline.md +6 -0
  263. package/docs/components/toast.md +35 -26
  264. package/docs/components/toggle-button.md +24 -21
  265. package/docs/components/toggle.md +23 -15
  266. package/docs/components/tooltip.md +42 -30
  267. package/docs/components/transparent-label.md +29 -20
  268. package/docs/components/tree-drop-down.md +31 -23
  269. package/docs/components/tree-sub-layout.md +6 -2
  270. package/docs/components/tree-view.md +16 -5
  271. package/docs/explanation/architecture.md +54 -0
  272. package/docs/explanation/design-system.md +52 -0
  273. package/docs/how-to/data-views-from-backend-response.md +6 -4
  274. package/docs/how-to/form-and-list-recipes.md +26 -19
  275. package/docs/how-to/forms-with-form-builder.md +408 -0
  276. package/docs/how-to/guides.md +177 -197
  277. package/docs/migration/changelog.md +38 -0
  278. package/docs/reference/cli.md +87 -0
  279. package/docs/reference/components.md +11 -12
  280. package/docs/reference/hooks.md +8 -8
  281. package/docs/reference/providers.md +22 -22
  282. package/docs/reference/tailwind-plugins.md +2 -2
  283. package/docs/reference/theme.md +85 -0
  284. package/docs/reference/types.md +4 -4
  285. package/docs/reference/utilities.md +19 -26
  286. package/docs/tutorials/building-first-form.md +170 -172
  287. package/docs/tutorials/component-composition.md +34 -50
  288. package/docs/tutorials/getting-started.md +2 -2
  289. package/docs/tutorials/theming-basics.md +13 -10
  290. package/package.json +31 -3
  291. package/dist/src/commands/block.d.ts +0 -5
  292. package/dist/src/commands/block.d.ts.map +0 -1
  293. package/dist/src/commands/block.js +0 -255
  294. package/dist/src/commands/block.js.map +0 -1
  295. package/dist/src/shared/configureFonts.d.ts +0 -6
  296. package/dist/src/shared/configureFonts.d.ts.map +0 -1
  297. package/dist/src/shared/configureFonts.js +0 -106
  298. package/dist/src/shared/configureFonts.js.map +0 -1
  299. package/dist/src/shared/configureGlobalCss.d.ts +0 -6
  300. package/dist/src/shared/configureGlobalCss.d.ts.map +0 -1
  301. package/dist/src/shared/configureGlobalCss.js +0 -154
  302. package/dist/src/shared/configureGlobalCss.js.map +0 -1
  303. package/dist/src/shared/configureTailwind.d.ts +0 -7
  304. package/dist/src/shared/configureTailwind.d.ts.map +0 -1
  305. package/dist/src/shared/configureTailwind.js +0 -163
  306. package/dist/src/shared/configureTailwind.js.map +0 -1
  307. package/dist/src/shared/detectFramework.d.ts +0 -23
  308. package/dist/src/shared/detectFramework.d.ts.map +0 -1
  309. package/dist/src/shared/detectFramework.js +0 -119
  310. package/dist/src/shared/detectFramework.js.map +0 -1
  311. package/dist/src/shared/installBaseUtils.d.ts +0 -5
  312. package/dist/src/shared/installBaseUtils.d.ts.map +0 -1
  313. package/dist/src/shared/installBaseUtils.js +0 -79
  314. package/dist/src/shared/installBaseUtils.js.map +0 -1
  315. package/dist/src/shared/resolveAliases.d.ts +0 -24
  316. package/dist/src/shared/resolveAliases.d.ts.map +0 -1
  317. package/dist/src/shared/resolveAliases.js +0 -98
  318. package/dist/src/shared/resolveAliases.js.map +0 -1
@@ -1,33 +1,40 @@
1
- import { forwardRef, HTMLAttributes, InputHTMLAttributes, ReactNode, useEffect, useState } from "react";
1
+ import { forwardRef, HTMLAttributes, InputHTMLAttributes, ReactNode } from "react";
2
2
  import { Button } from "./Button";
3
3
  import { cva } from "class-variance-authority";
4
4
  import { cn } from "../utils/cn";
5
5
  import { Themes } from "../utils/types";
6
- import { AlertDialog, AlertDialogTrigger, AlertDialogContent, AlertDialogCancel } from "./AlertDialog";
6
+ import {
7
+ AlertDialog,
8
+ AlertDialogTrigger,
9
+ AlertDialogContent,
10
+ AlertDialogCancel,
11
+ } from "./AlertDialog";
7
12
 
8
13
  const dropZoneStyles = cva(
9
14
  [
10
- "w-full min-w-[200px] h-[65px] flex flex-col rounded-lg border-dashed !border-2 transition-all duration-300 ease-in-out ",
11
- "!border-border-presentation-action-borderstyle bg-background-presentation-badge-gray",
12
- "hover:border-border-presentation-action-borderstyle hover:bg-background-presentation-badge-gray",
15
+ // Dashed drop zone that fills the field box (design: Attachment-Field-1.0 "Upload-Button").
16
+ // Transparent fill so the surrounding #f9f9f9 box shows through the dashed border.
17
+ "flex-1 h-[65px] flex flex-col rounded-[8px] border-dashed !border-2 transition-all duration-300 ease-in-out",
18
+ "!border-border-presentation-action-borderstyle bg-transparent",
19
+ "hover:bg-background-presentation-badge-gray-subtle",
13
20
  ],
14
21
  {
15
22
  variants: {
16
23
  active: {
17
- true: "bg-background-presentation-action-hovercontstyle border-border-presentation-badge-gray",
24
+ true: "!bg-background-presentation-badge-gray-subtle !border-border-presentation-badge-gray",
18
25
  },
19
26
  },
20
- }
27
+ },
21
28
  );
22
29
 
23
30
  interface Props extends InputHTMLAttributes<HTMLInputElement | HTMLDivElement> {
24
31
  isDropAreaActive?: boolean;
25
32
  mainLabel: string;
26
33
  secondaryLabel: string;
27
- theme?: Themes
28
- expandLabel: ReactNode
29
- children?: ReactNode
30
- getRootProps?: () => any
34
+ theme?: Themes;
35
+ expandLabel?: ReactNode;
36
+ children?: ReactNode;
37
+ getRootProps?: () => Record<string, unknown>;
31
38
  }
32
39
 
33
40
  const ImageAttachment = forwardRef<HTMLInputElement, Props>(
@@ -40,13 +47,21 @@ const ImageAttachment = forwardRef<HTMLInputElement, Props>(
40
47
  className,
41
48
  getRootProps,
42
49
  children,
50
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- excluded from {...props} so it isn't leaked onto the <input>
51
+ expandLabel,
43
52
  ...props
44
53
  }: Props,
45
- ref
54
+ ref,
46
55
  ) => {
47
56
  return (
57
+ // The #f9f9f9 field box (design: Attachment-Field-1.0). Holds an optional preview
58
+ // (children) on the leading side and the dashed drop zone filling the rest.
48
59
  <section
49
- className={cn("flex items-center justify-center gap-1 w-full", className)}>
60
+ className={cn(
61
+ "flex w-full items-center gap-[10px] rounded-[8px] bg-background-presentation-form-field-primary",
62
+ className,
63
+ )}
64
+ >
50
65
  {children}
51
66
  <Button
52
67
  {...getRootProps?.()}
@@ -66,113 +81,110 @@ const ImageAttachment = forwardRef<HTMLInputElement, Props>(
66
81
  <input ref={ref} {...props} type="file" hidden />
67
82
  </Button>
68
83
  </section>
69
-
70
84
  );
71
- }
85
+ },
72
86
  );
73
87
 
74
- ImageAttachment.displayName = "ImageAttachment"
75
-
76
- export {
77
- ImageAttachment,
78
- ExpandableImage,
79
- AttachmentImagePreview
80
- }
88
+ ImageAttachment.displayName = "ImageAttachment";
81
89
 
90
+ export { ImageAttachment, ExpandableImage, AttachmentImagePreview };
82
91
 
83
92
  interface ExpandableImageProps extends HTMLAttributes<HTMLDivElement> {
84
- previewSrc: any
85
- expandLabel: ReactNode
86
- placeholderLabel?: string
87
- theme?: Themes
93
+ previewSrc: string;
94
+ expandLabel: ReactNode;
95
+ placeholderLabel?: string;
96
+ theme?: Themes;
88
97
  }
89
98
 
90
- const ExpandableImage = ({ theme, previewSrc, expandLabel, placeholderLabel = "Upload Image", className, ...props }: ExpandableImageProps) => {
91
- // Calculate the aspect ratio of the image
92
- const [aspectRatio, setAspectRatio] = useState<number | null>(null);
93
- useEffect(() => {
94
- if (!previewSrc) return;
95
- const img = new Image();
96
- img.onload = () => {
97
- const width = img.naturalWidth;
98
- const height = img.naturalHeight;
99
- const ratio = width / height;
100
- setAspectRatio(ratio);
101
- };
102
- img.src = previewSrc;
103
- }, [previewSrc]);
104
-
99
+ const ExpandableImage = ({
100
+ theme,
101
+ previewSrc,
102
+ expandLabel,
103
+ placeholderLabel = "Upload Image",
104
+ className,
105
+ ...props
106
+ }: ExpandableImageProps) => {
105
107
  return (
106
- <section style={props.style} data-theme={theme} className={cn("flex items-center justify-center rounded-md relative overflow-hidden border-none group h-[65px] max-w-[180px]", className)}>
107
- {previewSrc ? <SelectedImg aspectRatio={aspectRatio} src={previewSrc} /> : <PlaceHolder label={placeholderLabel} />}
108
-
109
- {
110
- previewSrc && (
111
- <AlertDialog>
112
- <AlertDialogTrigger asChild>
113
- <button
114
- className='flex w-full h-full justify-center items-center flex-col absolute z-10 opacity-0 bg-black/50 transition-all duration-250 ease-in-out hover:opacity-100'
115
- >
116
- <svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
117
- <path d="M15.5 3.5L17.8 5.8L14.91 8.67L16.33 10.09L19.2 7.2L21.5 9.5V3.5H15.5ZM3.5 9.5L5.8 7.2L8.67 10.09L10.09 8.67L7.2 5.8L9.5 3.5H3.5V9.5ZM9.5 21.5L7.2 19.2L10.09 16.33L8.67 14.91L5.8 17.8L3.5 15.5V21.5H9.5ZM21.5 15.5L19.2 17.8L16.33 14.91L14.91 16.33L17.8 19.2L15.5 21.5H21.5V15.5Z" fill="#F9F9F9" />
118
- </svg>
119
- <p className='text-content-presentation-global-primary-inverse typography-labels-small-regular max-w-[50px] break-words m-0'>
120
- {expandLabel}
121
- </p>
122
- </button>
123
- </AlertDialogTrigger>
124
- <AlertDialogContent className="w-fit bg-transparent border-none">
125
- {props.children}
126
- </AlertDialogContent>
127
- </AlertDialog>
128
- )
129
- }
108
+ // Pic-Container-1.0: a 65×65 square thumbnail (or the placeholder), with an Expand
109
+ // overlay revealed on hover.
110
+ <section
111
+ style={props.style}
112
+ data-theme={theme}
113
+ className={cn(
114
+ "group relative flex size-[65px] shrink-0 items-center justify-center overflow-hidden rounded-[8px] border-none",
115
+ className,
116
+ )}
117
+ >
118
+ {previewSrc ? <SelectedImg src={previewSrc} /> : <PlaceHolder label={placeholderLabel} />}
119
+
120
+ {previewSrc && (
121
+ <AlertDialog>
122
+ <AlertDialogTrigger asChild>
123
+ <button className="absolute z-10 flex h-full w-full flex-col items-center justify-center gap-[2px] bg-black/50 opacity-0 transition-all duration-200 ease-in-out hover:opacity-100">
124
+ <i className="ri-fullscreen-line text-content-presentation-global-hover text-[24px] leading-none" />
125
+ <p className="text-content-presentation-global-hover typography-labels-small-regular m-0 max-w-[50px] break-words text-center">
126
+ {expandLabel}
127
+ </p>
128
+ </button>
129
+ </AlertDialogTrigger>
130
+ <AlertDialogContent className="w-fit bg-transparent border-none">
131
+ {props.children}
132
+ </AlertDialogContent>
133
+ </AlertDialog>
134
+ )}
130
135
  </section>
131
136
  );
132
- }
133
-
137
+ };
134
138
 
135
- function PlaceHolder({ label }: any) {
139
+ function PlaceHolder({ label }: { label: string }) {
136
140
  return (
137
- <section className={cn([
138
- 'w-[65px] h-full gap-[2px] flex flex-col justify-center items-center px-1 ',
139
- ' rounded-lg border-2 border-dashed',
140
- ' border-border-presentation-badge-blue-purple',
141
- ' bg-background-presentation-badge-blue-purple',
142
- ' transition-all duration-300 ease-in-out',
143
- ' hover:bg-background-presentation-badge-gray hover:border-border-presentation-badge-gray']
144
- )}>
145
- <i className="ri-attachment-line text-content-presentation-badge-blue-purple group-hover:text-[#797C7F] text-[24px] h-[24px]"></i>
146
- <p className='text-content-presentation-badge-blue-purple typography-labels-small-regular group-hover:text-[#797C7F] px-1 py-[2px] text-center'>{label}</p>
141
+ // Pic-Container-1.0 default: ocean fill + dashed blue-purple border; on hover it goes gray.
142
+ // (Was styled with a `badge-blue-purple` token that does not exist — a no-op until now.)
143
+ <section
144
+ className={cn([
145
+ "size-[65px] gap-[2px] flex flex-col justify-center items-center px-1",
146
+ " rounded-[8px] border-2 border-dashed",
147
+ " border-blue-purple-300 bg-background-presentation-badge-ocean-subtle",
148
+ " transition-all duration-300 ease-in-out",
149
+ " group-hover:bg-background-presentation-badge-gray-subtle group-hover:border-border-presentation-badge-gray",
150
+ ])}
151
+ >
152
+ <i className="ri-attachment-line text-blue-purple-800 group-hover:text-content-presentation-badge-gray text-[24px] h-[24px]"></i>
153
+ <p className="text-blue-purple-800 typography-labels-small-regular group-hover:text-content-presentation-badge-gray px-1 py-[2px] text-center">
154
+ {label}
155
+ </p>
147
156
  </section>
148
- )
157
+ );
149
158
  }
150
159
 
151
-
152
-
153
- function SelectedImg({ src, aspectRatio }: any) {
160
+ function SelectedImg({ src }: { src: string }) {
154
161
  return (
155
- <section style={{ aspectRatio: aspectRatio }} className='bg-white w-full h-full rounded-md border border-border-presentation-global-primary shrink-0'>
156
- <img src={src} className='object-center object-cover h-full w-full' />
162
+ <section className="size-full shrink-0 overflow-hidden rounded-[8px] border border-border-presentation-global-primary bg-white">
163
+ <img alt="" src={src} className="h-full w-full object-cover object-center" />
157
164
  </section>
158
165
  );
159
166
  }
160
167
 
161
-
162
168
  interface AttachmentImagePreviewProps extends HTMLAttributes<HTMLDivElement> {
163
- src: any;
169
+ src: string;
164
170
  header?: ReactNode;
165
- theme?: Themes
171
+ theme?: Themes;
166
172
  }
167
173
 
168
- function AttachmentImagePreview({ theme, src, header, className, ...props }: AttachmentImagePreviewProps) {
174
+ function AttachmentImagePreview({
175
+ theme,
176
+ src,
177
+ header,
178
+ className,
179
+ ...props
180
+ }: AttachmentImagePreviewProps) {
169
181
  return (
170
182
  <section
171
183
  {...props}
172
184
  data-theme={theme}
173
185
  className={cn(
174
186
  " overflow-hidden flex flex-col items-center justify-center w-80 p-2 gap-2 rounded-md border shadow-md border-border-presentation-global-primary bg-background-presentation-form-base",
175
- className
187
+ className,
176
188
  )}
177
189
  >
178
190
  <section className="flex items-center justify-between w-full m-0">
@@ -186,11 +198,12 @@ function AttachmentImagePreview({ theme, src, header, className, ...props }: Att
186
198
  </AlertDialogCancel>
187
199
  </section>
188
200
 
189
- <img className="w-full object-cover object-center rounded-md border shadow-md border-border-presentation-global-primary" src={src} />
201
+ <img
202
+ className="w-full object-cover object-center rounded-md border shadow-md border-border-presentation-global-primary"
203
+ src={src}
204
+ />
190
205
 
191
- <section className="flex items-center justify-end w-full gap-2">
192
- {props.children}
193
- </section>
206
+ <section className="flex items-center justify-end w-full gap-2">{props.children}</section>
194
207
  </section>
195
208
  );
196
209
  }
@@ -6,8 +6,7 @@ import { ToolTipSide } from "./Tooltip";
6
6
  import { cn } from "../utils/cn";
7
7
  import { Themes } from "../utils/types";
8
8
 
9
- interface Props
10
- extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "variant"> {
9
+ interface Props extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "variant"> {
11
10
  size?: "S" | "M"; // this is used to change the size style of the component
12
11
  variant?: "SystemStyle" | "PresentationStyle";
13
12
  icon?: ReactNode; // to add left side icon if you pass it
@@ -18,14 +17,15 @@ interface Props
18
17
  label?: string; // to show label
19
18
  required?: boolean; // to show required icon
20
19
  toolTipSide?: ToolTipSide;
21
- theme?: Themes
20
+ theme?: Themes;
22
21
  }
23
22
 
24
23
  export const InnerLabelField = forwardRef<HTMLInputElement, Props>(
25
24
  (
26
25
  {
27
26
  size = "M",
28
- icon,
27
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
28
+ icon, // excluded from ...props spread (icon is overridden below)
29
29
  childrenSide,
30
30
  popoverChildren,
31
31
  errorMessage,
@@ -38,7 +38,7 @@ export const InnerLabelField = forwardRef<HTMLInputElement, Props>(
38
38
  toolTipSide,
39
39
  ...props
40
40
  },
41
- ref
41
+ ref,
42
42
  ) => {
43
43
  const [focus, setFocus] = useState(false);
44
44
  const [isEmpty, setIsEmpty] = useState(!props.value);
@@ -80,15 +80,12 @@ export const InnerLabelField = forwardRef<HTMLInputElement, Props>(
80
80
  }
81
81
  />
82
82
  );
83
- }
83
+ },
84
84
  );
85
85
 
86
- InnerLabelField.displayName = "InnerLabelField"
87
-
88
-
86
+ InnerLabelField.displayName = "InnerLabelField";
89
87
 
90
88
  const Label = ({
91
-
92
89
  focus,
93
90
  isEmpty,
94
91
  label,
@@ -121,16 +118,23 @@ const Label = ({
121
118
  "ease-in-out",
122
119
  "group-hover:text-content-presentation-global-primary group-hover:typography-body-small-regular",
123
120
  { "text-content-presentation-global-primary typography-body-small-regular": isEmpty },
124
- { "text-content-presentation-global-primary typography-body-small-regular": focus && isEmpty },
125
- { "text-content-presentation-global-primary typography-body-small-regular": error && isEmpty },
126
- { "text-content-presentation-global-primary typography-body-small-regular": disabled && isEmpty },
121
+ {
122
+ "text-content-presentation-global-primary typography-body-small-regular":
123
+ focus && isEmpty,
124
+ },
125
+ {
126
+ "text-content-presentation-global-primary typography-body-small-regular":
127
+ error && isEmpty,
128
+ },
129
+ {
130
+ "text-content-presentation-global-primary typography-body-small-regular":
131
+ disabled && isEmpty,
132
+ },
127
133
  )}
128
134
  >
129
135
  {label}
130
136
  </p>
131
- {required && (
132
- <p className="text-content-presentation-state-negative">*</p>
133
- )}
137
+ {required && <p className="text-content-presentation-state-negative">*</p>}
134
138
  </section>
135
139
  <span
136
140
  className={cn(