Skip to content

Commit 65f5633

Browse files
committed
feat: apply axisX mark defaults
1 parent dd22572 commit 65f5633

File tree

3 files changed

+64
-55
lines changed

3 files changed

+64
-55
lines changed

src/lib/core/Plot.svelte

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,10 @@
6565
axes: true
6666
},
6767
axisX: {
68-
anchor: 'bottom',
69-
tickSpacing: 80
68+
anchor: 'bottom'
7069
},
7170
axisY: {
72-
anchor: 'left',
73-
tickSpacing: 50
71+
anchor: 'left'
7472
},
7573
categoricalColorScheme: 'observable10',
7674
pointScaleHeight: 18,
@@ -413,7 +411,7 @@
413411
round: false,
414412
percent: false,
415413
align: 0.5,
416-
tickSpacing: DEFAULTS.axisX.tickSpacing,
414+
tickSpacing: DEFAULTS.axisX.tickSpacing ?? 80,
417415
tickFormat: 'auto',
418416
grid: false
419417
},
@@ -428,7 +426,7 @@
428426
round: false,
429427
percent: false,
430428
align: 0.5,
431-
tickSpacing: DEFAULTS.axisY.tickSpacing,
429+
tickSpacing: DEFAULTS.axisY.tickSpacing ?? 50,
432430
tickFormat: 'auto',
433431
grid: false
434432
},

