@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.
- package/dist/{chunk-XBCAY6NE.js → chunk-2B5FIJE5.js} +3 -3
- package/dist/{chunk-JBLBFJ4N.cjs → chunk-3GXZPZHR.cjs} +32 -32
- package/dist/{chunk-JBLBFJ4N.cjs.map → chunk-3GXZPZHR.cjs.map} +1 -1
- package/dist/{chunk-BSJO5VFV.js → chunk-5P5WMTVW.js} +5 -5
- package/dist/{chunk-G5NDKTX6.cjs → chunk-7YKHVAUU.cjs} +40 -40
- package/dist/{chunk-G5NDKTX6.cjs.map → chunk-7YKHVAUU.cjs.map} +1 -1
- package/dist/{chunk-CRRH7RJX.js → chunk-B3IDZ6JJ.js} +5 -5
- package/dist/{chunk-ZDT2MBKE.cjs → chunk-BI23LOMC.cjs} +40 -40
- package/dist/{chunk-ZDT2MBKE.cjs.map → chunk-BI23LOMC.cjs.map} +1 -1
- package/dist/{chunk-NCW22SII.cjs → chunk-CG7LIPSA.cjs} +73 -73
- package/dist/{chunk-NCW22SII.cjs.map → chunk-CG7LIPSA.cjs.map} +1 -1
- package/dist/{chunk-ZSZRJWY3.js → chunk-DH6HTYOV.js} +153 -134
- package/dist/chunk-DH6HTYOV.js.map +1 -0
- package/dist/{chunk-2XVOYDRF.js → chunk-EDR55RQJ.js} +4763 -4735
- package/dist/chunk-EDR55RQJ.js.map +1 -0
- package/dist/{chunk-7OKNKZBW.cjs → chunk-F2LZ67KM.cjs} +1250 -1222
- package/dist/chunk-F2LZ67KM.cjs.map +1 -0
- package/dist/{chunk-Z5ERSGP2.js → chunk-FLDYBM25.js} +2 -2
- package/dist/{chunk-QNYNXSYQ.cjs → chunk-FRLLKYMO.cjs} +7 -7
- package/dist/{chunk-QNYNXSYQ.cjs.map → chunk-FRLLKYMO.cjs.map} +1 -1
- package/dist/{chunk-JWBRDNYH.cjs → chunk-J4XR6YYZ.cjs} +23 -4
- package/dist/chunk-J4XR6YYZ.cjs.map +1 -0
- package/dist/{chunk-4KWIQEZT.js → chunk-MTBFE3JF.js} +2 -2
- package/dist/{chunk-VVKWNVKE.js → chunk-MZPEN27A.js} +6 -6
- package/dist/{chunk-RIC4TCPD.cjs → chunk-PLB6Z3E4.cjs} +19 -19
- package/dist/{chunk-RIC4TCPD.cjs.map → chunk-PLB6Z3E4.cjs.map} +1 -1
- package/dist/{chunk-G3A7QHCX.js → chunk-PMR74LEE.js} +2 -2
- package/dist/{chunk-WBLRUO3F.cjs → chunk-Q3AO2QWK.cjs} +3 -3
- package/dist/{chunk-WBLRUO3F.cjs.map → chunk-Q3AO2QWK.cjs.map} +1 -1
- package/dist/{chunk-VOHOA3WV.cjs → chunk-Q4HI3DGY.cjs} +15 -15
- package/dist/{chunk-VOHOA3WV.cjs.map → chunk-Q4HI3DGY.cjs.map} +1 -1
- package/dist/{chunk-D5IHYUBY.cjs → chunk-QDERWRT4.cjs} +29 -29
- package/dist/{chunk-D5IHYUBY.cjs.map → chunk-QDERWRT4.cjs.map} +1 -1
- package/dist/{chunk-YWCCKB4J.cjs → chunk-QOOWYEPL.cjs} +5 -5
- package/dist/{chunk-YWCCKB4J.cjs.map → chunk-QOOWYEPL.cjs.map} +1 -1
- package/dist/{chunk-4K5XJ5EJ.js → chunk-RWKVTABY.js} +3 -3
- package/dist/{chunk-O5NA3ULU.cjs → chunk-TGWHUEPD.cjs} +73 -73
- package/dist/{chunk-O5NA3ULU.cjs.map → chunk-TGWHUEPD.cjs.map} +1 -1
- package/dist/{chunk-FXWURWDU.js → chunk-TZDROKLI.js} +3 -3
- package/dist/{chunk-4H2ICJYB.js → chunk-V3NY65ET.js} +4 -4
- package/dist/{chunk-A6KGHQRF.js → chunk-V4YFWSB2.js} +6 -6
- package/dist/{chunk-4PEC5KU6.cjs → chunk-VIEWUAFE.cjs} +12 -12
- package/dist/{chunk-4PEC5KU6.cjs.map → chunk-VIEWUAFE.cjs.map} +1 -1
- package/dist/{chunk-2L6ALD2Q.js → chunk-YON2QYWK.js} +2 -2
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/chat-ticket-list.d.ts.map +1 -1
- package/dist/components/chat/guide-welcome.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/chat/index.js +2 -2
- package/dist/components/chat/mingo-chat-history.d.ts.map +1 -1
- package/dist/components/chat/mingo-welcome.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +6 -6
- package/dist/components/docs/index.js +5 -5
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +5 -5
- package/dist/components/faq/index.js +4 -4
- package/dist/components/features/auth/auth-benefits-panel.d.ts.map +1 -1
- package/dist/components/features/auth/complete-account-form.d.ts.map +1 -1
- package/dist/components/features/auth/create-organization-form.d.ts.map +1 -1
- package/dist/components/features/auth/login-form.d.ts.map +1 -1
- package/dist/components/features/auth/openframe-sso-login-form.d.ts.map +1 -1
- package/dist/components/features/auth/openframe-sso-signup-form.d.ts.map +1 -1
- package/dist/components/features/auth/password-reset-form.d.ts.map +1 -1
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/help-center-pages/index.cjs +22 -22
- package/dist/components/help-center-pages/index.js +13 -13
- package/dist/components/index.cjs +131 -125
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +17 -11
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +3 -3
- package/dist/components/navigation/index.js +2 -2
- package/dist/components/onboarding-guides/index.cjs +7 -7
- package/dist/components/onboarding-guides/index.js +6 -6
- package/dist/components/related-content/index.cjs +5 -5
- package/dist/components/related-content/index.js +4 -4
- package/dist/components/tickets/index.cjs +6 -6
- package/dist/components/tickets/index.js +5 -5
- package/dist/components/ui/data-table/data-table-header.d.ts.map +1 -1
- package/dist/components/ui/data-table/types.d.ts +6 -0
- package/dist/components/ui/data-table/types.d.ts.map +1 -1
- package/dist/components/ui/date-picker.d.ts +41 -4
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/filter-modal.d.ts +16 -1
- package/dist/components/ui/filter-modal.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +9 -3
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +8 -2
- package/dist/components/ui/scroll-fade.d.ts +33 -0
- package/dist/components/ui/scroll-fade.d.ts.map +1 -0
- package/dist/hooks/index.cjs +4 -2
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +3 -1
- package/dist/hooks/ui/index.d.ts +1 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-deferred-error.d.ts +16 -0
- package/dist/hooks/ui/use-deferred-error.d.ts.map +1 -0
- package/dist/index.cjs +11 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -2
- package/package.json +1 -1
- package/src/components/chat/chat-ticket-list.tsx +8 -36
- package/src/components/chat/guide-welcome.tsx +5 -43
- package/src/components/chat/mingo-chat-history.tsx +6 -40
- package/src/components/chat/mingo-welcome.tsx +7 -47
- package/src/components/features/auth/auth-benefits-panel.tsx +1 -1
- package/src/components/features/auth/complete-account-form.tsx +15 -4
- package/src/components/features/auth/create-organization-form.tsx +14 -5
- package/src/components/features/auth/login-form.tsx +6 -1
- package/src/components/features/auth/openframe-sso-login-form.tsx +9 -2
- package/src/components/features/auth/openframe-sso-signup-form.tsx +18 -5
- package/src/components/features/auth/password-reset-form.tsx +9 -2
- package/src/components/ui/data-table/data-table-header.tsx +6 -3
- package/src/components/ui/data-table/types.ts +6 -0
- package/src/components/ui/date-picker.tsx +149 -41
- package/src/components/ui/filter-modal.tsx +57 -2
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/scroll-fade.tsx +90 -0
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/use-deferred-error.ts +38 -0
- package/src/stories/DatePicker.stories.tsx +4 -2
- package/src/stories/FilterModal.stories.tsx +33 -0
- package/src/stories/Input.stories.tsx +1 -1
- package/src/stories/auth/CreateOrganization.stories.tsx +2 -1
- package/dist/chunk-2XVOYDRF.js.map +0 -1
- package/dist/chunk-7OKNKZBW.cjs.map +0 -1
- package/dist/chunk-JWBRDNYH.cjs.map +0 -1
- package/dist/chunk-ZSZRJWY3.js.map +0 -1
- /package/dist/{chunk-XBCAY6NE.js.map → chunk-2B5FIJE5.js.map} +0 -0
- /package/dist/{chunk-BSJO5VFV.js.map → chunk-5P5WMTVW.js.map} +0 -0
- /package/dist/{chunk-CRRH7RJX.js.map → chunk-B3IDZ6JJ.js.map} +0 -0
- /package/dist/{chunk-Z5ERSGP2.js.map → chunk-FLDYBM25.js.map} +0 -0
- /package/dist/{chunk-4KWIQEZT.js.map → chunk-MTBFE3JF.js.map} +0 -0
- /package/dist/{chunk-VVKWNVKE.js.map → chunk-MZPEN27A.js.map} +0 -0
- /package/dist/{chunk-G3A7QHCX.js.map → chunk-PMR74LEE.js.map} +0 -0
- /package/dist/{chunk-4K5XJ5EJ.js.map → chunk-RWKVTABY.js.map} +0 -0
- /package/dist/{chunk-FXWURWDU.js.map → chunk-TZDROKLI.js.map} +0 -0
- /package/dist/{chunk-4H2ICJYB.js.map → chunk-V3NY65ET.js.map} +0 -0
- /package/dist/{chunk-A6KGHQRF.js.map → chunk-V4YFWSB2.js.map} +0 -0
- /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
|
|
779
|
-
* `filter-menu`.
|
|
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
|
+
}
|
|
@@ -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"
|