@flamingo-stack/openframe-frontend-core 0.0.399 → 0.0.400-snapshot.20260710144905

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 (147) hide show
  1. package/dist/{chunk-XBCAY6NE.js → chunk-2B5FIJE5.js} +3 -3
  2. package/dist/{chunk-JBLBFJ4N.cjs → chunk-3GXZPZHR.cjs} +32 -32
  3. package/dist/{chunk-JBLBFJ4N.cjs.map → chunk-3GXZPZHR.cjs.map} +1 -1
  4. package/dist/{chunk-BSJO5VFV.js → chunk-5P5WMTVW.js} +5 -5
  5. package/dist/{chunk-G5NDKTX6.cjs → chunk-7YKHVAUU.cjs} +40 -40
  6. package/dist/{chunk-G5NDKTX6.cjs.map → chunk-7YKHVAUU.cjs.map} +1 -1
  7. package/dist/{chunk-CRRH7RJX.js → chunk-B3IDZ6JJ.js} +5 -5
  8. package/dist/{chunk-ZDT2MBKE.cjs → chunk-BI23LOMC.cjs} +40 -40
  9. package/dist/{chunk-ZDT2MBKE.cjs.map → chunk-BI23LOMC.cjs.map} +1 -1
  10. package/dist/{chunk-NCW22SII.cjs → chunk-CG7LIPSA.cjs} +73 -73
  11. package/dist/{chunk-NCW22SII.cjs.map → chunk-CG7LIPSA.cjs.map} +1 -1
  12. package/dist/{chunk-ZSZRJWY3.js → chunk-DH6HTYOV.js} +153 -134
  13. package/dist/chunk-DH6HTYOV.js.map +1 -0
  14. package/dist/{chunk-2XVOYDRF.js → chunk-EDR55RQJ.js} +4763 -4735
  15. package/dist/chunk-EDR55RQJ.js.map +1 -0
  16. package/dist/{chunk-7OKNKZBW.cjs → chunk-F2LZ67KM.cjs} +1250 -1222
  17. package/dist/chunk-F2LZ67KM.cjs.map +1 -0
  18. package/dist/{chunk-Z5ERSGP2.js → chunk-FLDYBM25.js} +2 -2
  19. package/dist/{chunk-QNYNXSYQ.cjs → chunk-FRLLKYMO.cjs} +7 -7
  20. package/dist/{chunk-QNYNXSYQ.cjs.map → chunk-FRLLKYMO.cjs.map} +1 -1
  21. package/dist/{chunk-JWBRDNYH.cjs → chunk-J4XR6YYZ.cjs} +23 -4
  22. package/dist/chunk-J4XR6YYZ.cjs.map +1 -0
  23. package/dist/{chunk-4KWIQEZT.js → chunk-MTBFE3JF.js} +2 -2
  24. package/dist/{chunk-VVKWNVKE.js → chunk-MZPEN27A.js} +6 -6
  25. package/dist/{chunk-RIC4TCPD.cjs → chunk-PLB6Z3E4.cjs} +19 -19
  26. package/dist/{chunk-RIC4TCPD.cjs.map → chunk-PLB6Z3E4.cjs.map} +1 -1
  27. package/dist/{chunk-G3A7QHCX.js → chunk-PMR74LEE.js} +2 -2
  28. package/dist/{chunk-WBLRUO3F.cjs → chunk-Q3AO2QWK.cjs} +3 -3
  29. package/dist/{chunk-WBLRUO3F.cjs.map → chunk-Q3AO2QWK.cjs.map} +1 -1
  30. package/dist/{chunk-VOHOA3WV.cjs → chunk-Q4HI3DGY.cjs} +15 -15
  31. package/dist/{chunk-VOHOA3WV.cjs.map → chunk-Q4HI3DGY.cjs.map} +1 -1
  32. package/dist/{chunk-D5IHYUBY.cjs → chunk-QDERWRT4.cjs} +29 -29
  33. package/dist/{chunk-D5IHYUBY.cjs.map → chunk-QDERWRT4.cjs.map} +1 -1
  34. package/dist/{chunk-YWCCKB4J.cjs → chunk-QOOWYEPL.cjs} +5 -5
  35. package/dist/{chunk-YWCCKB4J.cjs.map → chunk-QOOWYEPL.cjs.map} +1 -1
  36. package/dist/{chunk-4K5XJ5EJ.js → chunk-RWKVTABY.js} +3 -3
  37. package/dist/{chunk-O5NA3ULU.cjs → chunk-TGWHUEPD.cjs} +73 -73
  38. package/dist/{chunk-O5NA3ULU.cjs.map → chunk-TGWHUEPD.cjs.map} +1 -1
  39. package/dist/{chunk-FXWURWDU.js → chunk-TZDROKLI.js} +3 -3
  40. package/dist/{chunk-4H2ICJYB.js → chunk-V3NY65ET.js} +4 -4
  41. package/dist/{chunk-A6KGHQRF.js → chunk-V4YFWSB2.js} +6 -6
  42. package/dist/{chunk-4PEC5KU6.cjs → chunk-VIEWUAFE.cjs} +12 -12
  43. package/dist/{chunk-4PEC5KU6.cjs.map → chunk-VIEWUAFE.cjs.map} +1 -1
  44. package/dist/{chunk-2L6ALD2Q.js → chunk-YON2QYWK.js} +2 -2
  45. package/dist/components/case-studies/index.cjs +9 -9
  46. package/dist/components/case-studies/index.js +3 -3
  47. package/dist/components/chat/chat-ticket-list.d.ts.map +1 -1
  48. package/dist/components/chat/guide-welcome.d.ts.map +1 -1
  49. package/dist/components/chat/index.cjs +3 -3
  50. package/dist/components/chat/index.js +2 -2
  51. package/dist/components/chat/mingo-chat-history.d.ts.map +1 -1
  52. package/dist/components/chat/mingo-welcome.d.ts.map +1 -1
  53. package/dist/components/contact/index.cjs +4 -4
  54. package/dist/components/contact/index.js +3 -3
  55. package/dist/components/docs/index.cjs +6 -6
  56. package/dist/components/docs/index.js +5 -5
  57. package/dist/components/embeds/index.cjs +4 -4
  58. package/dist/components/embeds/index.js +3 -3
  59. package/dist/components/faq/index.cjs +5 -5
  60. package/dist/components/faq/index.js +4 -4
  61. package/dist/components/features/auth/auth-benefits-panel.d.ts.map +1 -1
  62. package/dist/components/features/auth/complete-account-form.d.ts.map +1 -1
  63. package/dist/components/features/auth/create-organization-form.d.ts.map +1 -1
  64. package/dist/components/features/auth/login-form.d.ts.map +1 -1
  65. package/dist/components/features/auth/openframe-sso-login-form.d.ts.map +1 -1
  66. package/dist/components/features/auth/openframe-sso-signup-form.d.ts.map +1 -1
  67. package/dist/components/features/auth/password-reset-form.d.ts.map +1 -1
  68. package/dist/components/features/index.cjs +3 -3
  69. package/dist/components/features/index.js +2 -2
  70. package/dist/components/help-center-pages/index.cjs +22 -22
  71. package/dist/components/help-center-pages/index.js +13 -13
  72. package/dist/components/index.cjs +131 -125
  73. package/dist/components/index.cjs.map +1 -1
  74. package/dist/components/index.js +17 -11
  75. package/dist/components/index.js.map +1 -1
  76. package/dist/components/navigation/index.cjs +3 -3
  77. package/dist/components/navigation/index.js +2 -2
  78. package/dist/components/onboarding-guides/index.cjs +7 -7
  79. package/dist/components/onboarding-guides/index.js +6 -6
  80. package/dist/components/related-content/index.cjs +5 -5
  81. package/dist/components/related-content/index.js +4 -4
  82. package/dist/components/tickets/index.cjs +6 -6
  83. package/dist/components/tickets/index.js +5 -5
  84. package/dist/components/ui/data-table/data-table-header.d.ts.map +1 -1
  85. package/dist/components/ui/data-table/types.d.ts +6 -0
  86. package/dist/components/ui/data-table/types.d.ts.map +1 -1
  87. package/dist/components/ui/date-picker.d.ts +41 -4
  88. package/dist/components/ui/date-picker.d.ts.map +1 -1
  89. package/dist/components/ui/filter-modal.d.ts +16 -1
  90. package/dist/components/ui/filter-modal.d.ts.map +1 -1
  91. package/dist/components/ui/index.cjs +9 -3
  92. package/dist/components/ui/index.cjs.map +1 -1
  93. package/dist/components/ui/index.d.ts +1 -0
  94. package/dist/components/ui/index.d.ts.map +1 -1
  95. package/dist/components/ui/index.js +8 -2
  96. package/dist/components/ui/scroll-fade.d.ts +33 -0
  97. package/dist/components/ui/scroll-fade.d.ts.map +1 -0
  98. package/dist/hooks/index.cjs +4 -2
  99. package/dist/hooks/index.cjs.map +1 -1
  100. package/dist/hooks/index.js +3 -1
  101. package/dist/hooks/ui/index.d.ts +1 -0
  102. package/dist/hooks/ui/index.d.ts.map +1 -1
  103. package/dist/hooks/ui/use-deferred-error.d.ts +16 -0
  104. package/dist/hooks/ui/use-deferred-error.d.ts.map +1 -0
  105. package/dist/index.cjs +11 -3
  106. package/dist/index.cjs.map +1 -1
  107. package/dist/index.js +10 -2
  108. package/package.json +1 -1
  109. package/src/components/chat/chat-ticket-list.tsx +8 -36
  110. package/src/components/chat/guide-welcome.tsx +5 -43
  111. package/src/components/chat/mingo-chat-history.tsx +6 -40
  112. package/src/components/chat/mingo-welcome.tsx +7 -47
  113. package/src/components/features/auth/auth-benefits-panel.tsx +1 -1
  114. package/src/components/features/auth/complete-account-form.tsx +15 -4
  115. package/src/components/features/auth/create-organization-form.tsx +14 -5
  116. package/src/components/features/auth/login-form.tsx +6 -1
  117. package/src/components/features/auth/openframe-sso-login-form.tsx +9 -2
  118. package/src/components/features/auth/openframe-sso-signup-form.tsx +18 -5
  119. package/src/components/features/auth/password-reset-form.tsx +9 -2
  120. package/src/components/ui/data-table/data-table-header.tsx +6 -3
  121. package/src/components/ui/data-table/types.ts +6 -0
  122. package/src/components/ui/date-picker.tsx +149 -41
  123. package/src/components/ui/filter-modal.tsx +57 -2
  124. package/src/components/ui/index.ts +1 -0
  125. package/src/components/ui/scroll-fade.tsx +90 -0
  126. package/src/hooks/ui/index.ts +1 -0
  127. package/src/hooks/ui/use-deferred-error.ts +38 -0
  128. package/src/stories/DatePicker.stories.tsx +4 -2
  129. package/src/stories/FilterModal.stories.tsx +33 -0
  130. package/src/stories/Input.stories.tsx +1 -1
  131. package/src/stories/auth/CreateOrganization.stories.tsx +2 -1
  132. package/dist/chunk-2XVOYDRF.js.map +0 -1
  133. package/dist/chunk-7OKNKZBW.cjs.map +0 -1
  134. package/dist/chunk-JWBRDNYH.cjs.map +0 -1
  135. package/dist/chunk-ZSZRJWY3.js.map +0 -1
  136. /package/dist/{chunk-XBCAY6NE.js.map → chunk-2B5FIJE5.js.map} +0 -0
  137. /package/dist/{chunk-BSJO5VFV.js.map → chunk-5P5WMTVW.js.map} +0 -0
  138. /package/dist/{chunk-CRRH7RJX.js.map → chunk-B3IDZ6JJ.js.map} +0 -0
  139. /package/dist/{chunk-Z5ERSGP2.js.map → chunk-FLDYBM25.js.map} +0 -0
  140. /package/dist/{chunk-4KWIQEZT.js.map → chunk-MTBFE3JF.js.map} +0 -0
  141. /package/dist/{chunk-VVKWNVKE.js.map → chunk-MZPEN27A.js.map} +0 -0
  142. /package/dist/{chunk-G3A7QHCX.js.map → chunk-PMR74LEE.js.map} +0 -0
  143. /package/dist/{chunk-4K5XJ5EJ.js.map → chunk-RWKVTABY.js.map} +0 -0
  144. /package/dist/{chunk-FXWURWDU.js.map → chunk-TZDROKLI.js.map} +0 -0
  145. /package/dist/{chunk-4H2ICJYB.js.map → chunk-V3NY65ET.js.map} +0 -0
  146. /package/dist/{chunk-A6KGHQRF.js.map → chunk-V4YFWSB2.js.map} +0 -0
  147. /package/dist/{chunk-2L6ALD2Q.js.map → chunk-YON2QYWK.js.map} +0 -0