src/lib/marks/AxisX.svelte

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,32 +49,36 @@
4949
RawValue,
5050
ConstantAccessor,
5151
FacetContext,
52-
PlotDefaults
52+
PlotDefaults,
53+
ChannelName
5354
} from '../types.js';
5455
import autoTimeFormat from '$lib/helpers/autoTimeFormat.js';
5556
import { derived } from 'svelte/store';
5657
import { autoTicks } from '$lib/helpers/autoTicks.js';
5758
import { resolveScaledStyles } from '$lib/helpers/resolve.js';
5859
59-
const DEFAULTS = {
60+
let markProps: AxisXMarkProps = $props();
61+
62+
const DEFAULTS: Omit<AxisXMarkProps, 'data' | ChannelName> = {
6063
tickSize: 6,
6164
tickPadding: 3,
6265
tickFontSize: 11,
63-
axisXAnchor: 'bottom',
64-
...getContext<Partial<PlotDefaults>>('svelteplot/_defaults')
66+
anchor: 'bottom',
67+
...getContext<PlotDefaults>('svelteplot/_defaults').axis,
68+
...getContext<PlotDefaults>('svelteplot/_defaults').axisX
6569
};
6670
67-
let {
71+
const {
6872
ticks: magicTicks,
6973
data = Array.isArray(magicTicks) ? magicTicks : [],
7074
automatic = false,
7175
title,
72-
anchor = DEFAULTS.axisXAnchor as 'top' | 'bottom',
76+
anchor,
7377
facetAnchor = 'auto',
7478
interval = typeof magicTicks === 'string' ? magicTicks : undefined,
75-
tickSize = DEFAULTS.tickSize,
76-
tickFontSize = DEFAULTS.tickFontSize,
77-
tickPadding = DEFAULTS.tickPadding,
79+
tickSize,
80+
tickFontSize,
81+
tickPadding,
7882
labelAnchor,
7983
tickFormat,
8084
tickClass,
@@ -83,7 +87,7 @@
8387
tickSpacing,
8488
text = true,
8589
...options
86-
}: AxisXMarkProps = $props();
90+
}: AxisXMarkProps = $derived({ ...DEFAULTS, ...markProps });
8791
8892
const { getPlotState } = getContext<PlotContext>('svelteplot');
8993
const plot = $derived(getPlotState());

src/lib/types.ts

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -616,27 +616,27 @@ export type LinkableMarkProps = {
616616
/**
617617
* if set, the mark element will be wrapped in a <a> link element
618618
*/
619-
href: ConstantAccessor<string>;
619+
href?: ConstantAccessor<string>;
620620
/**
621621
* the relationship of the target object to the link object (e.g. "noopener")
622622
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a#rel
623623
*/
624-
rel: ConstantAccessor<string>;
624+
rel?: ConstantAccessor<string>;
625625
/**
626626
* the link target mime type, e.g. "text/csv"
627627
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a#type
628628
*/
629-
type: ConstantAccessor<string>;
629+
type?: ConstantAccessor<string>;
630630
/**
631631
* the target of the link, e.g. "_blank" or "_self"
632632
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/a#target
633633
*/
634-
target: ConstantAccessor<'_self' | '_blank' | '_parent' | '_top' | string>;
634+
target?: ConstantAccessor<'_self' | '_blank' | '_parent' | '_top' | string>;
635635
/**
636636
* if set to true, the link will be downloaded instead of navigating to it
637637
* @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#download
638638
*/
639-
download: ConstantAccessor<boolean>;
639+
download?: ConstantAccessor<boolean>;
640640
// allow data-sveltekit-* attributes on the link element, e.g. data-sveltekit-reload
641641
[key: `data-sveltekit-${string}`]: string | boolean;
642642
};
@@ -833,6 +833,8 @@ export type AutoMarginStores = {
833833
autoMarginBottom: Writable<Map<string, number>>;
834834
};
835835

836+
type IgnoreDefaults = 'data' | 'facet' | ChannelName | 'title';
837+
836838
/**
837839
* these are the default options for the plot marks that can be set using
838840
* the 'svelteplot/defaults' context.
@@ -902,147 +904,152 @@ export type PlotDefaults = {
902904
/**
903905
* default props for area marks, applied to area, areaX, and areaY marks
904906
*/
905-
area: Partial<Omit<AreaMarkProps, 'data' | 'facet' | ChannelName>>;
907+
area: Partial<Omit<AreaMarkProps, IgnoreDefaults>>;
906908
/**
907909
* default props for areaX marks
908910
*/
909-
areaX: Partial<Omit<AreaMarkProps, 'data' | 'facet' | ChannelName>>;
911+
areaX: Partial<Omit<AreaMarkProps, IgnoreDefaults>>;
910912
/**
911913
* default props for areaY marks
912914
*/
913-
areaY: Partial<Omit<AreaMarkProps, 'data' | 'facet' | ChannelName>>;
915+
areaY: Partial<Omit<AreaMarkProps, IgnoreDefaults>>;
914916
/**
915917
* default props for arrow marks
916918
*/
917-
arrow: Partial<Omit<ArrowMarkProps, 'data' | 'facet' | ChannelName>>;
919+
arrow: Partial<Omit<ArrowMarkProps, IgnoreDefaults>>;
918920
/**
919921
* default props for axis marks, applied to both axisX and axisY marks
920922
*/
921-
axis: Partial<BaseMarkProps>;
923+
axis: Partial<
924+
Omit<
925+
AxisXMarkProps,
926+
'data' | 'facet' | ChannelName | 'facetAnchor' | 'labelAnchor' | 'anchor'
927+
>
928+
>;
922929
/**
923930
* default props for axisX marks
924931
*/
925-
axisX: Partial<Omit<AxisXMarkProps, 'data' | 'facet' | ChannelName>>;
932+
axisX: Partial<Omit<AxisXMarkProps, IgnoreDefaults>>;
926933
/**
927934
* default props for axisY marks
928935
*/
929-
axisY: Partial<Omit<AxisYMarkProps, 'data' | 'facet' | ChannelName>>;
936+
axisY: Partial<Omit<AxisYMarkProps, IgnoreDefaults>>;
930937
/**
931938
* default props for bar marks, applied to both barX and barY marks
932939
*/
933-
bar: Partial<Omit<BarXMarkProps, 'data' | 'facet' | ChannelName>>;
940+
bar: Partial<Omit<BarXMarkProps, IgnoreDefaults>>;
934941
/**
935942
* default props for barX marks
936943
*/
937-
barX: Partial<Omit<BarXMarkProps, 'data' | 'facet' | ChannelName>>;
944+
barX: Partial<Omit<BarXMarkProps, IgnoreDefaults>>;
938945
/**
939946
* default props for barY marks
940947
*/
941-
barY: Partial<Omit<BarXMarkProps, 'data' | 'facet' | ChannelName>>;
948+
barY: Partial<Omit<BarXMarkProps, IgnoreDefaults>>;
942949
/**
943950
* default props for brush marks, applied to brush, brushX and brushY marks
944951
*/
945-
brush: Partial<Omit<BrushMarkProps, 'data' | 'facet' | 'limitDimension' | ChannelName>>;
952+
brush: Partial<Omit<BrushMarkProps, IgnoreDefaults | 'limitDimension'>>;
946953
/**
947954
* default props for brushX marks
948955
*/
949-
brushX: Partial<Omit<BrushXMarkProps, 'data' | 'facet' | ChannelName>>;
956+
brushX: Partial<Omit<BrushXMarkProps, IgnoreDefaults>>;
950957
/**
951958
* default props for brushY marks
952959
*/
953-
brushY: Partial<Omit<BrushYMarkProps, 'data' | 'facet' | ChannelName>>;
960+
brushY: Partial<Omit<BrushYMarkProps, IgnoreDefaults>>;
954961
/**
955962
* default props for cell marks
956963
*/
957-
cell: Partial<Omit<CellMarkProps, 'data' | 'facet' | ChannelName>>;
964+
cell: Partial<Omit<CellMarkProps, IgnoreDefaults>>;
958965
/**
959966
* default props for dot marks
960967
*/
961-
dot: Partial<Omit<DotMarkProps, 'data' | 'facet' | ChannelName>>;
968+
dot: Partial<Omit<DotMarkProps, IgnoreDefaults>>;
962969
/**
963970
* default props for frame marks
964971
*/
965972
frame: Partial<FrameMarkProps>;
966973
/**
967974
* default props for geo marks
968975
*/
969-
geo: Partial<Omit<GeoMarkProps, 'data' | 'facet' | ChannelName>>;
976+
geo: Partial<Omit<GeoMarkProps, IgnoreDefaults>>;
970977
/**
971978
* default props for graticule marks
972979
*/
973-
graticule: Partial<Omit<GraticuleMarkProps, 'data' | 'facet' | ChannelName>>;
980+
graticule: Partial<Omit<GraticuleMarkProps, IgnoreDefaults>>;
974981
/**
975982
* default props for grid marks, applied to both gridX and gridY marks
976983
*/
977-
grid: Partial<Omit<AxisXMarkProps, 'data' | 'facet' | ChannelName>>;
984+
grid: Partial<Omit<AxisXMarkProps, IgnoreDefaults>>;
978985
/**
979986
* default props for gridX marks
980987
*/
981-
gridX: Partial<Omit<AxisXMarkProps, 'data' | 'facet' | ChannelName>>;
988+
gridX: Partial<Omit<AxisXMarkProps, IgnoreDefaults>>;
982989
/**
983990
* default props for gridY marks
984991
*/
985-
gridY: Partial<Omit<AxisYMarkProps, 'data' | 'facet' | ChannelName>>;
992+
gridY: Partial<Omit<AxisYMarkProps, IgnoreDefaults>>;
986993
/**
987994
* default props for line marks
988995
*/
989-
line: Partial<Omit<LineMarkProps, 'data' | 'facet' | ChannelName>>;
996+
line: Partial<Omit<LineMarkProps, IgnoreDefaults>>;
990997
/**
991998
* default props for link marks
992999
*/
993-
link: Partial<Omit<LinkMarkProps, 'data' | 'facet' | ChannelName>>;
1000+
link: Partial<Omit<LinkMarkProps, IgnoreDefaults>>;
9941001
/**
9951002
* default props for rect marks, applied to rect and rectX marks
9961003
*/
997-
rect: Partial<Omit<RectMarkProps, 'data' | 'facet' | ChannelName>>;
1004+
rect: Partial<Omit<RectMarkProps, IgnoreDefaults>>;
9981005
/**
9991006
* default props for rectX marks
10001007
*/
1001-
rectX: Partial<Omit<RectXMarkProps, 'data' | 'facet' | ChannelName>>;
1008+
rectX: Partial<Omit<RectXMarkProps, IgnoreDefaults>>;
10021009
/**
10031010
* default props for rectY marks
10041011
*/
1005-
rectY: Partial<Omit<RectYMarkProps, 'data' | 'facet' | ChannelName>>;
1012+
rectY: Partial<Omit<RectYMarkProps, IgnoreDefaults>>;
10061013
/**
10071014
* default props for rule marks
10081015
*/
1009-
rule: Partial<Omit<RuleXMarkProps, 'data' | 'facet' | ChannelName>>;
1016+
rule: Partial<Omit<RuleXMarkProps, IgnoreDefaults>>;
10101017
/**
10111018
* default props for rule marks
10121019
*/
1013-
ruleX: Partial<Omit<RuleXMarkProps, 'data' | 'facet' | ChannelName>>;
1020+
ruleX: Partial<Omit<RuleXMarkProps, IgnoreDefaults>>;
10141021
/**
10151022
* default props for rule marks
10161023
*/
1017-
ruleY: Partial<Omit<RuleYMarkProps, 'data' | 'facet' | ChannelName>>;
1024+
ruleY: Partial<Omit<RuleYMarkProps, IgnoreDefaults>>;
10181025
/**
10191026
* default props for sphere marks
10201027
*/
10211028
sphere: Partial<SphereMarkProps>;
10221029
/**
10231030
* default props for spike marks
10241031
*/
1025-
spike: Partial<Omit<SpikeMarkProps, 'data' | 'facet' | ChannelName>>;
1032+
spike: Partial<Omit<SpikeMarkProps, IgnoreDefaults>>;
10261033
/**
10271034
* default props for text marks
10281035
*/
1029-
text: Partial<Omit<TextMarkProps, 'data' | 'facet' | ChannelName>>;
1036+
text: Partial<Omit<TextMarkProps, IgnoreDefaults>>;
10301037
/**
10311038
* default props for tick marks, applied to tickX and tickY marks
10321039
*/
1033-
tick: Partial<Omit<TickXMarkProps, 'data' | 'facet' | ChannelName>>;
1040+
tick: Partial<Omit<TickXMarkProps, IgnoreDefaults>>;
10341041
/**
10351042
* default props for tickX marks
10361043
*/
1037-
tickX: Partial<Omit<TickXMarkProps, 'data' | 'facet' | ChannelName>>;
1044+
tickX: Partial<Omit<TickXMarkProps, IgnoreDefaults>>;
10381045
/**
10391046
* default props for tickY marks
10401047
*/
1041-
tickY: Partial<Omit<TickYMarkProps, 'data' | 'facet' | ChannelName>>;
1048+
tickY: Partial<Omit<TickYMarkProps, IgnoreDefaults>>;
10421049
/**
10431050
* default props for vector marks
10441051
*/
1045-
vector: Partial<Omit<VectorMarkProps, 'data' | 'facet' | ChannelName>>;
1052+
vector: Partial<Omit<VectorMarkProps, IgnoreDefaults>>;
10461053
};
10471054

10481055
export type MapIndexObject = {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy