@texturehq/edges 1.13.0 → 1.13.2

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/styles.css CHANGED
@@ -74,6 +74,7 @@
74
74
  --spacing-8: 2rem;
75
75
  --spacing-9: 2.25rem;
76
76
  --spacing-10: 2.5rem;
77
+ --spacing-11: 2.75rem;
77
78
  --spacing-12: 3rem;
78
79
  --spacing-14: 3.5rem;
79
80
  --spacing-16: 4rem;
@@ -1251,8 +1252,8 @@
1251
1252
  .inset-0 {
1252
1253
  inset: var(--spacing-0);
1253
1254
  }
1254
- .inset-y-\[1px\] {
1255
- inset-block: 1px;
1255
+ .inset-y-\[2px\] {
1256
+ inset-block: 2px;
1256
1257
  }
1257
1258
  .start-1 {
1258
1259
  inset-inline-start: var(--spacing-1);
@@ -1308,8 +1309,8 @@
1308
1309
  .right-8 {
1309
1310
  right: var(--spacing-8);
1310
1311
  }
1311
- .right-\[1px\] {
1312
- right: 1px;
1312
+ .right-\[2px\] {
1313
+ right: 2px;
1313
1314
  }
1314
1315
  .-bottom-2 {
1315
1316
  bottom: calc(var(--spacing-2) * -1);
@@ -1800,6 +1801,9 @@
1800
1801
  .w-10 {
1801
1802
  width: var(--spacing-10);
1802
1803
  }
1804
+ .w-11 {
1805
+ width: var(--spacing-11);
1806
+ }
1803
1807
  .w-12 {
1804
1808
  width: var(--spacing-12);
1805
1809
  }
@@ -2534,9 +2538,9 @@
2534
2538
  border-top-left-radius: var(--radius-sm);
2535
2539
  border-bottom-left-radius: var(--radius-sm);
2536
2540
  }
2537
- .rounded-r-\[calc\(var\(--control-border-radius\)-1px\)\] {
2538
- border-top-right-radius: calc(var(--control-border-radius) - 1px);
2539
- border-bottom-right-radius: calc(var(--control-border-radius) - 1px);
2541
+ .rounded-r-\[calc\(var\(--control-border-radius\)-2px\)\] {
2542
+ border-top-right-radius: calc(var(--control-border-radius) - 2px);
2543
+ border-bottom-right-radius: calc(var(--control-border-radius) - 2px);
2540
2544
  }
2541
2545
  .rounded-r-sm {
2542
2546
  border-top-right-radius: var(--radius-sm);
@@ -2676,6 +2680,9 @@
2676
2680
  border-color: color-mix(in oklab, var(--color-border-default) 60%, transparent);
2677
2681
  }
2678
2682
  }
2683
+ .border-border-focus {
2684
+ border-color: var(--color-border-focus);
2685
+ }
2679
2686
  .border-border-input {
2680
2687
  border-color: var(--color-border-input);
2681
2688
  }
@@ -3125,6 +3132,9 @@
3125
3132
  .p-1 {
3126
3133
  padding: var(--spacing-1);
3127
3134
  }
3135
+ .p-1\.5 {
3136
+ padding: calc(var(--spacing) * 1.5);
3137
+ }
3128
3138
  .p-2 {
3129
3139
  padding: var(--spacing-2);
3130
3140
  }
@@ -3206,6 +3216,9 @@
3206
3216
  .px-px {
3207
3217
  padding-inline: 1px;
3208
3218
  }
3219
+ .py-0 {
3220
+ padding-block: var(--spacing-0);
3221
+ }
3209
3222
  .py-0\.5 {
3210
3223
  padding-block: calc(var(--spacing) * 0.5);
3211
3224
  }
@@ -3734,6 +3747,14 @@
3734
3747
  --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
3735
3748
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3736
3749
  }
3750
+ .shadow-\[inset_0_0_0_1px_var\(--color-border-focus\)\] {
3751
+ --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--color-border-focus));
3752
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3753
+ }
3754
+ .shadow-\[inset_0_0_0_1px_var\(--color-feedback-error-border\)\] {
3755
+ --tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--color-feedback-error-border));
3756
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3757
+ }
3737
3758
  .shadow-\[inset_0_1px_0_0_theme\(colors\.gray\.600\)\] {
3738
3759
  --tw-shadow: inset 0 1px 0 0 var(--tw-shadow-color, #4b5563);
3739
3760
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -3937,6 +3958,10 @@
3937
3958
  .forced-color-adjust-none {
3938
3959
  forced-color-adjust: none;
3939
3960
  }
3961
+ .\!outline-none {
3962
+ --tw-outline-style: none !important;
3963
+ outline-style: none !important;
3964
+ }
3940
3965
  .outline-none {
3941
3966
  --tw-outline-style: none;
3942
3967
  outline-style: none;
@@ -4481,6 +4506,13 @@
4481
4506
  }
4482
4507
  }
4483
4508
  }