@@ -0,0 +1,38 @@
1
+ 'use client'
2
+
3
+ import * as React from 'react'
4
+
5
+ export interface UseDeferredErrorResult {
6
+ /** The message to render (undefined while the reveal is deferred or the field is valid). */
7
+ error: string | undefined
8
+ /** Attach to the field's onBlur — reveals validation immediately and keeps it live from then on. */
9
+ onBlur: () => void
10
+ }
11
+
12
+ /**
13
+ * Defers showing a field validation message while the user is still typing.
14
+ *
15
+ * The message is revealed when the field loses focus (touched) or when the
16
+ * value hasn't changed for `delay` ms; every keystroke restarts the timer.
17
+ * Once touched, validation stays live. A message that clears (the value became
18
+ * valid) disappears immediately.
19
+ */
20
+ export function useDeferredError(error: string | undefined, value: string, delay = 1500): UseDeferredErrorResult {
21
+ const [touched, setTouched] = React.useState(false)
22
+ const [paused, setPaused] = React.useState(false)
23
+
24
+ // Typing hides the message and restarts the pause timer.
25
+ React.useEffect(() => {
26
+ if (touched) return
27
+ setPaused(false)
28
+ const timer = setTimeout(() => setPaused(true), delay)
29
+ return () => clearTimeout(timer)
30
+ }, [value, delay, touched])
31
+
32
+ const onBlur = React.useCallback(() => setTouched(true), [])
33
+
34
+ return {
35
+ error: error && (touched || paused) ? error : undefined,
36
+ onBlur,
37
+ }
38
+ }
@@ -775,8 +775,10 @@ const fmtDay = (d: Date) =>
775
775
 
