@buoy-gg/zustand 7.0.35 → 7.0.38

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 (64) hide show
  1. package/README.md +27 -5
  2. package/lib/commonjs/index.js +1 -105
  3. package/lib/commonjs/preset.js +1 -102
  4. package/lib/commonjs/zustand/components/ZustandActionButton.js +1 -118
  5. package/lib/commonjs/zustand/components/ZustandDetailViewToggle.js +1 -48
  6. package/lib/commonjs/zustand/components/ZustandEventFilterView.js +1 -43
  7. package/lib/commonjs/zustand/components/ZustandIcon.js +1 -18
  8. package/lib/commonjs/zustand/components/ZustandModal.js +1 -772
  9. package/lib/commonjs/zustand/components/ZustandStateChangeItem.js +1 -117
  10. package/lib/commonjs/zustand/components/ZustandStateDetailContent.js +1 -372
  11. package/lib/commonjs/zustand/components/ZustandStateInfoView.js +1 -488
  12. package/lib/commonjs/zustand/components/ZustandStoreBrowser.js +1 -204
  13. package/lib/commonjs/zustand/components/ZustandStoreDetailContent.js +1 -471
  14. package/lib/commonjs/zustand/components/ZustandStoreEditorScreen.js +1 -393
  15. package/lib/commonjs/zustand/hooks/useZustandStateChanges.js +1 -72
  16. package/lib/commonjs/zustand/sync/zustandSyncAdapter.js +1 -219
  17. package/lib/commonjs/zustand/utils/buoyZustandMiddleware.js +1 -284
  18. package/lib/commonjs/zustand/utils/editableState.js +1 -139
  19. package/lib/commonjs/zustand/utils/snapshotProvider.js +1 -209
  20. package/lib/commonjs/zustand/utils/testIDs.js +1 -82
  21. package/lib/commonjs/zustand/utils/zustandStateStore.js +1 -375
  22. package/lib/module/index.js +1 -90
  23. package/lib/module/preset.js +1 -98
  24. package/lib/module/zustand/components/ZustandActionButton.js +1 -114
  25. package/lib/module/zustand/components/ZustandDetailViewToggle.js +1 -43
  26. package/lib/module/zustand/components/ZustandEventFilterView.js +1 -39
  27. package/lib/module/zustand/components/ZustandIcon.js +1 -11
  28. package/lib/module/zustand/components/ZustandModal.js +1 -767
  29. package/lib/module/zustand/components/ZustandStateChangeItem.js +1 -113
  30. package/lib/module/zustand/components/ZustandStateDetailContent.js +1 -368
  31. package/lib/module/zustand/components/ZustandStateInfoView.js +1 -483
  32. package/lib/module/zustand/components/ZustandStoreBrowser.js +1 -200
  33. package/lib/module/zustand/components/ZustandStoreDetailContent.js +1 -469
  34. package/lib/module/zustand/components/ZustandStoreEditorScreen.js +1 -389
  35. package/lib/module/zustand/hooks/useZustandStateChanges.js +1 -68
  36. package/lib/module/zustand/sync/zustandSyncAdapter.js +1 -216
  37. package/lib/module/zustand/utils/buoyZustandMiddleware.js +1 -278
  38. package/lib/module/zustand/utils/editableState.js +1 -131
  39. package/lib/module/zustand/utils/snapshotProvider.js +1 -209
  40. package/lib/module/zustand/utils/testIDs.js +1 -74
  41. package/lib/module/zustand/utils/zustandStateStore.js +1 -371
  42. package/lib/typescript/zustand/sync/zustandSyncAdapter.d.ts +33 -0
  43. package/package.json +4 -4
  44. package/lib/typescript/index.d.ts.map +0 -1
  45. package/lib/typescript/preset.d.ts.map +0 -1
  46. package/lib/typescript/zustand/components/ZustandActionButton.d.ts.map +0 -1
  47. package/lib/typescript/zustand/components/ZustandDetailViewToggle.d.ts.map +0 -1
  48. package/lib/typescript/zustand/components/ZustandEventFilterView.d.ts.map +0 -1
  49. package/lib/typescript/zustand/components/ZustandIcon.d.ts.map +0 -1
  50. package/lib/typescript/zustand/components/ZustandModal.d.ts.map +0 -1
  51. package/lib/typescript/zustand/components/ZustandStateChangeItem.d.ts.map +0 -1
  52. package/lib/typescript/zustand/components/ZustandStateDetailContent.d.ts.map +0 -1
  53. package/lib/typescript/zustand/components/ZustandStateInfoView.d.ts.map +0 -1
  54. package/lib/typescript/zustand/components/ZustandStoreBrowser.d.ts.map +0 -1
  55. package/lib/typescript/zustand/components/ZustandStoreDetailContent.d.ts.map +0 -1
  56. package/lib/typescript/zustand/components/ZustandStoreEditorScreen.d.ts.map +0 -1
  57. package/lib/typescript/zustand/hooks/useZustandStateChanges.d.ts.map +0 -1
  58. package/lib/typescript/zustand/sync/zustandSyncAdapter.d.ts.map +0 -1
  59. package/lib/typescript/zustand/types/index.d.ts.map +0 -1
  60. package/lib/typescript/zustand/utils/buoyZustandMiddleware.d.ts.map +0 -1
  61. package/lib/typescript/zustand/utils/editableState.d.ts.map +0 -1
  62. package/lib/typescript/zustand/utils/snapshotProvider.d.ts.map +0 -1
  63. package/lib/typescript/zustand/utils/testIDs.d.ts.map +0 -1
  64. package/lib/typescript/zustand/utils/zustandStateStore.d.ts.map +0 -1