4509
+ .hover\:decoration-current {
4510
+ &:hover {
4511
+ @media (hover: hover) {
4512
+ text-decoration-color: currentcolor;
4513
+ }
4514
+ }
4515
+ }
4484
4516
  .hover\:decoration-text-link-hover {
4485
4517
  &:hover {
4486
4518
  @media (hover: hover) {
@@ -5190,9 +5222,9 @@
5190
5222
  padding-block: var(--spacing-6);
5191
5223
  }
5192
5224
  }
5193
- .md\:pt-24 {
5225
+ .md\:pt-12 {
5194
5226
  @media (width >= 48rem) {
5195
- padding-top: var(--spacing-24);
5227
+ padding-top: var(--spacing-12);
5196
5228
  }
5197
5229
  }
5198
5230
  .md\:pb-28 {
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.13.0",
3
- "generatedAt": "2025-10-26T01:11:39.875Z",
2
+ "version": "1.13.2",
3
+ "generatedAt": "2025-10-28T18:47:55.359Z",
4
4
  "categories": {
5
5
  "hooks": {
6
6
  "description": "React hooks for common functionality like breakpoints, debouncing, local storage, and media queries",
@@ -26,6 +26,20 @@
26
26
  "category": "hooks",
27
27
  "file": "hooks/useChartExport.ts"
28
28
  },
29
+ {
30
+ "name": "useClientDataControls",
31
+ "type": "function",
32
+ "description": "useClientDataControls Client-side hook for filtering, sorting, searching, and faceting data. Uses memoization to avoid unnecessary recomputation. Operations are applied in this order: 1. Search (fuzzy or exact matching) 2. Filter (structured conditions) 3. Facet computation (on filtered data) 4. Sort ```tsx const { data, facetCounts, resultCount } = useClientDataControls({ data: rawData, filters: createFilters([ createFilter('department', 'in', ['Engineering', 'Sales']) ]), sort: { field: 'name', direction: 'asc' }, search: { query: searchQuery, fields: ['name', 'email'] }, facetConfigs: [ { field: 'department', label: 'Department' }, { field: 'status', label: 'Status' } ] }); ```",
33
+ "category": "hooks",
34
+ "file": "hooks/useClientDataControls.ts"
35
+ },
36
+ {
37
+ "name": "useDataControls",
38
+ "type": "function",
39
+ "description": "useDataControls Unified hook for managing data filtering, sorting, searching, and faceting. Supports both client-side and server-side modes. **Client Mode:** - Processes data locally using pure functions - Computes facet counts automatically - Best for datasets < 5000 rows **Server Mode:** - Notifies parent when state changes (debounced for search) - Passes through server-provided data and counts - Best for large datasets or complex queries ```tsx const { data, facetCounts, resultCount } = useDataControls({ mode: 'client', data: rawData, filters: createFilters([...]), sort: { field: 'name', direction: 'asc' }, search: { query: searchQuery, fields: ['name', 'email'] }, facetConfigs: [{ field: 'department', label: 'Department' }] }); ``` ```tsx const { data, facetCounts, resultCount } = useDataControls({ mode: 'server', data: serverData, // Already filtered filters, sort, search, resultCount: totalCount, facetCounts: serverFacets, onStateChange: (state) => refetch(state) }); ```",
40
+ "category": "hooks",
41
+ "file": "hooks/useDataControls.ts"
42
+ },
29
43
  {
30
44
  "name": "useDebounce",
31
45
  "type": "function",
@@ -60,6 +74,13 @@
60
74
  "description": "Hook to check if a media query matches the current viewport ```tsx const isMobile = useMediaQuery('(max-width: 767px)'); const prefersReducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)'); const isLandscape = useMediaQuery('(orientation: landscape)'); ```",
61
75
  "category": "hooks",
62
76
  "file": "hooks/useMediaQuery.ts"
77
+ },
78
+ {
79
+ "name": "useServerDataControls",
80
+ "type": "function",
81
+ "description": "useServerDataControls Server-side hook that notifies the parent when filter/sort/search state changes. Search queries are debounced to avoid excessive API calls. This hook doesn't manipulate data - it just provides a clean way to: 1. Debounce search input 2. Notify when any state changes 3. Trigger server refetch ```tsx const [filters, setFilters] = useState(null); const [sort, setSort] = useState({ field: 'name', direction: 'asc' }); const [search, setSearch] = useState({ query: '', fields: ['name'] }); useServerDataControls({ filters, sort, search, onStateChange: (state) => { // Refetch data with new parameters refetch({ filters: state.filters, sort: state.sort, search: state.search?.query }); } }); ```",
82
+ "category": "hooks",
83
+ "file": "hooks/useServerDataControls.ts"
63
84
  }
64
85
  ]
65
86
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@texturehq/edges",
3
- "version": "1.13.0",
3
+ "version": "1.13.2",
4
4
  "author": "Nicholas Brown <nick@texturehq.com>",
5
5
  "description": "A shared component library for Texture",
6
6
  "type": "module",
@@ -64,7 +64,7 @@
64
64
  },
65
65
  "dependencies": {
66
66
  "@phosphor-icons/react": "^2.1.7",
67
- "@tanstack/react-virtual": "^3.10.8",
67
+ "@tanstack/react-virtual": "^3.13.12",
68
68
  "@tiptap/core": "^3.4.5",
69
69
  "@tiptap/extension-link": "^3.4.5",
70
70
  "@tiptap/pm": "^3.4.5",
@@ -87,6 +87,7 @@
87
87
  "file-saver": "^2.0.5",
88
88
  "filestack-react": "^6.0.0",
89
89
  "framer-motion": "^12.23.18",
90
+ "fuse.js": "^7.0.0",
90
91
  "lucide-react": "^0.544.0",
91
92
  "luxon": "^3.4.4",
92
93
  "mapbox-gl": "3.7.0",