@astryxdesign/lab 0.7.6-canary.6224efd → 0.7.6-canary.6504e70
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/CommentPin/CommentPin.js +1 -1
- package/dist/Comments/CommentComposer.d.ts.map +1 -1
- package/dist/Comments/CommentComposer.js +12 -4
- package/dist/MobilePowerSearch/MobilePowerSearch.d.ts +3 -6
- package/dist/MobilePowerSearch/MobilePowerSearch.d.ts.map +1 -1
- package/dist/MobilePowerSearch/MobilePowerSearch.js +12 -76
- package/dist/MobileTokenizer/MobileTokenizer.d.ts +10 -7
- package/dist/MobileTokenizer/MobileTokenizer.d.ts.map +1 -1
- package/dist/MobileTokenizer/MobileTokenizer.js +191 -114
- package/dist/internal/MobileSheetConfirmation.d.ts +12 -0
- package/dist/internal/MobileSheetConfirmation.d.ts.map +1 -0
- package/dist/internal/MobileSheetConfirmation.js +88 -0
- package/dist/internal/useDismissSearchOnTouchDrag.d.ts +21 -0
- package/dist/internal/useDismissSearchOnTouchDrag.d.ts.map +1 -0
- package/dist/internal/useDismissSearchOnTouchDrag.js +43 -0
- package/package.json +4 -4
- package/src/CommentPin/CommentPin.tsx +1 -1
- package/src/Comments/CommentComposer.test.tsx +56 -0
- package/src/Comments/CommentComposer.tsx +18 -13
- package/src/MobilePowerSearch/MobilePowerSearch.doc.mjs +1 -1
- package/src/MobilePowerSearch/MobilePowerSearch.test.tsx +7 -2
- package/src/MobilePowerSearch/MobilePowerSearch.tsx +16 -83
- package/src/MobileTokenizer/MobileTokenizer.doc.mjs +3 -3
- package/src/MobileTokenizer/MobileTokenizer.test.tsx +287 -31
- package/src/MobileTokenizer/MobileTokenizer.tsx +242 -137
- package/src/Schedule/__tests__/ScheduleTimeDirection.a11y.chromium.spec.ts +4 -0
- package/src/TransferList/TransferList.doc.mjs +1 -1
- package/src/internal/MobileSheetConfirmation.test.tsx +68 -0
- package/src/internal/MobileSheetConfirmation.tsx +97 -0
- package/src/internal/useDismissSearchOnTouchDrag.test.tsx +94 -0
- package/src/internal/useDismissSearchOnTouchDrag.ts +57 -0
- package/src/CommentPin/CommentPin.spec.md +0 -319
- package/src/Schedule/Schedule.spec.md +0 -590
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* SYNC: When modified, update these files to stay in sync:
|
|
17
17
|
* - /packages/lab/src/CommentPin/CommentPin.doc.mjs
|
|
18
|
-
* - /
|
|
18
|
+
* - /docs/specs/components/CommentPin/CommentPin.spec.md
|
|
19
19
|
* - /packages/lab/src/CommentPin/CommentPin.test.tsx
|
|
20
20
|
* - /packages/lab/src/CommentPin/index.ts
|
|
21
21
|
* - /apps/storybook/stories/CommentPin.stories.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommentComposer.d.ts","sourceRoot":"","sources":["../../src/Comments/CommentComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAKL,KAAK,mBAAmB,EAEzB,MAAM,yBAAyB,CAAC;AAqBjC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAkGjB,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,cAAc,EAAE,qBAAqB,CAAC;IACtC,cAAc,CAAC,EAAE,CACf,KAAK,EAAE,SAAS,IAAI,EAAE,KAEtB,SAAS,oBAAoB,EAAE,GAAG,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;IAC7E,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACzC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAClE,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;CACnE;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,aAAa,EACb,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,KAAK,EACL,qBAAqB,EACrB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,EACd,SAAS,EACT,OAAO,EACP,QAAQ,EAAE,YAAY,EACtB,KAAK,GACN,EAAE,wBAAwB,+
|
|
1
|
+
{"version":3,"file":"CommentComposer.d.ts","sourceRoot":"","sources":["../../src/Comments/CommentComposer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,GAAG,EACT,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAKL,KAAK,mBAAmB,EAEzB,MAAM,yBAAyB,CAAC;AAqBjC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAkGjB,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,cAAc,EAAE,qBAAqB,CAAC;IACtC,cAAc,CAAC,EAAE,CACf,KAAK,EAAE,SAAS,IAAI,EAAE,KAEtB,SAAS,oBAAoB,EAAE,GAAG,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;IAC7E,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACzC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;IAClE,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;CACnE;AAED,kDAAkD;AAClD,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,aAAa,EACb,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,KAAK,EACL,qBAAqB,EACrB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,EACX,cAAc,EACd,SAAS,EACT,OAAO,EACP,QAAQ,EAAE,YAAY,EACtB,KAAK,GACN,EAAE,wBAAwB,+BAkX1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAChD,SAAS,CAAC,WAAW,CAAC,EACtB,UAAU,GAAG,UAAU,CACxB;IACC,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACvB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;OAGG;IACH,cAAc,CAAC,EAAE,CACf,KAAK,EAAE,SAAS,IAAI,EAAE,KAEtB,SAAS,oBAAoB,EAAE,GAAG,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;IAC7E,wDAAwD;IACxD,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,6DAA6D;IAC7D,aAAa,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,KAAK,EACL,YAAoB,EACpB,KAAK,EACL,OAAO,EACP,MAAM,EACN,eAAe,EACf,cAAyB,EACzB,cAAc,EACd,QAAsB,EACtB,aAAiC,EACjC,cAAqB,EACrB,QAAQ,EACR,GAAG,EACH,GAAG,SAAS,EACb,EAAE,oBAAoB,+BAyBtB;yBA5Ce,eAAe"}
|
|
@@ -152,6 +152,11 @@ export function CommentComposerBase({
|
|
|
152
152
|
latestValueRef.current = value;
|
|
153
153
|
const isMountedRef = useRef(true);
|
|
154
154
|
const actionPendingRef = useRef(false);
|
|
155
|
+
// The latest callback, read when reporting. An inline callback is new on
|
|
156
|
+
// every render; depending on it would re-run the unmount cleanup below on
|
|
157
|
+
// each render and leave the composer busy after its upload ends.
|
|
158
|
+
const onActionPendingChangeRef = useRef(onActionPendingChange);
|
|
159
|
+
onActionPendingChangeRef.current = onActionPendingChange;
|
|
155
160
|
const isSubmittingRef = useRef(isSubmitting);
|
|
156
161
|
isSubmittingRef.current = isSubmitting;
|
|
157
162
|
const imageInputRef = useRef(null);
|
|
@@ -184,18 +189,21 @@ export function CommentComposerBase({
|
|
|
184
189
|
}
|
|
185
190
|
actionPendingRef.current = nextPending;
|
|
186
191
|
setIsActionPending(nextPending);
|
|
187
|
-
|
|
188
|
-
}, [
|
|
192
|
+
onActionPendingChangeRef.current?.(nextPending);
|
|
193
|
+
}, []);
|
|
194
|
+
// Tracks mount for the upload's async completion, and on unmount releases
|
|
195
|
+
// the host's pending-action hold, which the upload's finally skips once
|
|
196
|
+
// unmounted.
|
|
189
197
|
useEffect(() => {
|
|
190
198
|
isMountedRef.current = true;
|
|
191
199
|
return () => {
|
|
192
200
|
isMountedRef.current = false;
|
|
193
201
|
if (actionPendingRef.current) {
|
|
194
202
|
actionPendingRef.current = false;
|
|
195
|
-
|
|
203
|
+
onActionPendingChangeRef.current?.(false);
|
|
196
204
|
}
|
|
197
205
|
};
|
|
198
|
-
}, [
|
|
206
|
+
}, []);
|
|
199
207
|
const uploadImages = async files => {
|
|
200
208
|
if (onUploadImages == null || files.length === 0) {
|
|
201
209
|
return;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file MobilePowerSearch.tsx
|
|
3
3
|
* @input Core PowerSearch config, filters and onChange (the same props as
|
|
4
|
-
* @astryxdesign/core PowerSearch); public
|
|
5
|
-
*
|
|
6
|
-
* RadioList, Text, TextInput, Token, Tooltip hooks, i18n, hooks —
|
|
7
|
-
* useAnnounce for every announcement — utils, Layout container-padding
|
|
8
|
-
* styles)
|
|
4
|
+
* @astryxdesign/core PowerSearch); public Core primitives and private Lab
|
|
5
|
+
* mobile-sheet confirmation and search-drag dismissal owners
|
|
9
6
|
* @output Exports MobilePowerSearch — Lab prototype of the touch PowerSearch
|
|
10
7
|
* flow: the whole field is one "Manage filters" trigger with display-only
|
|
11
8
|
* tokens, a Filters sheet with editable rows and direct remove actions, Add
|
|
@@ -112,7 +109,7 @@ export interface MobilePowerSearchProps extends Omit<BaseProps<HTMLElement>, 'on
|
|
|
112
109
|
/** Validation status. */
|
|
113
110
|
status?: InputStatus;
|
|
114
111
|
/** How the status message is placed. @default 'attached' */
|
|
115
|
-
statusVariant?: FieldStatusVariant;
|
|
112
|
+
statusVariant?: FieldStatusVariant | 'tooltip';
|
|
116
113
|
/** Max display length for token values. @default 40 */
|
|
117
114
|
maxTokenLength?: number;
|
|
118
115
|
/** Max suggestions in string and entity value typeaheads. @default 10 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobilePowerSearch.d.ts","sourceRoot":"","sources":["../../src/MobilePowerSearch/MobilePowerSearch.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"MobilePowerSearch.d.ts","sourceRoot":"","sources":["../../src/MobilePowerSearch/MobilePowerSearch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,8 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* @file MobilePowerSearch.tsx
|
|
7
7
|
* @input Core PowerSearch config, filters and onChange (the same props as
|
|
8
|
-
* @astryxdesign/core PowerSearch); public
|
|
9
|
-
*
|
|
10
|
-
* RadioList, Text, TextInput, Token, Tooltip hooks, i18n, hooks —
|
|
11
|
-
* useAnnounce for every announcement — utils, Layout container-padding
|
|
12
|
-
* styles)
|
|
8
|
+
* @astryxdesign/core PowerSearch); public Core primitives and private Lab
|
|
9
|
+
* mobile-sheet confirmation and search-drag dismissal owners
|
|
13
10
|
* @output Exports MobilePowerSearch — Lab prototype of the touch PowerSearch
|
|
14
11
|
* flow: the whole field is one "Manage filters" trigger with display-only
|
|
15
12
|
* tokens, a Filters sheet with editable rows and direct remove actions, Add
|
|
@@ -80,20 +77,17 @@ import React, { useCallback, useEffect, useId, useImperativeHandle, useLayoutEff
|
|
|
80
77
|
import * as stylex from '@stylexjs/stylex';
|
|
81
78
|
import { BottomSheet } from '@astryxdesign/core/BottomSheet';
|
|
82
79
|
import { Button } from '@astryxdesign/core/Button';
|
|
83
|
-
import { Dialog } from '@astryxdesign/core/Dialog';
|
|
84
80
|
import { EmptyState } from '@astryxdesign/core/EmptyState';
|
|
85
81
|
import { Field, inputStatusBorderStyles, inputStatusFocusWithinStyles, inputStatusHoverShadowStyles, inputWrapperStyles } from '@astryxdesign/core/Field';
|
|
86
82
|
import { Heading } from '@astryxdesign/core/Heading';
|
|
87
83
|
import { Icon, renderIconSlot } from '@astryxdesign/core/Icon';
|
|
88
84
|
import { IconButton } from '@astryxdesign/core/IconButton';
|
|
89
|
-
import { Layout, LayoutContent, LayoutFooter } from '@astryxdesign/core/Layout';
|
|
90
85
|
import { containerPaddingInlineVarStyles } from '@astryxdesign/core/Layout/padding.stylex';
|
|
91
86
|
import { List, ListItem } from '@astryxdesign/core/List';
|
|
92
87
|
import { resolveOperatorLabel } from '@astryxdesign/core/PowerSearch';
|
|
93
88
|
import { formatFilterValue } from '@astryxdesign/core/PowerSearch/utils';
|
|
94
89
|
import { RadioList, RadioListItem } from '@astryxdesign/core/RadioList';
|
|
95
90
|
import { useSize } from '@astryxdesign/core/SizeContext';
|
|
96
|
-
import { Stack } from '@astryxdesign/core/Stack';
|
|
97
91
|
import { Text } from '@astryxdesign/core/Text';
|
|
98
92
|
import { TextInput } from '@astryxdesign/core/TextInput';
|
|
99
93
|
import { Token } from '@astryxdesign/core/Token';
|
|
@@ -103,6 +97,8 @@ import { useLocale, useTranslator } from '@astryxdesign/core/i18n';
|
|
|
103
97
|
import '@astryxdesign/core/theme/tokens.stylex';
|
|
104
98
|
import { colorVars, fontWeightVars, radiusVars, sizeVars, spacingVars, typeScaleVars, typographyVars } from '@astryxdesign/core/theme/tokens.stylex';
|
|
105
99
|
import { isImeKeyEvent, isRenderable, rtlStyles } from '@astryxdesign/core/utils';
|
|
100
|
+
import { MobileSheetConfirmation } from "../internal/MobileSheetConfirmation.js";
|
|
101
|
+
import { useDismissSearchOnTouchDrag } from "../internal/useDismissSearchOnTouchDrag.js";
|
|
106
102
|
import { MobilePowerSearchValueEditor } from "./MobilePowerSearchValueEditor.js";
|
|
107
103
|
import { createContentSearchSource, createFilterIdentities, fieldMatchesQuery, filterSignature, isSupportedOperator, nearestEditableIndex, resolveFilterIdentityIndex, useMobilePowerSearchConfig } from "./mobilePowerSearchUtils.js";
|
|
108
104
|
|
|
@@ -130,58 +126,6 @@ function PlusIcon(props) {
|
|
|
130
126
|
})]
|
|
131
127
|
});
|
|
132
128
|
}
|
|
133
|
-
function ClearFiltersConfirmation({
|
|
134
|
-
isOpen,
|
|
135
|
-
onOpenChange,
|
|
136
|
-
onConfirm
|
|
137
|
-
}) {
|
|
138
|
-
const titleId = useId();
|
|
139
|
-
const descriptionId = useId();
|
|
140
|
-
return /*#__PURE__*/_jsx(Dialog, {
|
|
141
|
-
isOpen: isOpen,
|
|
142
|
-
onOpenChange: onOpenChange,
|
|
143
|
-
purpose: "info",
|
|
144
|
-
role: "alertdialog",
|
|
145
|
-
"aria-labelledby": titleId,
|
|
146
|
-
"aria-describedby": descriptionId,
|
|
147
|
-
width: 400,
|
|
148
|
-
children: /*#__PURE__*/_jsx(Layout, {
|
|
149
|
-
content: /*#__PURE__*/_jsxs(LayoutContent, {
|
|
150
|
-
children: [/*#__PURE__*/_jsx(Heading, {
|
|
151
|
-
level: 2,
|
|
152
|
-
id: titleId,
|
|
153
|
-
children: "Clear all filters?"
|
|
154
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
155
|
-
type: "body",
|
|
156
|
-
color: "secondary",
|
|
157
|
-
id: descriptionId,
|
|
158
|
-
children: "This removes all editable filters from this search."
|
|
159
|
-
})]
|
|
160
|
-
}),
|
|
161
|
-
footer: /*#__PURE__*/_jsx(LayoutFooter, {
|
|
162
|
-
children: /*#__PURE__*/_jsxs(Stack, {
|
|
163
|
-
direction: "vertical",
|
|
164
|
-
gap: 4,
|
|
165
|
-
hAlign: "stretch",
|
|
166
|
-
children: [/*#__PURE__*/_jsx(Button, {
|
|
167
|
-
label: "Clear filters",
|
|
168
|
-
variant: "destructive",
|
|
169
|
-
size: "lg",
|
|
170
|
-
onClick: onConfirm,
|
|
171
|
-
xstyle: styles.confirmationAction
|
|
172
|
-
}), /*#__PURE__*/_jsx(Button, {
|
|
173
|
-
label: "Keep filters",
|
|
174
|
-
variant: "secondary",
|
|
175
|
-
size: "lg",
|
|
176
|
-
onClick: () => onOpenChange(false),
|
|
177
|
-
"data-autofocus": true,
|
|
178
|
-
xstyle: styles.confirmationAction
|
|
179
|
-
})]
|
|
180
|
-
})
|
|
181
|
-
})
|
|
182
|
-
})
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
129
|
const sizeStyles = {
|
|
186
130
|
sm: {
|
|
187
131
|
kAzted: "x1gdqauq",
|
|
@@ -253,10 +197,6 @@ const styles = {
|
|
|
253
197
|
trailingControlRow: {
|
|
254
198
|
kXwgrk: "x15zctf7",
|
|
255
199
|
$$css: true
|
|
256
|
-
},
|
|
257
|
-
confirmationAction: {
|
|
258
|
-
kzqmXN: "xh8yej3",
|
|
259
|
-
$$css: true
|
|
260
200
|
}
|
|
261
201
|
};
|
|
262
202
|
|
|
@@ -553,14 +493,7 @@ export function MobilePowerSearch({
|
|
|
553
493
|
|
|
554
494
|
// ------------------------------------------------------------------ focus --
|
|
555
495
|
|
|
556
|
-
const
|
|
557
|
-
const activeElement = document.activeElement;
|
|
558
|
-
const contentSearch = contentSearchRef.current?.querySelector('input');
|
|
559
|
-
const fieldSearch = fieldSearchRef.current?.querySelector('input');
|
|
560
|
-
if (activeElement === contentSearch || activeElement === fieldSearch) {
|
|
561
|
-
activeElement.blur();
|
|
562
|
-
}
|
|
563
|
-
}, []);
|
|
496
|
+
const fieldPickerDragProps = useDismissSearchOnTouchDrag(() => [contentSearchRef.current?.querySelector('input'), fieldSearchRef.current?.querySelector('input')]);
|
|
564
497
|
const focusPendingSheetTarget = useCallback(() => {
|
|
565
498
|
const target = pendingSheetFocusRef.current;
|
|
566
499
|
if (target == null) {
|
|
@@ -1541,8 +1474,7 @@ export function MobilePowerSearch({
|
|
|
1541
1474
|
}) : null]
|
|
1542
1475
|
}), /*#__PURE__*/_jsx("div", {
|
|
1543
1476
|
...scrollViewportProps,
|
|
1544
|
-
|
|
1545
|
-
onTouchMove: blurFieldPickerSearch,
|
|
1477
|
+
...fieldPickerDragProps,
|
|
1546
1478
|
children: /*#__PURE__*/_jsx("div", {
|
|
1547
1479
|
...scrollContentProps,
|
|
1548
1480
|
children: hasContentSearch ? contentResults.length > 0 ? /*#__PURE__*/_jsx(List, {
|
|
@@ -1789,10 +1721,14 @@ export function MobilePowerSearch({
|
|
|
1789
1721
|
})]
|
|
1790
1722
|
})]
|
|
1791
1723
|
})
|
|
1792
|
-
}), /*#__PURE__*/_jsx(
|
|
1724
|
+
}), /*#__PURE__*/_jsx(MobileSheetConfirmation, {
|
|
1793
1725
|
isOpen: isClearConfirmationOpen,
|
|
1794
1726
|
onOpenChange: setIsClearConfirmationOpen,
|
|
1795
|
-
|
|
1727
|
+
title: "Clear all filters?",
|
|
1728
|
+
description: "This removes all editable filters from this search.",
|
|
1729
|
+
actionLabel: "Clear filters",
|
|
1730
|
+
cancelLabel: "Keep filters",
|
|
1731
|
+
onAction: () => {
|
|
1796
1732
|
handleClearAll();
|
|
1797
1733
|
setIsClearConfirmationOpen(false);
|
|
1798
1734
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file MobileTokenizer.tsx
|
|
3
|
-
* @input
|
|
4
|
-
*
|
|
5
|
-
* Icon, Spinner, Text, TextInput, Token, VisuallyHidden, useAnnounce,
|
|
6
|
-
* useMergedRefs, useTooltip, useTranslator)
|
|
3
|
+
* @input Public @astryxdesign/core components and hooks, plus private Lab
|
|
4
|
+
* mobile-sheet confirmation and search-drag dismissal owners
|
|
7
5
|
* @output Exports MobileTokenizer — Lab prototype of the touch Tokenizer
|
|
8
|
-
* flow with
|
|
9
|
-
*
|
|
6
|
+
* flow with the inline-compatible closed trigger, a searchable draft-selection
|
|
7
|
+
* sheet, persistent Clear all / Save footer, dirty-dismiss confirmation,
|
|
8
|
+
* stable checkbox ordering, and progressive long-list rendering
|
|
10
9
|
* @position Lab (canary) stack layer 1: the touch sheet's user-experience
|
|
11
10
|
* pass happens here; Core's sheet presentation (`component:Tokenizer`
|
|
12
11
|
* DEC-3, FR16–FR24, AR6) is implemented but not exposed. The behaviors
|
|
@@ -25,7 +24,11 @@
|
|
|
25
24
|
* API mirrors Core Tokenizer (label/isLabelHidden/searchSource/value/onChange/
|
|
26
25
|
* change, renderItem, hasCreate, maxEntries) so graduation is an import swap.
|
|
27
26
|
* Lab deltas: the filter is a bordered TextInput (Core's PanelSearchInput is
|
|
28
|
-
* not exported), and
|
|
27
|
+
* not exported); row, Create, and Clear all changes stay in one draft until
|
|
28
|
+
* Save; the footer stays visible while searching; dirty dismissal asks before
|
|
29
|
+
* discarding; and directly dragging results blurs the search so the mobile
|
|
30
|
+
* keyboard leaves without clearing the query. There is no theming/spec contract
|
|
31
|
+
* yet.
|
|
29
32
|
*/
|
|
30
33
|
import type React from 'react';
|
|
31
34
|
import { type ReactNode } from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileTokenizer.d.ts","sourceRoot":"","sources":["../../src/MobileTokenizer/MobileTokenizer.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"MobileTokenizer.d.ts","sourceRoot":"","sources":["../../src/MobileTokenizer/MobileTokenizer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EASL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAclD,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAY/E,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,cAAc,IACtD;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAC,GACtB;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GACzB;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAC,GACzB;IAAC,IAAI,EAAE,SAAS,CAAA;CAAC,CAAC;AAEtB,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,IAAI,CAC1E,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACjE;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,MAAM,CAAC,EAAE;QAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC;IAClE;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAoMD,wBAAgB,eAAe,CAAC,CAAC,SAAS,cAAc,EAAE,EACxD,KAAK,EACL,aAAa,EACb,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,EACV,UAAkB,EAClB,SAAiB,EACjB,UAAU,EACV,YAAiB,EACjB,cAAkB,EAClB,UAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,MAAM,EACN,EAAE,EACF,SAAS,EACT,KAAK,EACL,YAAY,EAAE,aAAa,EAC3B,kBAAkB,EAAE,mBAAmB,EACvC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,YAAY,EACpB,GAAG,IAAI,EACR,EAAE,oBAAoB,CAAC,CAAC,CAAC,qBAwPzB;yBAvRe,eAAe"}
|