@texturehq/edges 1.12.2 → 1.13.1
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/components.manifest.json +43 -30
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +587 -23
- package/dist/index.d.ts +587 -23
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/{server-8T44SFVa.d.cts → server-BV15KAF4.d.cts} +1 -1
- package/dist/{server-8T44SFVa.d.ts → server-BV15KAF4.d.ts} +1 -1
- package/dist/server.cjs +1 -1
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/styles/utilities.css +2 -2
- package/dist/styles.css +40 -14
- package/dist/utilities.manifest.json +30 -2
- package/package.json +3 -1
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
outline: none;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
/* Ensure focus-visible still works for interactive elements */
|
|
32
|
-
:focus-visible {
|
|
31
|
+
/* Ensure focus-visible still works for interactive elements that don't have custom focus styles */
|
|
32
|
+
:focus-visible:not(input):not(textarea):not(select) {
|
|
33
33
|
outline: 2px solid var(--color-action-default);
|
|
34
34
|
outline-offset: 2px;
|
|
35
35
|
}
|
package/dist/styles.css
CHANGED
|
@@ -62,7 +62,6 @@
|
|
|
62
62
|
--color-brand-light: #f7f7ff;
|
|
63
63
|
--color-brand-dark: #363ccb;
|
|
64
64
|
--color-brand-background: #f6f7ff;
|
|
65
|
-
--color-neutral-white: #ffffff;
|
|
66
65
|
--color-neutral-black: #000000;
|
|
67
66
|
--spacing-0: 0px;
|
|
68
67
|
--spacing-1: 0.25rem;
|
|
@@ -1037,7 +1036,7 @@
|
|
|
1037
1036
|
[role="dialog"], [role="menu"], [role="listbox"], [data-react-aria-dialog], [data-react-aria-modal] {
|
|
1038
1037
|
outline: none;
|
|
1039
1038
|
}
|
|
1040
|
-
:focus-visible {
|
|
1039
|
+
:focus-visible:not(input):not(textarea):not(select) {
|
|
1041
1040
|
outline: 2px solid var(--color-action-default);
|
|
1042
1041
|
outline-offset: 2px;
|
|
1043
1042
|
}
|
|
@@ -1282,8 +1281,8 @@
|
|
|
1282
1281
|
.top-20 {
|
|
1283
1282
|
top: var(--spacing-20);
|
|
1284
1283
|
}
|
|
1285
|
-
.top-\[
|
|
1286
|
-
top:
|
|
1284
|
+
.top-\[2rem\] {
|
|
1285
|
+
top: 2rem;
|
|
1287
1286
|
}
|
|
1288
1287
|
.-right-2 {
|
|
1289
1288
|
right: calc(var(--spacing-2) * -1);
|
|
@@ -1690,8 +1689,8 @@
|
|
|
1690
1689
|
.h-\[600px\] {
|
|
1691
1690
|
height: 600px;
|
|
1692
1691
|
}
|
|
1693
|
-
.h-\[calc\(100\%\+
|
|
1694
|
-
height: calc(100% +
|
|
1692
|
+
.h-\[calc\(100\%\+2\.5rem\)\] {
|
|
1693
|
+
height: calc(100% + 2.5rem);
|
|
1695
1694
|
}
|
|
1696
1695
|
.h-\[calc\(100dvh-60px\)\] {
|
|
1697
1696
|
height: calc(100dvh - 60px);
|
|
@@ -1858,6 +1857,9 @@
|
|
|
1858
1857
|
.w-\[320px\] {
|
|
1859
1858
|
width: 320px;
|
|
1860
1859
|
}
|
|
1860
|
+
.w-\[400px\] {
|
|
1861
|
+
width: 400px;
|
|
1862
|
+
}
|
|
1861
1863
|
.w-\[500px\] {
|
|
1862
1864
|
width: 500px;
|
|
1863
1865
|
}
|
|
@@ -2190,9 +2192,6 @@
|
|
|
2190
2192
|
.grid-cols-12 {
|
|
2191
2193
|
grid-template-columns: repeat(12, minmax(0, 1fr));
|
|
2192
2194
|
}
|
|
2193
|
-
.grid-cols-\[1fr_300px\] {
|
|
2194
|
-
grid-template-columns: 1fr 300px;
|
|
2195
|
-
}
|
|
2196
2195
|
.grid-cols-\[1fr_auto\] {
|
|
2197
2196
|
grid-template-columns: 1fr auto;
|
|
2198
2197
|
}
|
|
@@ -2677,6 +2676,9 @@
|
|
|
2677
2676
|
border-color: color-mix(in oklab, var(--color-border-default) 60%, transparent);
|
|
2678
2677
|
}
|
|
2679
2678
|
}
|
|
2679
|
+
.border-border-focus {
|
|
2680
|
+
border-color: var(--color-border-focus);
|
|
2681
|
+
}
|
|
2680
2682
|
.border-border-input {
|
|
2681
2683
|
border-color: var(--color-border-input);
|
|
2682
2684
|
}
|
|
@@ -3126,6 +3128,9 @@
|
|
|
3126
3128
|
.p-1 {
|
|
3127
3129
|
padding: var(--spacing-1);
|
|
3128
3130
|
}
|
|
3131
|
+
.p-1\.5 {
|
|
3132
|
+
padding: calc(var(--spacing) * 1.5);
|
|
3133
|
+
}
|
|
3129
3134
|
.p-2 {
|
|
3130
3135
|
padding: var(--spacing-2);
|
|
3131
3136
|
}
|
|
@@ -3207,6 +3212,9 @@
|
|
|
3207
3212
|
.px-px {
|
|
3208
3213
|
padding-inline: 1px;
|
|
3209
3214
|
}
|
|
3215
|
+
.py-0 {
|
|
3216
|
+
padding-block: var(--spacing-0);
|
|
3217
|
+
}
|
|
3210
3218
|
.py-0\.5 {
|
|
3211
3219
|
padding-block: calc(var(--spacing) * 0.5);
|
|
3212
3220
|
}
|
|
@@ -3591,9 +3599,6 @@
|
|
|
3591
3599
|
.text-inherit {
|
|
3592
3600
|
color: inherit;
|
|
3593
3601
|
}
|
|
3594
|
-
.text-neutral-white {
|
|
3595
|
-
color: var(--color-neutral-white);
|
|
3596
|
-
}
|
|
3597
3602
|
.text-orange-500 {
|
|
3598
3603
|
color: var(--color-orange-500);
|
|
3599
3604
|
}
|
|
@@ -3738,6 +3743,14 @@
|
|
|
3738
3743
|
--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
|
|
3739
3744
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
3740
3745
|
}
|
|
3746
|
+
.shadow-\[inset_0_0_0_1px_var\(--color-border-focus\)\] {
|
|
3747
|
+
--tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--color-border-focus));
|
|
3748
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
3749
|
+
}
|
|
3750
|
+
.shadow-\[inset_0_0_0_1px_var\(--color-feedback-error-border\)\] {
|
|
3751
|
+
--tw-shadow: inset 0 0 0 1px var(--tw-shadow-color, var(--color-feedback-error-border));
|
|
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
|
+
}
|
|
3741
3754
|
.shadow-\[inset_0_1px_0_0_theme\(colors\.gray\.600\)\] {
|
|
3742
3755
|
--tw-shadow: inset 0 1px 0 0 var(--tw-shadow-color, #4b5563);
|
|
3743
3756
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -3956,6 +3969,12 @@
|
|
|
3956
3969
|
.\[--tw-enter-translate-x\:calc\(-16rem-100\%\)\] {
|
|
3957
3970
|
--tw-enter-translate-x: calc(-16rem - 100%);
|
|
3958
3971
|
}
|
|
3972
|
+
.\[animation-delay\:0\.1s\] {
|
|
3973
|
+
animation-delay: 0.1s;
|
|
3974
|
+
}
|
|
3975
|
+
.\[animation-delay\:0\.2s\] {
|
|
3976
|
+
animation-delay: 0.2s;
|
|
3977
|
+
}
|
|
3959
3978
|
.ring-inset {
|
|
3960
3979
|
--tw-ring-inset: inset;
|
|
3961
3980
|
}
|
|
@@ -4479,6 +4498,13 @@
|
|
|
4479
4498
|
}
|
|
4480
4499
|
}
|
|
4481
4500
|
}
|
|
4501
|
+
.hover\:decoration-current {
|
|
4502
|
+
&:hover {
|
|
4503
|
+
@media (hover: hover) {
|
|
4504
|
+
text-decoration-color: currentcolor;
|
|
4505
|
+
}
|
|
4506
|
+
}
|
|
4507
|
+
}
|
|
4482
4508
|
.hover\:decoration-text-link-hover {
|
|
4483
4509
|
&:hover {
|
|
4484
4510
|
@media (hover: hover) {
|
|
@@ -5188,9 +5214,9 @@
|
|
|
5188
5214
|
padding-block: var(--spacing-6);
|
|
5189
5215
|
}
|
|
5190
5216
|
}
|
|
5191
|
-
.md\:pt-
|
|
5217
|
+
.md\:pt-12 {
|
|
5192
5218
|
@media (width >= 48rem) {
|
|
5193
|
-
padding-top: var(--spacing-
|
|
5219
|
+
padding-top: var(--spacing-12);
|
|
5194
5220
|
}
|
|
5195
5221
|
}
|
|
5196
5222
|
.md\:pb-28 {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"generatedAt": "2025-10-
|
|
2
|
+
"version": "1.13.1",
|
|
3
|
+
"generatedAt": "2025-10-27T18:44:56.463Z",
|
|
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",
|
|
@@ -40,6 +54,13 @@
|
|
|
40
54
|
"category": "hooks",
|
|
41
55
|
"file": "hooks/useElementSize.ts"
|
|
42
56
|
},
|
|
57
|
+
{
|
|
58
|
+
"name": "useInfiniteScroll",
|
|
59
|
+
"type": "function",
|
|
60
|
+
"description": "useInfiniteScroll Hook for implementing infinite scroll with optional virtualization. Intelligently detects initial vs loading-more states from context. Features: - Smart loading state detection (initial vs loading-more) - Optional explicit state control - TanStack Virtual integration for performance - Intersection Observer for load triggering - Configurable virtualization threshold ```tsx const { scrollRef, computedLoadingState, isLoadingMore } = useInfiniteScroll({ items, onLoadMore: fetchNextPage, hasMore: hasNextPage, isLoading: isFetching, }); ```",
|
|
61
|
+
"category": "hooks",
|
|
62
|
+
"file": "hooks/useInfiniteScroll.ts"
|
|
63
|
+
},
|
|
43
64
|
{
|
|
44
65
|
"name": "useLocalStorage",
|
|
45
66
|
"type": "function",
|
|
@@ -53,6 +74,13 @@
|
|
|
53
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)'); ```",
|
|
54
75
|
"category": "hooks",
|
|
55
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"
|
|
56
84
|
}
|
|
57
85
|
]
|
|
58
86
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@texturehq/edges",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.1",
|
|
4
4
|
"author": "Nicholas Brown <nick@texturehq.com>",
|
|
5
5
|
"description": "A shared component library for Texture",
|
|
6
6
|
"type": "module",
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@phosphor-icons/react": "^2.1.7",
|
|
67
|
+
"@tanstack/react-virtual": "^3.13.12",
|
|
67
68
|
"@tiptap/core": "^3.4.5",
|
|
68
69
|
"@tiptap/extension-link": "^3.4.5",
|
|
69
70
|
"@tiptap/pm": "^3.4.5",
|
|
@@ -86,6 +87,7 @@
|
|
|
86
87
|
"file-saver": "^2.0.5",
|
|
87
88
|
"filestack-react": "^6.0.0",
|
|
88
89
|
"framer-motion": "^12.23.18",
|
|
90
|
+
"fuse.js": "^7.0.0",
|
|
89
91
|
"lucide-react": "^0.544.0",
|
|
90
92
|
"luxon": "^3.4.4",
|
|
91
93
|
"mapbox-gl": "3.7.0",
|