776
776
  /**
777
777
  * DateFilterMenu — calendar-icon trigger opens a popover with a sort selector,
778
- * a date-range calendar, and Close / Apply actions. Matches the Figma
779
- * `filter-menu`. Selections are drafted internally and committed on Apply.
778
+ * a date-range calendar, and Close/Reset + Apply actions. Matches the Figma
779
+ * `filter-menu`. The sort and date selection are drafted and committed on
780
+ * Apply. With a selection present, Close becomes Reset, which clears and
781
+ * commits the empty selection.
780
782
  */
781
783
  export const FilterMenuRange: Story = {
782
784
  render: function Render() {
@@ -517,3 +517,36 @@ export const InteractiveWithTags: Story = {
517
517
  onClose: fn(),
518
518
  },
519
519
  }
520
+
521
+ /**
522
+ * Mobile "Sort and Filter" with the date sort + range filter as the last
523
+ * section (per the logs Figma). Scroll shadows: bottom fade by default while
524
+ * content continues, top fade once scrolled.
525
+ */
526
+ export const WithDateFilter: Story = {
527
+ args: {
528
+ isOpen: true,
529
+ title: 'Sort and Filter',
530
+ filterGroups: [
531
+ ...defaultFilterGroups,
532
+ {
533
+ id: 'tools',
534
+ title: 'Tool',
535
+ options: [
536
+ { id: 'fleet', label: 'Fleet MDM', count: 10 },
537
+ { id: 'mesh', label: 'MeshCentral', count: 30 },
538
+ { id: 'tactical', label: 'TacticalRMM', count: 20 },
539
+ { id: 'windows', label: 'Windows', count: 30 },
540
+ ],
541
+ },
542
+ ],
543
+ currentFilters: defaultCurrentFilters,
544
+ onFilterChange: fn(),
545
+ onClose: fn(),
546
+ dateFilter: {
547
+ title: 'Date',
548
+ sort: 'desc',
549
+ onChange: fn(),
550
+ },
551
+ },
552
+ }
@@ -244,7 +244,7 @@ export const ErrorState: Story = {
244
244
  />
245
245
  <Input
246
246
  label="Organization Name"
247
- defaultValue="ϕ"
247
+ defaultValue="A"
248
248
  error="Organization Name must be 2-100 characters"
249
249
  />
250
250
  </div>
@@ -99,12 +99,13 @@ export const Filled: Story = {
99
99
 
100
100
  /**
101
101
  * Error state: long messages under the fields wrap up to two lines.
102
+ * Validation is deferred — messages appear after a 1.5s typing pause or on blur.
102
103
  */
103
104
  export const ErrorState: Story = {
104
105
  render: () => (
105
106
  <CreateOrganizationPage
106
107
  email="ada@example.com"
107
- organizationName="ϕ"
108
+ organizationName="A"
108
109
  domainSuffix=".openframe.ai"
109
110
  termsUrl="#terms"
110
111
  privacyPolicyUrl="#privacy"