@flamingo-stack/openframe-frontend-core 0.0.578 → 0.0.579-1956.5350.1

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 (165) hide show
  1. package/dist/{chunk-NPNYQSCG.cjs → chunk-36TJYCF3.cjs} +27 -27
  2. package/dist/{chunk-NPNYQSCG.cjs.map → chunk-36TJYCF3.cjs.map} +1 -1
  3. package/dist/{chunk-NJDL7F7K.cjs → chunk-37XJYOAY.cjs} +17 -17
  4. package/dist/{chunk-NJDL7F7K.cjs.map → chunk-37XJYOAY.cjs.map} +1 -1
  5. package/dist/{chunk-LPFA56WY.js → chunk-3AX3ZEY3.js} +2 -2
  6. package/dist/{chunk-KQBYQBQN.cjs → chunk-4FJSN2XW.cjs} +10 -10
  7. package/dist/{chunk-KQBYQBQN.cjs.map → chunk-4FJSN2XW.cjs.map} +1 -1
  8. package/dist/{chunk-WUZQYZXI.cjs → chunk-4HGRXFQP.cjs} +3 -3
  9. package/dist/{chunk-WUZQYZXI.cjs.map → chunk-4HGRXFQP.cjs.map} +1 -1
  10. package/dist/{chunk-OIJWSYKP.cjs → chunk-4LZ7B5H5.cjs} +5 -5
  11. package/dist/{chunk-OIJWSYKP.cjs.map → chunk-4LZ7B5H5.cjs.map} +1 -1
  12. package/dist/{chunk-LEUJNBWU.js → chunk-4WSKSNXL.js} +9 -9
  13. package/dist/{chunk-QHGARH6P.js → chunk-5Y6TPFW7.js} +5 -5
  14. package/dist/{chunk-GOEBT72V.cjs → chunk-A6C5HOD7.cjs} +23 -23
  15. package/dist/{chunk-GOEBT72V.cjs.map → chunk-A6C5HOD7.cjs.map} +1 -1
  16. package/dist/{chunk-IWK2NFVR.js → chunk-AKPLEWMH.js} +2 -2
  17. package/dist/{chunk-E5QAU63Y.cjs → chunk-BCJQ7CJE.cjs} +11 -11
  18. package/dist/{chunk-E5QAU63Y.cjs.map → chunk-BCJQ7CJE.cjs.map} +1 -1
  19. package/dist/{chunk-5IAGT5LB.js → chunk-BW4WDUSI.js} +3 -3
  20. package/dist/{chunk-SNZZ6Q6G.js → chunk-CP5EYMNL.js} +276 -160
  21. package/dist/chunk-CP5EYMNL.js.map +1 -0
  22. package/dist/{chunk-ZBVMPVJF.js → chunk-D44S2QLI.js} +3 -3
  23. package/dist/{chunk-AJ67T7LI.js → chunk-DB3TV4CW.js} +6 -6
  24. package/dist/{chunk-BLPGMX2L.cjs → chunk-FEVLXRTC.cjs} +506 -390
  25. package/dist/chunk-FEVLXRTC.cjs.map +1 -0
  26. package/dist/{chunk-ESXUEMPA.js → chunk-H4BPHGU5.js} +3 -3
  27. package/dist/{chunk-SETRICAM.cjs → chunk-H54EPP3P.cjs} +7 -7
  28. package/dist/{chunk-SETRICAM.cjs.map → chunk-H54EPP3P.cjs.map} +1 -1
  29. package/dist/{chunk-SHJXC7A4.js → chunk-HGA74X35.js} +4 -4
  30. package/dist/{chunk-R7OJZCE6.cjs → chunk-HHJVIHVR.cjs} +81 -81
  31. package/dist/{chunk-R7OJZCE6.cjs.map → chunk-HHJVIHVR.cjs.map} +1 -1
  32. package/dist/{chunk-POB6GNIR.cjs → chunk-IFYQ7DHV.cjs} +48 -48
  33. package/dist/{chunk-POB6GNIR.cjs.map → chunk-IFYQ7DHV.cjs.map} +1 -1
  34. package/dist/{chunk-QYQXAXVR.cjs → chunk-IKDC3R7V.cjs} +4 -3
  35. package/dist/chunk-IKDC3R7V.cjs.map +1 -0
  36. package/dist/{chunk-W6JA6SFD.js → chunk-JRYS4VMV.js} +45 -45
  37. package/dist/chunk-JRYS4VMV.js.map +1 -0
  38. package/dist/{chunk-JJH4H4CJ.js → chunk-L2CF2QZW.js} +7 -7
  39. package/dist/{chunk-2BFZHTSD.cjs → chunk-LEISUAHF.cjs} +18 -8
  40. package/dist/chunk-LEISUAHF.cjs.map +1 -0
  41. package/dist/{chunk-ABWA3W3M.cjs → chunk-M5GWCMYE.cjs} +42 -42
  42. package/dist/{chunk-ABWA3W3M.cjs.map → chunk-M5GWCMYE.cjs.map} +1 -1
  43. package/dist/{chunk-PQETCTJ4.js → chunk-MXOSTJAG.js} +4 -3
  44. package/dist/chunk-MXOSTJAG.js.map +1 -0
  45. package/dist/{chunk-G3AJXLKH.cjs → chunk-NPVDKOGD.cjs} +22 -22
  46. package/dist/{chunk-G3AJXLKH.cjs.map → chunk-NPVDKOGD.cjs.map} +1 -1
  47. package/dist/{chunk-IBSOYTGZ.js → chunk-O2FTVZOD.js} +5 -5
  48. package/dist/{chunk-YOYHJQX3.cjs → chunk-OGZAFM6M.cjs} +5 -5
  49. package/dist/{chunk-YOYHJQX3.cjs.map → chunk-OGZAFM6M.cjs.map} +1 -1
  50. package/dist/{chunk-BFJBE4PQ.js → chunk-PMENIZXI.js} +6 -6
  51. package/dist/{chunk-5NG2P2KI.js → chunk-PWOYEUIQ.js} +7 -7
  52. package/dist/{chunk-KLG3MGRP.js → chunk-QCP2KV7P.js} +5 -5
  53. package/dist/{chunk-KPE277X2.js → chunk-QGJYWLF4.js} +2 -2
  54. package/dist/{chunk-M7FNT5AC.cjs → chunk-RKGOVTXZ.cjs} +48 -48
  55. package/dist/{chunk-M7FNT5AC.cjs.map → chunk-RKGOVTXZ.cjs.map} +1 -1
  56. package/dist/{chunk-HM2R5MDR.js → chunk-T5HDPHN6.js} +13 -3
  57. package/dist/chunk-T5HDPHN6.js.map +1 -0
  58. package/dist/{chunk-UQPA2XT7.cjs → chunk-YW4WBNYV.cjs} +37 -37
  59. package/dist/{chunk-UQPA2XT7.cjs.map → chunk-YW4WBNYV.cjs.map} +1 -1
  60. package/dist/{chunk-36NFJULV.cjs → chunk-ZI27ALYX.cjs} +41 -41
  61. package/dist/chunk-ZI27ALYX.cjs.map +1 -0
  62. package/dist/components/case-studies/index.cjs +12 -12
  63. package/dist/components/case-studies/index.js +6 -6
  64. package/dist/components/chat/index.cjs +3 -3
  65. package/dist/components/chat/index.js +2 -2
  66. package/dist/components/contact/index.cjs +7 -7
  67. package/dist/components/contact/index.js +6 -6
  68. package/dist/components/docs/index.cjs +10 -10
  69. package/dist/components/docs/index.js +9 -9
  70. package/dist/components/embeds/index.cjs +7 -7
  71. package/dist/components/embeds/index.js +6 -6
  72. package/dist/components/faq/index.cjs +7 -7
  73. package/dist/components/faq/index.js +6 -6
  74. package/dist/components/features/board/board.d.ts.map +1 -1
  75. package/dist/components/features/index.cjs +8 -6
  76. package/dist/components/features/index.cjs.map +1 -1
  77. package/dist/components/features/index.js +7 -5
  78. package/dist/components/features/sortable-list/index.d.ts +2 -1
  79. package/dist/components/features/sortable-list/index.d.ts.map +1 -1
  80. package/dist/components/features/sortable-list/sortable-list.d.ts +8 -1
  81. package/dist/components/features/sortable-list/sortable-list.d.ts.map +1 -1
  82. package/dist/components/features/sortable-list/sortable-move-buttons.d.ts +24 -0
  83. package/dist/components/features/sortable-list/sortable-move-buttons.d.ts.map +1 -0
  84. package/dist/components/features/sortable-list/use-sortable-item.d.ts +12 -4
  85. package/dist/components/features/sortable-list/use-sortable-item.d.ts.map +1 -1
  86. package/dist/components/features/ticket-status-config-list/ticket-status-config-list.d.ts +21 -5
  87. package/dist/components/features/ticket-status-config-list/ticket-status-config-list.d.ts.map +1 -1
  88. package/dist/components/help-center-pages/index.cjs +26 -26
  89. package/dist/components/help-center-pages/index.js +17 -17
  90. package/dist/components/index.cjs +131 -129
  91. package/dist/components/index.cjs.map +1 -1
  92. package/dist/components/index.js +18 -16
  93. package/dist/components/index.js.map +1 -1
  94. package/dist/components/meeting-scheduler/index.cjs +37 -37
  95. package/dist/components/meeting-scheduler/index.js +5 -5
  96. package/dist/components/navigation/index.cjs +9 -9
  97. package/dist/components/navigation/index.js +8 -8
  98. package/dist/components/onboarding-guides/index.cjs +9 -9
  99. package/dist/components/onboarding-guides/index.js +8 -8
  100. package/dist/components/tickets/index.cjs +10 -10
  101. package/dist/components/tickets/index.js +9 -9
  102. package/dist/components/ui/file-manager/index.cjs +4 -4
  103. package/dist/components/ui/file-manager/index.js +1 -1
  104. package/dist/components/ui/index.cjs +6 -6
  105. package/dist/components/ui/index.js +5 -5
  106. package/dist/components/ui/input.d.ts +2 -0
  107. package/dist/components/ui/input.d.ts.map +1 -1
  108. package/dist/components/ui/textarea.d.ts +2 -0
  109. package/dist/components/ui/textarea.d.ts.map +1 -1
  110. package/dist/components/ui/ticket-status-config-row.d.ts +10 -4
  111. package/dist/components/ui/ticket-status-config-row.d.ts.map +1 -1
  112. package/dist/hooks/index.cjs +7 -3
  113. package/dist/hooks/index.cjs.map +1 -1
  114. package/dist/hooks/index.js +6 -2
  115. package/dist/hooks/ui/index.d.ts +1 -0
  116. package/dist/hooks/ui/index.d.ts.map +1 -1
  117. package/dist/hooks/ui/use-drag-and-drop-enabled.d.ts +31 -0
  118. package/dist/hooks/ui/use-drag-and-drop-enabled.d.ts.map +1 -0
  119. package/dist/hooks/ui/use-media-query.d.ts.map +1 -1
  120. package/dist/index.cjs +17 -11
  121. package/dist/index.cjs.map +1 -1
  122. package/dist/index.js +15 -9
  123. package/dist/index.js.map +1 -1
  124. package/dist/schemas/meeting-booking-schema.d.ts +2 -2
  125. package/package.json +1 -4
  126. package/src/components/features/board/.board.md +1 -0
  127. package/src/components/features/board/board.tsx +11 -1
  128. package/src/components/features/sortable-list/.sortable-list.md +23 -12
  129. package/src/components/features/sortable-list/index.ts +2 -1
  130. package/src/components/features/sortable-list/sortable-list.tsx +16 -5
  131. package/src/components/features/sortable-list/sortable-move-buttons.tsx +81 -0
  132. package/src/components/features/sortable-list/use-sortable-item.ts +25 -13
  133. package/src/components/features/ticket-status-config-list/ticket-status-config-list.tsx +55 -62
  134. package/src/components/ui/.ticket-status-config-row.md +11 -9
  135. package/src/components/ui/input.tsx +5 -2
  136. package/src/components/ui/textarea.tsx +5 -2
  137. package/src/components/ui/ticket-status-config-row.tsx +162 -70
  138. package/src/hooks/ui/.index.md +1 -0
  139. package/src/hooks/ui/.use-drag-and-drop-enabled.md +32 -0
  140. package/src/hooks/ui/index.ts +1 -0
  141. package/src/hooks/ui/use-drag-and-drop-enabled.ts +37 -0
  142. package/src/hooks/ui/use-media-query.ts +3 -2
  143. package/dist/chunk-2BFZHTSD.cjs.map +0 -1
  144. package/dist/chunk-36NFJULV.cjs.map +0 -1
  145. package/dist/chunk-BLPGMX2L.cjs.map +0 -1
  146. package/dist/chunk-HM2R5MDR.js.map +0 -1
  147. package/dist/chunk-PQETCTJ4.js.map +0 -1
  148. package/dist/chunk-QYQXAXVR.cjs.map +0 -1
  149. package/dist/chunk-SNZZ6Q6G.js.map +0 -1
  150. package/dist/chunk-W6JA6SFD.js.map +0 -1
  151. /package/dist/{chunk-LPFA56WY.js.map → chunk-3AX3ZEY3.js.map} +0 -0
  152. /package/dist/{chunk-LEUJNBWU.js.map → chunk-4WSKSNXL.js.map} +0 -0
  153. /package/dist/{chunk-QHGARH6P.js.map → chunk-5Y6TPFW7.js.map} +0 -0
  154. /package/dist/{chunk-IWK2NFVR.js.map → chunk-AKPLEWMH.js.map} +0 -0
  155. /package/dist/{chunk-5IAGT5LB.js.map → chunk-BW4WDUSI.js.map} +0 -0
  156. /package/dist/{chunk-ZBVMPVJF.js.map → chunk-D44S2QLI.js.map} +0 -0
  157. /package/dist/{chunk-AJ67T7LI.js.map → chunk-DB3TV4CW.js.map} +0 -0
  158. /package/dist/{chunk-ESXUEMPA.js.map → chunk-H4BPHGU5.js.map} +0 -0
  159. /package/dist/{chunk-SHJXC7A4.js.map → chunk-HGA74X35.js.map} +0 -0
  160. /package/dist/{chunk-JJH4H4CJ.js.map → chunk-L2CF2QZW.js.map} +0 -0
  161. /package/dist/{chunk-IBSOYTGZ.js.map → chunk-O2FTVZOD.js.map} +0 -0
  162. /package/dist/{chunk-BFJBE4PQ.js.map → chunk-PMENIZXI.js.map} +0 -0
  163. /package/dist/{chunk-5NG2P2KI.js.map → chunk-PWOYEUIQ.js.map} +0 -0
  164. /package/dist/{chunk-KLG3MGRP.js.map → chunk-QCP2KV7P.js.map} +0 -0
  165. /package/dist/{chunk-KPE277X2.js.map → chunk-QGJYWLF4.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/field-wrapper.tsx","../src/components/ui/input.tsx","../src/components/ui/checkbox.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Label } from './label';\n\nexport interface FieldWrapperProps {\n /** Label text displayed above the field */\n label?: string;\n /**\n * `id` of the control the label names. Without it the label is decoration:\n * clicking it focuses nothing and assistive tech reads the field unnamed,\n * which is why every caller that cared was rendering its own <Label> instead\n * of using `label` here.\n */\n htmlFor?: string;\n /**\n * Status message displayed below the field, on ONE line, ellipsized on\n * overflow (full text via the native `title`).\n *\n * It is positioned OUT OF FLOW (absolute, hanging below the wrapper), so it\n * never changes the field's height when it appears — the same treatment\n * `CheckboxBlock` uses. The trade is that it overlaps whatever sits directly\n * below: a form stacking fields needs at least ~20px of vertical gap (e.g.\n * `gap-[var(--spacing-system-lf)]`) for the message to land in clear space.\n */\n error?: string;\n /** Color variant for the message: \"error\" (red), \"warning\" (yellow), \"success\" (green) or \"muted\" (grey) */\n errorVariant?: 'error' | 'warning' | 'success' | 'muted';\n /**\n * Label scale. Default is the standard form-label scale (text-h6).\n * 'large' (text-h4) is for screens whose design specifies body-scale field\n * titles (e.g. the devices New Device page) — opt in per call site, the\n * default stays the converged small scale.\n */\n labelVariant?: 'default' | 'large';\n /** Additional className for the outer wrapper */\n className?: string;\n children: ReactNode;\n}\n\nconst errorVariantClasses = {\n error: 'text-ods-error',\n warning: 'text-ods-warning',\n success: 'text-ods-success',\n muted: 'text-ods-text-secondary',\n} as const;\n\nconst FieldWrapper = forwardRef<HTMLDivElement, FieldWrapperProps>(\n ({ label, htmlFor, error, errorVariant = 'error', labelVariant = 'default', className, children }, ref) => {\n const hasChrome = label != null || error != null;\n\n return (\n <div ref={ref} className={cn(hasChrome ? 'relative flex w-full flex-col' : 'contents', className)}>\n {label && (\n // Default is text-h6, NOT text-h4: `Field` (ui/field.tsx) renders its label via\n // `Label variant=\"small\"` = text-h6, and every form that mixes\n // Field-wrapped controls with `label=`-prop controls showed two label\n // sizes side by side — the exact inconsistency the admin editors kept\n // reporting. One label scale, owned here and in Field together.\n <Label className=\"mb-1\" htmlFor={htmlFor} variant={labelVariant}>\n {label}\n </Label>\n )}\n {children}\n {error && (\n <p\n className={cn(\n 'absolute bottom-0 left-0 right-0 translate-y-full truncate text-h6',\n errorVariantClasses[errorVariant],\n )}\n title={error}\n >\n {error}\n </p>\n )}\n </div>\n );\n },\n);\nFieldWrapper.displayName = 'FieldWrapper';\n\nexport { FieldWrapper };\n","'use client';\n\nimport { Loader2 } from 'lucide-react';\nimport { type InputHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { FieldWrapper } from './field-wrapper';\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n /** When true, renders error border & ring */\n invalid?: boolean;\n /** Element displayed at the start (left) of the input */\n startAdornment?: ReactNode;\n /** Element displayed at the end (right) of the input */\n endAdornment?: ReactNode;\n /** Label text displayed above the input */\n label?: string;\n /** Status message displayed below the input */\n error?: string;\n /** Color variant for the message: \"error\" (red), \"warning\" (yellow), \"success\" (green) or \"muted\" (grey).\n Only \"error\" and \"warning\" mark the field invalid (colored border). */\n errorVariant?: 'error' | 'warning' | 'success' | 'muted';\n /** When true, shows a loading spinner as end adornment */\n loading?: boolean;\n}\n\nconst invalidBorderClasses = {\n error: 'border-ods-error hover:border-ods-error has-[:focus]:border-ods-error',\n warning: '!border-ods-warning hover:!border-ods-warning has-[:focus]:!border-ods-warning',\n} as const;\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type,\n invalid = false,\n startAdornment,\n endAdornment,\n label,\n error,\n errorVariant = 'error',\n loading = false,\n ...props\n },\n ref,\n ) => {\n // success/muted are informational — they never paint the invalid border\n const variantIsInvalid = errorVariant === 'error' || errorVariant === 'warning';\n const isInvalid = invalid || (!!error && variantIsInvalid);\n\n // Range inputs get a clean slider rendering — no label wrapper, borders, or adornments\n if (type === 'range') {\n const rangeInput = (\n <input\n type=\"range\"\n className={cn(\n 'h-1 w-full cursor-pointer appearance-none rounded-full bg-white/30',\n // Webkit (Chrome/Safari) thumb\n '[&::-webkit-slider-thumb]:appearance-none',\n '[&::-webkit-slider-thumb]:h-3 [&::-webkit-slider-thumb]:w-3',\n '[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-white',\n '[&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:shadow-sm',\n // Firefox thumb\n '[&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:w-3',\n '[&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-white',\n '[&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-0',\n // Firefox track\n '[&::-moz-range-track]:bg-transparent',\n // Disabled\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n return label ? (\n <FieldWrapper label={label} error={error} errorVariant={errorVariant}>\n {rangeInput}\n </FieldWrapper>\n ) : (\n rangeInput\n );\n }\n\n const content = (\n <label\n data-invalid={isInvalid || undefined}\n className={cn(\n // Layout & spacing\n 'flex h-11 w-full cursor-text items-center gap-2 rounded-[6px] border px-3 md:h-12',\n // Focus-within states\n 'has-[:focus-visible]:outline-none',\n 'group',\n // Animations & touch UX\n 'transition-colors duration-200',\n // Theme palette\n 'border-ods-border bg-ods-card has-[:focus]:border-ods-accent',\n // Hover & active (not disabled)\n !props.disabled &&\n 'hover:border-ods-border-hover hover:bg-ods-bg-hover active:border-ods-border-active active:bg-ods-bg-active',\n // Disabled. The adornments (and any icon inside them) carry their own\n // `text-ods-text-secondary`, so grey them from here — a disabled field\n // must read as one flat colour, not grey text next to a live icon.\n // Scoped to the DIRECT span children (the two adornment wrappers): a\n // descendant rule would also repaint whatever the caller renders INSIDE\n // an adornment, which is passed verbatim precisely so it can own its\n // colour (a `Tag` there went invisible against its own fill).\n props.disabled && '!cursor-not-allowed bg-ods-bg',\n 'has-[:disabled]:[&>span]:text-ods-text-disabled has-[:disabled]:[&_svg]:text-ods-text-disabled',\n // Invalid\n isInvalid && invalidBorderClasses[variantIsInvalid ? errorVariant : 'error'],\n className,\n )}\n >\n {startAdornment && (\n <span className=\"flex-shrink-0 text-ods-text-secondary transition-colors duration-200 text-h6 group-has-[:focus]:text-ods-accent group-data-[invalid]:text-ods-error [&_svg]:size-4 md:[&_svg]:size-6\">\n {startAdornment}\n </span>\n )}\n <input\n type={type}\n className={cn(\n // Layout\n 'min-w-0 flex-1 border-none bg-transparent outline-none',\n // Typography\n 'text-h4',\n // Colors\n 'text-ods-text-primary placeholder:text-ods-text-secondary',\n // File input adjustments\n 'file:border-0 file:bg-transparent',\n // Disabled\n 'disabled:cursor-not-allowed disabled:text-ods-text-disabled disabled:placeholder:text-ods-border',\n // Touch\n 'touch-manipulation',\n // Autofill override\n '[&:-webkit-autofill]:[-webkit-box-shadow:0_0_0_9999px_transparent_inset] [&:-webkit-autofill]:[-webkit-text-fill-color:var(--color-text-primary)] [&:-webkit-autofill]:[caret-color:var(--color-text-primary)] [&:-webkit-autofill]:[transition:background-color_9999s_ease-in-out_0s]',\n )}\n ref={ref}\n {...props}\n />\n {loading && <Loader2 className=\"size-4 flex-shrink-0 animate-spin text-ods-text-secondary md:size-6\" />}\n {!loading && endAdornment && (\n <span className=\"flex-shrink-0 text-ods-text-secondary transition-colors duration-200 text-h6 group-has-[:focus]:text-ods-accent group-data-[invalid]:text-ods-error [&_svg]:size-4 md:[&_svg]:size-6\">\n {endAdornment}\n </span>\n )}\n </label>\n );\n\n return (\n <FieldWrapper label={label} error={error} errorVariant={errorVariant}>\n {content}\n </FieldWrapper>\n );\n },\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","'use client';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\n\nimport { cn } from '../../utils/cn';\nimport { CheckboxCheckmarkIcon } from '../icons-v2-generated/signs-and-symbols/checkbox-checkmark-icon';\n\nconst Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-ods-border bg-ods-card focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-ods-accent data-[state=checked]:bg-ods-accent',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn('flex items-center justify-center text-ods-text-on-accent')}>\n <CheckboxCheckmarkIcon size={10} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n"],"mappings":"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","names":["forwardRef","jsx","jsxs","forwardRef","forwardRef","jsx","forwardRef"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-QYQXAXVR.cjs","../src/components/ui/field-wrapper.tsx","../src/components/ui/input.tsx","../src/components/ui/checkbox.tsx"],"names":["forwardRef","jsx","jsxs"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-QYQXAXVR.cjs","sourcesContent":[null,"'use client';\n\nimport { type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Label } from './label';\n\nexport interface FieldWrapperProps {\n /** Label text displayed above the field */\n label?: string;\n /**\n * `id` of the control the label names. Without it the label is decoration:\n * clicking it focuses nothing and assistive tech reads the field unnamed,\n * which is why every caller that cared was rendering its own <Label> instead\n * of using `label` here.\n */\n htmlFor?: string;\n /**\n * Status message displayed below the field, on ONE line, ellipsized on\n * overflow (full text via the native `title`).\n *\n * It is positioned OUT OF FLOW (absolute, hanging below the wrapper), so it\n * never changes the field's height when it appears — the same treatment\n * `CheckboxBlock` uses. The trade is that it overlaps whatever sits directly\n * below: a form stacking fields needs at least ~20px of vertical gap (e.g.\n * `gap-[var(--spacing-system-lf)]`) for the message to land in clear space.\n */\n error?: string;\n /** Color variant for the message: \"error\" (red), \"warning\" (yellow), \"success\" (green) or \"muted\" (grey) */\n errorVariant?: 'error' | 'warning' | 'success' | 'muted';\n /**\n * Label scale. Default is the standard form-label scale (text-h6).\n * 'large' (text-h4) is for screens whose design specifies body-scale field\n * titles (e.g. the devices New Device page) — opt in per call site, the\n * default stays the converged small scale.\n */\n labelVariant?: 'default' | 'large';\n /** Additional className for the outer wrapper */\n className?: string;\n children: ReactNode;\n}\n\nconst errorVariantClasses = {\n error: 'text-ods-error',\n warning: 'text-ods-warning',\n success: 'text-ods-success',\n muted: 'text-ods-text-secondary',\n} as const;\n\nconst FieldWrapper = forwardRef<HTMLDivElement, FieldWrapperProps>(\n ({ label, htmlFor, error, errorVariant = 'error', labelVariant = 'default', className, children }, ref) => {\n const hasChrome = label != null || error != null;\n\n return (\n <div ref={ref} className={cn(hasChrome ? 'relative flex w-full flex-col' : 'contents', className)}>\n {label && (\n // Default is text-h6, NOT text-h4: `Field` (ui/field.tsx) renders its label via\n // `Label variant=\"small\"` = text-h6, and every form that mixes\n // Field-wrapped controls with `label=`-prop controls showed two label\n // sizes side by side — the exact inconsistency the admin editors kept\n // reporting. One label scale, owned here and in Field together.\n <Label className=\"mb-1\" htmlFor={htmlFor} variant={labelVariant}>\n {label}\n </Label>\n )}\n {children}\n {error && (\n <p\n className={cn(\n 'absolute bottom-0 left-0 right-0 translate-y-full truncate text-h6',\n errorVariantClasses[errorVariant],\n )}\n title={error}\n >\n {error}\n </p>\n )}\n </div>\n );\n },\n);\nFieldWrapper.displayName = 'FieldWrapper';\n\nexport { FieldWrapper };\n","'use client';\n\nimport { Loader2 } from 'lucide-react';\nimport { type InputHTMLAttributes, type ReactNode, forwardRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { FieldWrapper } from './field-wrapper';\n\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n /** When true, renders error border & ring */\n invalid?: boolean;\n /** Element displayed at the start (left) of the input */\n startAdornment?: ReactNode;\n /** Element displayed at the end (right) of the input */\n endAdornment?: ReactNode;\n /** Label text displayed above the input */\n label?: string;\n /** Status message displayed below the input */\n error?: string;\n /** Color variant for the message: \"error\" (red), \"warning\" (yellow), \"success\" (green) or \"muted\" (grey).\n Only \"error\" and \"warning\" mark the field invalid (colored border). */\n errorVariant?: 'error' | 'warning' | 'success' | 'muted';\n /** When true, shows a loading spinner as end adornment */\n loading?: boolean;\n}\n\nconst invalidBorderClasses = {\n error: 'border-ods-error hover:border-ods-error has-[:focus]:border-ods-error',\n warning: '!border-ods-warning hover:!border-ods-warning has-[:focus]:!border-ods-warning',\n} as const;\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n type,\n invalid = false,\n startAdornment,\n endAdornment,\n label,\n error,\n errorVariant = 'error',\n loading = false,\n ...props\n },\n ref,\n ) => {\n // success/muted are informational — they never paint the invalid border\n const variantIsInvalid = errorVariant === 'error' || errorVariant === 'warning';\n const isInvalid = invalid || (!!error && variantIsInvalid);\n\n // Range inputs get a clean slider rendering — no label wrapper, borders, or adornments\n if (type === 'range') {\n const rangeInput = (\n <input\n type=\"range\"\n className={cn(\n 'h-1 w-full cursor-pointer appearance-none rounded-full bg-white/30',\n // Webkit (Chrome/Safari) thumb\n '[&::-webkit-slider-thumb]:appearance-none',\n '[&::-webkit-slider-thumb]:h-3 [&::-webkit-slider-thumb]:w-3',\n '[&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-white',\n '[&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:shadow-sm',\n // Firefox thumb\n '[&::-moz-range-thumb]:h-3 [&::-moz-range-thumb]:w-3',\n '[&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:bg-white',\n '[&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:border-0',\n // Firefox track\n '[&::-moz-range-track]:bg-transparent',\n // Disabled\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n return label ? (\n <FieldWrapper label={label} error={error} errorVariant={errorVariant}>\n {rangeInput}\n </FieldWrapper>\n ) : (\n rangeInput\n );\n }\n\n const content = (\n <label\n data-invalid={isInvalid || undefined}\n className={cn(\n // Layout & spacing\n 'flex h-11 w-full cursor-text items-center gap-2 rounded-[6px] border px-3 md:h-12',\n // Focus-within states\n 'has-[:focus-visible]:outline-none',\n 'group',\n // Animations & touch UX\n 'transition-colors duration-200',\n // Theme palette\n 'border-ods-border bg-ods-card has-[:focus]:border-ods-accent',\n // Hover & active (not disabled)\n !props.disabled &&\n 'hover:border-ods-border-hover hover:bg-ods-bg-hover active:border-ods-border-active active:bg-ods-bg-active',\n // Disabled. The adornments (and any icon inside them) carry their own\n // `text-ods-text-secondary`, so grey them from here — a disabled field\n // must read as one flat colour, not grey text next to a live icon.\n // Scoped to the DIRECT span children (the two adornment wrappers): a\n // descendant rule would also repaint whatever the caller renders INSIDE\n // an adornment, which is passed verbatim precisely so it can own its\n // colour (a `Tag` there went invisible against its own fill).\n props.disabled && '!cursor-not-allowed bg-ods-bg',\n 'has-[:disabled]:[&>span]:text-ods-text-disabled has-[:disabled]:[&_svg]:text-ods-text-disabled',\n // Invalid\n isInvalid && invalidBorderClasses[variantIsInvalid ? errorVariant : 'error'],\n className,\n )}\n >\n {startAdornment && (\n <span className=\"flex-shrink-0 text-ods-text-secondary transition-colors duration-200 text-h6 group-has-[:focus]:text-ods-accent group-data-[invalid]:text-ods-error [&_svg]:size-4 md:[&_svg]:size-6\">\n {startAdornment}\n </span>\n )}\n <input\n type={type}\n className={cn(\n // Layout\n 'min-w-0 flex-1 border-none bg-transparent outline-none',\n // Typography\n 'text-h4',\n // Colors\n 'text-ods-text-primary placeholder:text-ods-text-secondary',\n // File input adjustments\n 'file:border-0 file:bg-transparent',\n // Disabled\n 'disabled:cursor-not-allowed disabled:text-ods-text-disabled disabled:placeholder:text-ods-border',\n // Touch\n 'touch-manipulation',\n // Autofill override\n '[&:-webkit-autofill]:[-webkit-box-shadow:0_0_0_9999px_transparent_inset] [&:-webkit-autofill]:[-webkit-text-fill-color:var(--color-text-primary)] [&:-webkit-autofill]:[caret-color:var(--color-text-primary)] [&:-webkit-autofill]:[transition:background-color_9999s_ease-in-out_0s]',\n )}\n ref={ref}\n {...props}\n />\n {loading && <Loader2 className=\"size-4 flex-shrink-0 animate-spin text-ods-text-secondary md:size-6\" />}\n {!loading && endAdornment && (\n <span className=\"flex-shrink-0 text-ods-text-secondary transition-colors duration-200 text-h6 group-has-[:focus]:text-ods-accent group-data-[invalid]:text-ods-error [&_svg]:size-4 md:[&_svg]:size-6\">\n {endAdornment}\n </span>\n )}\n </label>\n );\n\n return (\n <FieldWrapper label={label} error={error} errorVariant={errorVariant}>\n {content}\n </FieldWrapper>\n );\n },\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","'use client';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\n\nimport { cn } from '../../utils/cn';\nimport { CheckboxCheckmarkIcon } from '../icons-v2-generated/signs-and-symbols/checkbox-checkmark-icon';\n\nconst Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-ods-border bg-ods-card focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-ods-accent data-[state=checked]:bg-ods-accent',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn('flex items-center justify-center text-ods-text-on-accent')}>\n <CheckboxCheckmarkIcon size={10} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n"]}