@@ -1,90 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * @buoy-gg/zustand
5
- *
6
- * Zustand Store DevTools for React Native
7
- *
8
- * PUBLIC API - Only these exports are supported for external use.
9
- *
10
- * @example Recommended setup (one line, zero store modifications)
11
- * ```tsx
12
- * import { watchStores } from '@buoy-gg/zustand';
13
- * import { useCounterStore } from './stores/counter';
14
- * import { useAuthStore } from './stores/auth';
15
- *
16
- * // One call, anywhere at module scope or in your root layout:
17
- * watchStores({
18
- * counterStore: useCounterStore,
19
- * authStore: useAuthStore,
20
- * });
21
- * ```
22
- *
23
- * @example Advanced: middleware for extra detail (partial + timing)
24
- * ```tsx
25
- * import { create } from 'zustand';
26
- * import { buoyDevTools } from '@buoy-gg/zustand';
27
- *
28
- * const useCounterStore = create(
29
- * buoyDevTools(
30
- * (set) => ({
31
- * count: 0,
32
- * increment: () => set((s) => ({ count: s.count + 1 })),
33
- * }),
34
- * { name: 'counterStore' }
35
- * )
36
- * );
37
- * ```
38
- */
39
-
40
- // Side-effect: registers the Time Machine snapshot provider
41
- import "./zustand/utils/snapshotProvider";
42
-
43
- // =============================================================================
44
- // PRESET (Primary entry point for FloatingDevTools)
45
- // =============================================================================
46
- export { zustandToolPreset, createZustandTool } from "./preset";
47
-
48
- // =============================================================================
49
- // WATCH STORES (Recommended — non-intrusive, subscribe-only)
50
- // =============================================================================
51
- export { watchStores } from "./zustand/utils/buoyZustandMiddleware";
52
-
53
- // =============================================================================
54
- // MIDDLEWARE (Advanced — wraps setState for partial + timing capture)
55
- // =============================================================================
56
- export { buoyDevTools } from "./zustand/utils/buoyZustandMiddleware";
57
-
58
- // =============================================================================
59
- // UTILITIES
60
- // =============================================================================
61
- export { isStoreInstrumented } from "./zustand/utils/buoyZustandMiddleware";
62
-
63
- // =============================================================================
64
- // HOOKS (For consuming Zustand state data)
65
- // =============================================================================
66
- export { useZustandStateChanges } from "./zustand/hooks/useZustandStateChanges";
67
- // =============================================================================
68
- // COMPONENTS (For custom UI implementations)
69
- // =============================================================================
70
- // `ZustandToolView` is the same tool rendered inline (header bar + body + footer)
71
- // instead of inside a JsModal — for hosts that show tools in a panel.
72
- export { ZustandModal, ZustandToolView } from "./zustand/components/ZustandModal";
73
- export { ZustandStateChangeItem } from "./zustand/components/ZustandStateChangeItem";
74
- export { ZustandStateDetailContent, ZustandStateDetailFooter } from "./zustand/components/ZustandStateDetailContent";
75
- export { ZustandIcon, ZUSTAND_ICON_COLOR } from "./zustand/components/ZustandIcon";
76
-
77
- // =============================================================================
78
- // EXTERNAL SYNC (Adapter for @buoy-gg/external-sync's useExternalSync)
79
- // =============================================================================
80
- export { zustandSyncAdapter } from "./zustand/sync/zustandSyncAdapter";
81
-
82
- // =============================================================================
83
- // TYPES
84
- // =============================================================================
85
-
86
- // =============================================================================
87
- // INTERNAL EXPORTS (For @buoy-gg/* packages only - not part of public API)
88
- // =============================================================================
89
- /** @internal */
90
- export { zustandStateStore } from "./zustand/utils/zustandStateStore";
1
+ "use strict";import"./zustand/utils/snapshotProvider";export{zustandToolPreset,createZustandTool}from"./preset";export{watchStores}from"./zustand/utils/buoyZustandMiddleware";export{buoyDevTools}from"./zustand/utils/buoyZustandMiddleware";export{isStoreInstrumented}from"./zustand/utils/buoyZustandMiddleware";export{useZustandStateChanges}from"./zustand/hooks/useZustandStateChanges";export{ZustandModal,ZustandToolView}from"./zustand/components/ZustandModal";export{ZustandStateChangeItem}from"./zustand/components/ZustandStateChangeItem";export{ZustandStateDetailContent,ZustandStateDetailFooter}from"./zustand/components/ZustandStateDetailContent";export{ZustandIcon,ZUSTAND_ICON_COLOR}from"./zustand/components/ZustandIcon";export{zustandSyncAdapter}from"./zustand/sync/zustandSyncAdapter";export{zustandStateStore}from"./zustand/utils/zustandStateStore";
@@ -1,98 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * Pre-configured Zustand DevTools preset for FloatingDevTools
5
- *
6
- * ZERO-CONFIG: This preset is auto-discovered by FloatingDevTools!
7
- * Just install @buoy-gg/zustand and wrap your stores with buoyDevTools().
8
- *
9
- * @example Automatic (recommended)
10
- * ```tsx
11
- * import { create } from 'zustand';
12
- * import { buoyDevTools } from '@buoy-gg/zustand';
13
- *
14
- * const useCounterStore = create(
15
- * buoyDevTools(
16
- * (set) => ({ count: 0, increment: () => set((s) => ({ count: s.count + 1 })) }),
17
- * { name: 'counterStore' }
18
- * )
19
- * );
20
- *
21
- * // The Zustand tool appears automatically in FloatingDevTools!
22
- * <FloatingDevTools />
23
- * ```
24
- *
25
- * @example Manual (only for custom configuration)
26
- * ```tsx
27
- * import { createZustandTool } from '@buoy-gg/zustand';
28
- *
29
- * const customZustandTool = createZustandTool({
30
- * name: "STATE",
31
- * iconColor: "#463B3F",
32
- * });
33
- *
34
- * <FloatingDevTools apps={[customZustandTool]} />
35
- * ```
36
- */
37
-
38
- import { ZustandModal } from "./zustand/components/ZustandModal";
39
- import { ZustandIcon } from "./zustand/components/ZustandIcon";
40
-
41
- /**
42
- * Pre-configured Zustand DevTools preset for FloatingDevTools.
43
- * Includes:
44
- * - Live state change monitoring
45
- * - State inspection (JSON viewer)
46
- * - State diff visualization (tree + split)
47
- * - Filter by store name
48
- * - Changed keys tracking
49
- */
50
- import { jsx as _jsx } from "react/jsx-runtime";
51
- export const zustandToolPreset = {
52
- id: "zustand",
53
- name: "ZUSTAND",
54
- description: "Zustand store & state inspector",
55
- slot: "both",
56
- icon: ({
57
- size
58
- }) => /*#__PURE__*/_jsx(ZustandIcon, {
59
- size: size
60
- }),
61
- component: ZustandModal,
62
- props: {
63
- enableSharedModalDimensions: false
64
- }
65
- };
66
-
67
- /**
68
- * Create a custom Zustand DevTools configuration.
69
- * Use this if you want to override default settings.
70
- *
71
- * @example
72
- * ```tsx
73
- * import { createZustandTool } from '@buoy-gg/zustand';
74
- *
75
- * const myZustandTool = createZustandTool({
76
- * name: "STATE",
77
- * iconColor: "#463B3F",
78
- * });
79
- * ```
80
- */
81
- export function createZustandTool(options) {
82
- return {
83
- id: options?.id || "zustand",
84
- name: options?.name || "ZUSTAND",
85
- description: options?.description || "Zustand store & state inspector",
86
- slot: "both",
87
- icon: ({
88
- size
89
- }) => /*#__PURE__*/_jsx(ZustandIcon, {
90
- size: size,
91
- color: options?.iconColor
92
- }),
93
- component: ZustandModal,
94
- props: {
95
- enableSharedModalDimensions: options?.enableSharedModalDimensions !== undefined ? options.enableSharedModalDimensions : false
96
- }
97
- };
98
- }
1
+ "use strict";import{ZustandModal}from"./zustand/components/ZustandModal";import{ZustandIcon}from"./zustand/components/ZustandIcon";import{jsx as _jsx}from"react/jsx-runtime";export const zustandToolPreset={id:"zustand",name:"ZUSTAND",description:"Zustand store & state inspector",slot:"both",icon:({size:o})=>_jsx(ZustandIcon,{size:o}),component:ZustandModal,props:{enableSharedModalDimensions:!1}};export function createZustandTool(o){return{id:o?.id||"zustand",name:o?.name||"ZUSTAND",description:o?.description||"Zustand store & state inspector",slot:"both",icon:({size:n})=>_jsx(ZustandIcon,{size:n,color:o?.iconColor}),component:ZustandModal,props:{enableSharedModalDimensions:void 0!==o?.enableSharedModalDimensions&&o.enableSharedModalDimensions}}}
@@ -1,114 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * ZustandActionButton
5
- *
6
- * Generic action button for Zustand DevTools footer.
7
- * Mirrors ReduxActionButton.tsx
8
- */
9
-
10
- import { TouchableOpacity, Text, View, StyleSheet } from "react-native";
11
- import { night, monoFont } from "@buoy-gg/shared-ui";
12
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
- const buttonConfigs = {
14
- copy: {
15
- color: night.color.accent,
16
- backgroundColor: night.color.accentSoft,
17
- borderColor: night.color.accentBorder,
18
- textColor: night.color.accent
19
- },
20
- reset: {
21
- color: night.color.warning,
22
- backgroundColor: night.color.warningSoft,
23
- borderColor: night.color.warning + "40",
24
- textColor: night.color.warning
25
- },
26
- clear: {
27
- color: night.color.danger,
28
- backgroundColor: night.color.dangerSoft,
29
- borderColor: night.color.danger + "40",
30
- textColor: night.color.danger
31
- },
32
- jump: {
33
- color: night.color.warning,
34
- backgroundColor: night.color.warningSoft,
35
- borderColor: night.color.warning + "40",
36
- textColor: night.color.warning
37
- }
38
- };
39
- export function ZustandActionButton({
40
- onPress,
41
- text,
42
- type,
43
- disabled = false,
44
- testID
45
- }) {
46
- const config = buttonConfigs[type];
47
- return /*#__PURE__*/_jsxs(TouchableOpacity, {
48
- disabled: disabled,
49
- onPress: onPress,
50
- style: [styles.button, {
51
- backgroundColor: disabled ? night.color.textTertiary + "1A" : config.backgroundColor,
52
- borderColor: disabled ? night.color.textTertiary + "33" : config.borderColor,
53
- opacity: disabled ? 0.5 : 1
54
- }],
55
- activeOpacity: 0.7,
56
- testID: testID,
57
- accessibilityRole: "button",
58
- accessibilityLabel: text,
59
- accessibilityState: {
60
- disabled
61
- },
62
- children: [/*#__PURE__*/_jsx(View, {
63
- style: [styles.dot, {
64
- backgroundColor: disabled ? night.color.textTertiary : config.color
65
- }]
66
- }), /*#__PURE__*/_jsx(Text, {
67
- style: [styles.text, {
68
- color: disabled ? night.color.textTertiary : config.textColor
69
- }],
70
- children: text
71
- })]
72
- });
73
- }
74
- const styles = StyleSheet.create({
75
- button: {
76
- flexDirection: "row",
77
- alignItems: "center",
78
- justifyContent: "center",
79
- borderRadius: 6,
80
- borderWidth: 1,
81
- paddingHorizontal: 12,
82
- paddingVertical: 6,
83
- height: 25,
84
- minWidth: 80,
85
- shadowOffset: {
86
- width: 0,
87
- height: 1
88
- },
89
- shadowOpacity: 0.2,
90
- shadowRadius: 2,
91
- elevation: 2
92
- },
93
- dot: {
94
- width: 5,
95
- height: 5,
96
- borderRadius: 3,
97
- marginRight: 6,
98
- shadowColor: night.color.text,
99
- shadowOffset: {
100
- width: 0,
101
- height: 0
102
- },
103
- shadowOpacity: 0.6,
104
- shadowRadius: 2
105
- },
106
- text: {
107
- fontSize: 10,
108
- fontWeight: "600",
109
- letterSpacing: 0.5,
110
- textTransform: "uppercase",
111
- fontFamily: monoFont,
112
- height: 12
113
- }
114
- });
1
+ "use strict";import{TouchableOpacity,Text,View,StyleSheet}from"react-native";import{night,monoFont}from"@buoy-gg/shared-ui";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const buttonConfigs={copy:{color:night.color.accent,backgroundColor:night.color.accentSoft,borderColor:night.color.accentBorder,textColor:night.color.accent},reset:{color:night.color.warning,backgroundColor:night.color.warningSoft,borderColor:night.color.warning+"40",textColor:night.color.warning},clear:{color:night.color.danger,backgroundColor:night.color.dangerSoft,borderColor:night.color.danger+"40",textColor:night.color.danger},jump:{color:night.color.warning,backgroundColor:night.color.warningSoft,borderColor:night.color.warning+"40",textColor:night.color.warning}};export function ZustandActionButton({onPress:o,text:t,type:r,disabled:e=!1,testID:i}){const n=buttonConfigs[r];return _jsxs(TouchableOpacity,{disabled:e,onPress:o,style:[styles.button,{backgroundColor:e?night.color.textTertiary+"1A":n.backgroundColor,borderColor:e?night.color.textTertiary+"33":n.borderColor,opacity:e?.5:1}],activeOpacity:.7,testID:i,accessibilityRole:"button",accessibilityLabel:t,accessibilityState:{disabled:e},children:[_jsx(View,{style:[styles.dot,{backgroundColor:e?night.color.textTertiary:n.color}]}),_jsx(Text,{style:[styles.text,{color:e?night.color.textTertiary:n.textColor}],children:t})]})}const styles=StyleSheet.create({button:{flexDirection:"row",alignItems:"center",justifyContent:"center",borderRadius:6,borderWidth:1,paddingHorizontal:12,paddingVertical:6,height:25,minWidth:80,shadowOffset:{width:0,height:1},shadowOpacity:.2,shadowRadius:2,elevation:2},dot:{width:5,height:5,borderRadius:3,marginRight:6,shadowColor:night.color.text,shadowOffset:{width:0,height:0},shadowOpacity:.6,shadowRadius:2},text:{fontSize:10,fontWeight:"600",letterSpacing:.5,textTransform:"uppercase",fontFamily:monoFont,height:12}});
@@ -1,43 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * ZustandDetailViewToggle
5
- *
6
- * Three-card toggle for switching between Change, State, and Diff views.
7
- * The cards themselves are the shared `DetailViewToggle`; this file owns
8
- * the zustand view list and testID prefix.
9
- */
10
-
11
- import React, { memo } from "react";
12
- import { DetailViewToggle, FileText, Database, GitBranch } from "@buoy-gg/shared-ui";
13
- import { jsx as _jsx } from "react/jsx-runtime";
14
- const VIEWS = [{
15
- key: "change",
16
- label: "CHANGE",
17
- description: "View change details",
18
- icon: FileText
19
- }, {
20
- key: "state",
21
- label: "STATE",
22
- description: "View current state",
23
- icon: Database
24
- }, {
25
- key: "diff",
26
- label: "DIFF",
27
- description: "Compare changes",
28
- icon: GitBranch
29
- }];
30
- const DIFF_DISABLED = ["diff"];
31
- export const ZustandDetailViewToggle = /*#__PURE__*/memo(function ZustandDetailViewToggle({
32
- activeView,
33
- onViewChange,
34
- diffDisabled = false
35
- }) {
36
- return /*#__PURE__*/_jsx(DetailViewToggle, {
37
- views: VIEWS,
38
- activeView: activeView,
39
- onViewChange: onViewChange,
40
- disabledKeys: diffDisabled ? DIFF_DISABLED : undefined,
41
- testIDPrefix: "buoy-zustand"
42
- });
43
- });
1
+ "use strict";import React,{memo}from"react";import{DetailViewToggle,FileText,Database,GitBranch}from"@buoy-gg/shared-ui";import{jsx as _jsx}from"react/jsx-runtime";const VIEWS=[{key:"change",label:"CHANGE",description:"View change details",icon:FileText},{key:"state",label:"STATE",description:"View current state",icon:Database},{key:"diff",label:"DIFF",description:"Compare changes",icon:GitBranch}],DIFF_DISABLED=["diff"];export const ZustandDetailViewToggle=memo(function({activeView:e,onViewChange:i,diffDisabled:t=!1}){return _jsx(DetailViewToggle,{views:VIEWS,activeView:e,onViewChange:i,disabledKeys:t?DIFF_DISABLED:void 0,testIDPrefix:"buoy-zustand"})});
@@ -1,39 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * ZustandEventFilterView
5
- *
6
- * The shared `EntityFilterView` with zustand's nouns: registered stores you
7
- * can tap to hide, active store-name patterns, and how it works.
8
- */
9
-
10
- import { useMemo } from "react";
11
- import { EntityFilterView } from "@buoy-gg/shared-ui";
12
- import { zustandStateStore } from "../utils/zustandStateStore";
13
- import { ZUSTAND_TEST_ID, slugForTestID } from "../utils/testIDs";
14
- import { jsx as _jsx } from "react/jsx-runtime";
15
- const EXAMPLES = ["• auth → hides authStore from stores & events", "• temp → hides tempStore, tempUserStore", "• cart → hides cartStore from both tabs"];
16
- export function ZustandEventFilterView({
17
- ignoredPatterns,
18
- onTogglePattern,
19
- onAddPattern,
20
- stores
21
- }) {
22
- const entities = useMemo(() => stores.map(store => ({
23
- name: store.name,
24
- color: zustandStateStore.getStoreColor(store.name)
25
- })), [stores]);
26
- return /*#__PURE__*/_jsx(EntityFilterView, {
27
- entities: entities,
28
- ignoredPatterns: ignoredPatterns,
29
- onTogglePattern: onTogglePattern,
30
- onAddPattern: onAddPattern,
31
- entityNoun: "STORES",
32
- entitySingular: "store",
33
- entityKey: "store",
34
- testIDPrefix: ZUSTAND_TEST_ID,
35
- slug: slugForTestID,
36
- howItWorks: "Patterns hide matching stores from both the Stores tab and the Events tab. Tap a store above to quickly add it as a filter.",
37
- examples: EXAMPLES
38
- });
39
- }
1
+ "use strict";import{useMemo}from"react";import{EntityFilterView}from"@buoy-gg/shared-ui";import{zustandStateStore}from"../utils/zustandStateStore";import{ZUSTAND_TEST_ID,slugForTestID}from"../utils/testIDs";import{jsx as _jsx}from"react/jsx-runtime";const EXAMPLES=["• auth → hides authStore from stores & events","• temp → hides tempStore, tempUserStore","• cart → hides cartStore from both tabs"];export function ZustandEventFilterView({ignoredPatterns:t,onTogglePattern:e,onAddPattern:r,stores:o}){const s=useMemo(()=>o.map(t=>({name:t.name,color:zustandStateStore.getStoreColor(t.name)})),[o]);return _jsx(EntityFilterView,{entities:s,ignoredPatterns:t,onTogglePattern:e,onAddPattern:r,entityNoun:"STORES",entitySingular:"store",entityKey:"store",testIDPrefix:ZUSTAND_TEST_ID,slug:slugForTestID,howItWorks:"Patterns hide matching stores from both the Stores tab and the Events tab. Tap a store above to quickly add it as a filter.",examples:EXAMPLES})}
@@ -1,11 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * ZustandIcon — re-exported from the Buoy Icon Format.
5
- *
6
- * The artwork lives in shared/icons/zustand.json and is generated into
7
- * @buoy-gg/floating-tools-core, so React Native, the desktop dashboard and
8
- * Flutter all render the same drawing. Edit the JSON, then `pnpm icons`.
9
- */
10
-
11
- export { ZustandIcon, ZUSTAND_ICON_COLOR } from "@buoy-gg/shared-ui";
1
+ "use strict";export{ZustandIcon,ZUSTAND_ICON_COLOR}from"@buoy-gg/shared-ui";