Skip to content

Releases

Quick Charts 4.1.0

Choose a tag to compare

@joeydangelo joeydangelo released this 09 Oct 23:58
9b376e5

Line tools painted as measured, with their words typed along them and their points marked on the axes, a menu of every drawing's own, the bar price sources, the bars pattern modes and the serial version exported from the drawings entry, color panels and the chart's words that keep their measure under a host page's global rules, and a dictionary of your own that may leave out the keys the catalog gains within the major. No public name changes.

The line tools paint as measured. A line rests as one stroke, and under the pointer its handles show thin, a ring of radius 6 or a square 12px across, 1px wide; a press on one moves that point and selects the line, whether or not it was selected. Two clicks place a line, its first point ringed and its second following the pointer between them. A selected line without words invites them where they would stand, a plus and its placeholder in its text color at half strength, turned with the line, and a click there or on its words types them in place; a double-click on a line opens its settings. A selected line marks its points' prices and times on the axes in the accent's pills, the times in the chart's own format, with a band at a quarter across their span: every drawing carries priceAxisPaneViews and timeAxisPaneViews, and a tool names what it marks. The horizontal and vertical lines stand a square handle nine tenths of the way across or down the pane, and a drag of it sets both coordinates of their point; the level lines stroke on the pixel grid and keep their own pills in their colors. An arrow's end is an open head; an info line stands its stats in a grey box of up to three rows, each led by a mark of its own, its length on the pane among them (showDistance); a trend angle marks a dotted level 50px long and an arc of radius 50, its angle to one place. A line saved at v: 2 keeps its ends, words and stats as they were (savedLook) until its settings change.

A double-click on a drawing's words opens its settings on their Text page: on a line's words or its invitation, on the selected arrow's body, and on the words of the text tools; anywhere else on the drawing it opens on its first page. chart.drawings.settings takes the page to open on ('Text', 'Style', 'Inputs', 'Coordinates' or 'Visibility'), opening on the first page where the drawing has none by that name. A line's Stats list offers its length on the pane (Distance, showDistance), between the date and time range and the angle.

A right-click on a drawing raises the drawing's own menu, and a right-click anywhere else the chart's: a table's edits first, then Template, Visual order and Visibility on timeframes as submenus, Clone and Copy, Lock, Hide and Remove, and Settings…. The rows an extension contributes stand in it as they stand in the chart's: its level rows under Clone and Copy and its view rows under Remove, and on a table ChartExtensionMenuContext.table names the table and whether a cell of it is being typed in.

@trdrs/quickcharts/drawings exports BAR_PRICE_SOURCES, BARS_PATTERN_MODES and SERIAL_VERSION, with the BarPriceSource and BarsPatternMode types: the sources a regression trend or an anchored VWAP reads, the modes a bars pattern paints in, and the version a drawing saves at, as the 4.0 upgrading guide names them.

A settings dialog's panels stand whole over its controls on every page of every tool, and every color panel (the dialog's popovers, the settings bar's panels, and the palettes the chart and indicator settings expand) holds its whole ten-column palette on a page whose unlayered rule sizes every element by its border box. The font, line height, weight and spacing a page sets on its body reach nothing the chart draws.

A dictionary of your own (ChartCustomLocale, ChartDictionary) carries every key of the major's first release, and a key the catalog gains within the major is optional in it: until your dictionary carries the key, the chart reads it in English and reports it to onMissing, and the next major makes it required. The catalog gains drawing.distance, drawing.drawingMenu and drawing.hintRemove in every built-in language (the Distance stat, the drawing menu's name and the shortcut its Remove row shows), each optional in a dictionary of your own.

Quick Charts 4.0.0

Choose a tag to compare

@joeydangelo joeydangelo released this 09 Oct 19:58
8f06ad7

Settled settings dialogs and factory looks for every drawing tool, words typed on the chart, a rebuilt replay date picker, glyphs drawn as the chart's own artwork, recent picks narrowed by the selected class, and drawings the catalog cannot restore named as unreadable. 4.0 removes the content card and the catalog keys the settled dialogs do not read, and gives drawing props new names and meanings, so a host upgrades as the guide below says. A drawing saved by 3.x restores with the look it was saved with.

The built-in palettes retune their dialog and status colors: the veil behind a light modal is rgba(156, 156, 156, 0.5), a select's chevron and a flyout's arrow read in chrome.caret (#707070 light, #8c8c8c dark), the muted ink is #6a6a6a light and #9b9b9b dark, the status inks are #078671, #df323f and #ac6600 in light and #089981, #f34452 and #ff9800 in dark, drawing.line is #2962ff in both modes, and drawing.selected, the ring of a selected drawing's handles, is #2962ff light and #1e53e5 dark. Every ink reads at the WCAG 2.2 AA ratio on each ground it is drawn over.

The drawing settings dialog is a card at least 380px wide under a 68px header that carries the drawing's name at 20px, a pencil that renames it in place, and the close; a page strip of 16px tabs over a 4px track, the shown page carried by a bar that slides to the next; a two-column page whose labels share one column and whose rows stand 50px; list buttons that open their choices under them, several at once where a row takes several; and a footer with the Template list button, Cancel and Ok. DrawingOptions.name holds the name a viewer gives a drawing, saved with it, and a drawing without one is called by its tool's name.

A color in the drawing settings dialog opens one popover directly under its button, past the dialog's edge where it needs to, and keeps its whole width and height wherever it opens, moving left or above its button to stay in view rather than narrowing or scrolling; the settings bar's color panels keep theirs the same way: the offered colors on a ten-wide grid (the greys and ten hues, then six ramps of them), the colors the viewer added after a rule with the plus that adds one, the opacity as a track and a percent field, and for a stroke the Thickness and Line style rows as joined segments. Every choice applies to the drawing at once and the popover stays up for the next one, while Cancel still puts back everything from before the dialog opened. The plus opens a custom color editor with a hex field that takes three or six digits, a saturation and brightness area and a hue strip; a color added there joins the viewer's own colors, kept with the drawing preferences in ChartStorage, and is chosen. The arrows move over the grid and the rows, Enter or Space chooses, Tab stays in the popover, and Escape returns to the button. The line-end list is as wide as its rows, and both line-end marks are the chart's own drawing.

The line, shape and curve tools open with their factory looks: the line tools in #2962ff at 2px with 14px words (12px for a trend angle and the horizontal lines), and each shape and curve in its own hue at 2px with a background of that hue at a fifth, switched off on a curve. Their settings pages carry the rows their kinds offer: a line's ends, extensions, middle point, price labels and stats under Info, with showPipsChange counting the change in the symbol's smallest price move, statsPosition taking auto, and alwaysShowStats keeping them on screen when the line is not selected, since they otherwise show only while it is; a level's price label and a time line's time label; a rectangle's middle line in a stroke of its own; a shape's background switched by fillBackground; a curve's ends and its extensions along its end tangents; and a Text page whose words stand where textVAlign and textHAlign put them, with textOrientation turning a vertical line's words to run up it. NO_COORDINATES_TAB and PRICE_ONLY_COORDS join the settings capabilities, and the bold and italic icons draw the Text page's weight and slant toggles.

A Fibonacci retracement, a trend-based extension and a fib channel open on twenty-four levels, the eleven classic ratios shown and thirteen more to switch on, each in its own color, drawn at 2px with 12px labels over bands at a fifth; a retracement and an extension draw their trend line dashed in grey. Their Style pages carry the trend line, the levels' thickness and style, the extensions, the level grid two to a line, one color for every level, the bands' switch and opacity, Reverse, Prices, the labels' reading and place, the levels' own words and their place, the labels' size, and log price levels: trendLine, trendLineColor, trendLineWidth, trendLineStyle, fillBackground, backgroundOpacity, coeffsAsPercents, labelsHAlign, labelsVAlign, showText, textHAlign, textVAlign and levelsOnLogScale, with Viewport.logScale saying whether the price scale is logarithmic. A fib saved with its earlier background switch keeps its setting as fillBackground. A number field's stepper keeps every digit the value carries.

A fib time zone, a trend-based fib time, fib circles, speed resistance arcs, a fib wedge and a pitchfan open on their own levels, each in its own color and stroke, and their Style pages stand the levels one to a line, each level's switch, value and stroke (FibLevel.width and FibLevel.style), under the trend line or the median and over the one color, the bands' switch and opacity, and the rows of their own: a time zone's and a trend-based time's Labels and where they stand, a circle fib's Levels and Coeffs as percents, an arc fib's Levels and Full circles, and a wedge's Levels. A wedge has no Coordinates page. A speed resistance fan and a gann box divide their box on seven price and seven time divisions, priceLevels and timeLevels, each side under its section with its labels' switches; a fan adds its bands, a grid in a stroke of its own and Reverse, and a gann box its price and time bands on their own switches and opacities, its angles in a color of their own, and Reverse. A fan saved with one set of levels reads them as its price divisions and a gann box as both its price and its time divisions, and the settings bar's stroke color recolors every set of levels a tool holds.

The four pitchforks open on nine line pairs, the half in #089981 and the tines in #2962ff shown and seven more to switch on, each pair in its own color at 2px, with a red median and bands at a fifth. Their Style pages carry Extend lines, the median's stroke (medianColor, medianWidth, medianStyle), the pairs one to a line with each pair's switch, value and stroke, the one color, the bands' switch and opacity (fillBackground, backgroundOpacity) and the construction in a Style list that switches it in place. A fork saved with its earlier background switch keeps its setting as fillBackground.

A fib spiral opens in #00bcd4 at 2px, and its Style page carries its line and Counterclockwise, counterclockwise winding it the other way about its first point.

A gann square and a gann square fixed open on six grid lines, eleven fan lines (2x1, 1x1 and 1x2 shown) and eleven arcs, each in its own color at 2px over bands at a fifth, and their Style pages set the Levels, Fans and Arcs two to a line, each its switch with its place or its ratio and its stroke, then the one color, the bands' switch and opacity, and Reverse: levels, fans and arcs hold the lines, with fillBackground, backgroundOpacity and reverse. A gann square holds its second corner at scaleRatio price per bar, taken from the pane when it is first drawn, which its Price/bar ratio field shows and sets, and reads its ranges and ratio under it while showLabels is on, in the size, weight and slant its Ranges and ratio row sets. A gann fan opens on nine rays, 1/8 to 8/1, each in its own color and stroke over bands at a fifth, its page a line for each ray named by its ratio, the one color, the bands and Labels. A square or a fan saved with its earlier background switch keeps its setting as fillBackground, a square saved with its earlier levels paints them as it was saved until its settings change and then takes its factory lines, and the settings bar's stroke color recolors a square's fans and arcs with its grid.

A regression trend fits through any of nine sources (BAR_PRICE_SOURCES: open, high, low, close, volume, hl2, hlc3, ohlc4, hlcc4), opens with its line dashed red at 1px and its bands blue at 2px two deviations either side, and its pages carry Upper Deviation, Lower Deviation (counted down from the line, so a saved trend's lower deviation reads as its negative), their switches and the source on Inputs, and the line's and bands' switches and strokes, Extend lines and Pearson's R on Style: baseLine, baseColor, baseWidth, baseStyle, the same for up and down, extendLines and showPearsons. A parallel channel opens on seven levels, 0 and 1 shown at 2px and the half dashed at 1px, each in its own stroke, its page carrying them one to a line with the extensions and the background, and its Coordinates page its parallel's Price offset. A flat top/bottom and a disjoint channel open in #ff9800 and #089981 with no Coordinates page, their pages carrying the line and its ends, the extensions, the sides' prices in a text style of their own (showPrices, pricesColor, pricesFontSize, pricesBold, pricesItalic) and the background. Every channel opens with its body at a fifth and 14px words, and stands them above, inside or below it.

The six chart patterns open in their factory looks: an XABCD and a cypher pattern in #2962ff, an ABCD and a head and shoulders in #089981, a three drives and a triangle pattern in #673ab7, each at 2px with white 12px letters, the shaded ones shading their legs in their hue at fifteen percen...

Read more

Quick Charts 3.0.0

Choose a tag to compare

@joeydangelo joeydangelo released this 09 Oct 19:58
7576f6f

A search scope the viewer turns on and off, one box for the chart's dialog fields, and a drawing dialog that follows its drag. Each SearchScope carries the search within it, a required search, so a host that offers a scope upgrades as the guide below says. No public name changes.

search.scope offers a part of the catalog the viewer can limit the symbol search to, as a toggle chip at the far edge of the class strip wearing the scope's mark and label, and a SearchScope carries the search within it: search, which is required, recents and on. The chip is on each time the dialog opens, unless the scope sets on: false. While it is on, the dialog searches with the scope's search, which the chart's search controller asks exactly as it asks the datafeed's (the query after the debounce, the selected classes, a page at a time, and a newer question retiring an older one's answer), and the list leads with the scope's recents, or with none. While it is off, the dialog searches the datafeed and leads with the chart's recents. Pressing the chip asks the other source the query and classes the dialog holds, and an answer that arrives for the state the viewer left is dropped. A pick is recorded in search.recents either way, and in the scope's recents while the chip is on. The chip is a toggle button (aria-pressed) in the strip's tab order after the class chips, which form a labelled group of their own beside it, and its accessible name says what a press does in every built-in language (search.limitToScope). The compare dialog, adding a comparison or changing one, offers no scope.

Every field in the chart's dialogs and settings other than a search field is one box, whether a text field, a select, a number field or a color well: 34px tall with an 8px corner and a 1px edge in the control.fieldEdge role, which steps to control.fieldEdgeHover under the pointer, a 2px focus ring in state.focusRing drawn over the edge, an edge and ring in control.fieldInvalid for a value the field refuses, and a control.fieldFill ground when the field is read-only or disabled. A select ends in an 18px chevron, and both built-in palettes carry the four new roles. A search field keeps its own outline in chrome.fieldBorder.

A drawing's settings dialog follows the pointer while its header is held, over the dialog as well as beside it, and lets go on the release wherever it lands, on a cancelled press, or when the window loses focus.

Upgrading to 3.0

Give each SearchScope its search: the search within the scope, asked as your datafeed's search is. Your datafeed's search answers what the viewer reaches with the chip off, so a limit it applied on its own while a scope named it moves into the scope's search. Recents your page listed only while that limit stood go in the scope's recents; leave recents out and the list leads with none while the chip is on. A scope that should open off sets on: false. A datafeed that is always limited leaves the chip nothing to turn off, so it offers no scope.

A dictionary of your own (ChartCustomLocale, ChartDictionary) carries search.limitToScope, the chip's accessible name, with {scope} where the scope's label goes; one that arrives without it reads English for that key and reports it to onMissing.

A palette of your own that sets chrome.fieldBorder to color the name prompt's field or a drawing setting's color well sets control.fieldEdge for them, and control.fieldEdgeHover for their edge under the pointer; chrome.fieldBorder outlines the symbol search field alone. A palette that leaves the four field roles out keeps the built-in ones.

Nothing saved changes.

Quick Charts 2.4.0

Choose a tag to compare

@joeydangelo joeydangelo released this 09 Oct 19:58
fc228cc

Bar replay that starts where the viewer chose, and a chart a host can hold in place, show without its price scale, give a crosshair of chosen parts, and morph between bar and close styles. No public name changes.

Bar replay starts where the viewer chose: a bar picked in view keeps its place as the bars after it leave the plot, and after a beat the view glides it to the replay's edge. A bar chosen out of view, from a date, comes to the edge at once.

features.navigation holds the view where the chart frames it. Off, no drag, flick, pinch or wheel moves the view, a scale takes no drag or double-tap, the zoom and scroll commands and their keys are unavailable, and the navigation cluster is not drawn, while goLive, reset and the crosshair still work. It is on unless the host turns it off.

ui.priceScale shows the price scale at the plot's right. Hidden, the bars span the chart's whole width, and the last price draws no line across the plot and no label. It is shown unless the host hides it.

ui.crosshair chooses what the crosshair draws: false draws neither its lines nor its labels, and a CrosshairUi object hides the horizontal line (horizontal: false) or the time and the price on the scales (labels: false), or draws the lines solid (solid: true). The crosshair still follows the pointer, and sync.onCrosshair still reports it.

transitions.style morphs a change between a style drawn from whole bars and one drawn from closes over half a second: each bar's open, high and low slide into its close as the line comes in through the closes, and back out of it as the line goes. It is off unless the host turns it on, and under a reduced-motion preference the change is made at once.

Quick Charts 2.3.0

Choose a tag to compare

@joeydangelo joeydangelo released this 05 Oct 04:01
77d0792

The symbol naming rule for hosts that name markets in views of their own. No public name changes.

@trdrs/quickcharts/symbols carries the symbol naming rule on its own, free of any DOM name: symbolNames, with its SymbolNames type, and bareTicker, so a view of the host's own with no DOM names a market as the chart's pill, legend and search rows do.

Quick Charts 2.2.0

Choose a tag to compare

@joeydangelo joeydangelo released this 05 Oct 02:19
3764a15

The way back to the live edge and the plot a host control floats over, touch that follows the hand, and the formatter, the glyph lists and the icon artwork for hosts that draw their own. No public name changes.

The return to the live edge glides: goLive, its command and Alt+L ease the view home sideways over about half a second, keeping the zoom and the price scale as they are. From far back the view steps in to a width and a half first, and a touch, a drag, a wheel or any other navigation stops it where it stands. Under a reduced-motion preference it goes in one step.

A chart reads whether its view sits back from the live edge: awayFromLiveEdge() and the liveEdge event, reported once per change, with a glide under way and bar replay reading as returned. plotArea() and the plotArea event give the main pane's plot in the pixels of the host's element, so a control floating over the bars stays beside the price scale as it widens.

Two fingers zoom proportionally: the bars spread exactly as far as the fingers do, and the point under the fingers stays under them as they travel. A pan one finger began before the second landed stays a pan, and a drawing that holds the pointer holds the pinch off.

@trdrs/quickcharts/format carries the price formatter and its types alone, with nothing that names a window, a document or a DOM type, so a native view or a server writes a price exactly as the chart's axis does.

A finger held on the plot scrubs the crosshair for as long as it stays down: the crosshair follows the finger, and lifting it takes the crosshair away, so the next one-finger drag pans the chart.

A flick of one finger coasts the chart calmly: the throw leaves the finger at no more than two pixels a millisecond and slows smoothly to rest within about a second, and a touch or any other navigation stops it where it stands.

touch.freePan makes the chart a canvas under the finger: a one-finger drag on the plot releases the main price scale's framing, as a drag on the price scale does, so the price follows the finger as freely as the time and nothing re-frames while the viewer pans, flicks or pinches, and a pinch zooms the time and leaves the price where it stands. A double-tap on the price scale, a new symbol or timeframe, and goLive frame the bars again. It is off unless the host turns it on.

chartIconArtwork(id) answers the chart's own drawings of an icon as standalone svg markup on currentColor, each on its own grid, so a host draws the same icons the chart does in a toolbar of its own or a native view. It answers the chart's artwork whatever icons draws instead; an illustration drawn in the theme's roles answers none.

@trdrs/quickcharts/glyphs carries the glyph picker's lists on their own, free of any DOM name: EMOJI_CATEGORIES and ICON_CATEGORIES, each category with the catalog key of its heading, and isEmojiGlyph, so a picker of the host's own offers the same glyphs and arms a glyph tool through chart.drawings.arm with { tool, props: { glyph } }.

Quick Charts 2.1.0

Choose a tag to compare

@joeydangelo joeydangelo released this 04 Oct 20:19
7e0b970

Long press for the crosshair, and emoji artwork that loads the first time the chart draws an emoji. No public name changes.

A finger held still on the plot is the crosshair's: the crosshair stands at the finger and follows it until the next tap, and the chart does not pan meanwhile. Held on a price scale or the time scale, it raises the chart's context menu, as a right-click does.

The bundled emoji artwork is a chunk of its own, which the chart imports the first time it draws an emoji, so a chart that never shows one never loads it, and the main bundle does not carry it. Until it arrives an emoji draws as text, then takes its artwork in place, in the glyph picker and on the chart. A chart given an assets.glyphSource never loads it.

Quick Charts 2.0.1

Choose a tag to compare

@joeydangelo joeydangelo released this 04 Oct 18:40
5c1a04f

Drawing by touch, and handles that stay on their drawings. No public name changes.

A finger draws, selects and moves drawings as surely as a pointer does. A touch takes a drawing it lands within a thumb's reach of and grabs a handle from a thumb's width away; a tap that wobbles stays a tap; a drawing a touch presses moves once the finger clearly sets off; the second touch of a placement brings its live point to the finger at once; and the crosshair stands on the point a finger places or drags, its lines and scale labels clear of the finger. A touch the drawing layer takes is claimed from the page's scroll as it begins, and a gesture the browser takes away ends where it stands. A mouse and a pen keep their behavior.

Every handle stands where its drawing paints what the handle moves, so none stays behind as the drawing's other handles move it: a long or short position's stop on the box's far edge beside the target, a flat top/bottom's flat side at that side's end, a fib wedge's third handle at the end of its second ray, and an ellipse's third handle on the ellipse at its centre.

Quick Charts 2.0.0

Choose a tag to compare

@joeydangelo joeydangelo released this 02 Oct 18:11
34ff92e

A major version may rename or remove public names, and its upgrading guide lists each one, old to new, with how saved state carries over. 2.0 names everything a host writes against in the chart's own words: the stylesheet's cascade layers, the data source a symbol search row names, timeframe for every timeframe, indicator for every indicator, the drawing toolbar's models and the context menu's row builder. Saved state is read under the 2.0 names alone, and the guide lists what 1.x saved that opens at its default.

Every modal dialog opens and closes with the modal motion, as the symbol search and chart settings do: the indicator browser, the indicator settings, the saved-layouts browser, the name and confirm prompts, go to date, and every drawing dialog (drawing settings, the image picker and the template prompts) fade their backdrop in and fade and scale their box from motion.scaleEnter over motion.durationBase. A closing dialog stops taking input and returns focus at once, and under a reduced-motion preference it closes at once.

Upgrading to 2.0

Declare the cascade layers under their 2.0 names in your first stylesheet, before any product stylesheet loads. Layers of your own product go between quickcharts.chart and host:

@layer reset, quickcharts.tokens, quickcharts.chart, host;

Then replace each 1.x name with its 2.0 name:

1.x 2.0
cascade layer trdrs.tokens quickcharts.tokens
cascade layer trdrs.chart quickcharts.chart
SymbolRow.provider SymbolRow.dataSource
providerMark on ChartWidgetOptions and SymbolSearchOptions dataSourceMark
ProviderMarkPainter, called with { provider, host, size } DataSourceMarkPainter, called with { dataSource, host, size }
MarkPainters.provider, which an extension reads as ctx.painters.provider MarkPainters.dataSource, read as ctx.painters.dataSource
LayoutSyncFlags.interval, in layout.sync, layoutSync, widget.layout.sync(), widget.layout.setSync and the widget.layout.setSync command LayoutSyncFlags.timeframe
ChartReplayApi.interval() ChartReplayApi.timeframe()
ChartReplayApi.setInterval(token) ChartReplayApi.setTimeframe(token)
ChartReplayApi.resolvedInterval() ChartReplayApi.resolvedTimeframe()
ChartReplayApi.subIntervals() ChartReplayApi.subTimeframes()
command chart.replay.setInterval chart.replay.setTimeframe
ChartPreferences.replayInterval ChartPreferences.replayTimeframe
autoIntervalFor autoTimeframeFor
subIntervalsFor subTimeframesFor
IntervalVisibility TimeframeVisibility
IntervalBucket TimeframeBucket
IntervalContext TimeframeContext
parseIntervalContext parseTimeframeContext
IDrawing.setIntervalContext(context) IDrawing.setTimeframeContext(context)
TemplateKind 'study' 'indicator'
RestTemplateKind 'study' 'indicator'
REST paths /templates/study and /templates/study/{id} /templates/indicator and /templates/indicator/{id}
info.version 1 in dist/rest-openapi.json 2
data-role="legend-study-value" on an indicator row's value data-role="legend-indicator-value"
RAIL_PLAN DRAWING_TOOLBAR_PLAN
buildRailGroups buildDrawingToolbarGroups
RailGroup DrawingToolbarGroup
RailSection DrawingToolbarSection
railFaceOf drawingToolbarFaceOf
rememberRailTool rememberDrawingToolbarTool
DrawingPreferences.railTools DrawingPreferences.drawingToolbarTools
ChartExtensionMenuProvider, which contributeContextMenu takes ChartExtensionMenuBuilder

A dictionary of your own (ChartCustomLocale, ChartDictionary) uses the 2.0 catalog keys and placeholders:

1.x 2.0
layouts.syncInterval layouts.syncTimeframe
layouts.syncIntervalTip layouts.syncTimeframeTip
layouts.syncIntervalToggle layouts.syncTimeframeToggle
replay.interval replay.timeframe
replay.intervalHelp replay.timeframeHelp
replay.intervalNone replay.timeframeNone
replay.autoSelectInterval replay.autoSelectTimeframe
command.replayInterval command.replayTimeframe
drawing.visibilityOnIntervals drawing.visibilityOnTimeframes
drawing.intervalPinnedNote drawing.timeframePinnedNote
{interval} in range.tip and layouts.listingFacts {timeframe}

Every English string about a timeframe says timeframe, and each language writes its own word for timeframe in the layout sync switch. legend.showRows and legend.hideRows read Show indicator rows and Hide indicator rows in every language, and the remove control on a comparison's legend row is named Remove comparison.

Delete via from the rows your feed's search returns. A row names the venue its market lists on in exchange and where its data comes from in dataSource, and its source cell shows the venue, or the data source for a row with no venue, each with the host's mark from venueMark or dataSourceMark.

A layoutSync list that names interval is a setup error from createChart; name timeframe.

Saved state is read under the 2.0 names alone. What 1.x saved under these names opens at its default:

  • a saved layout's timeframe sync switch, saved as sync.interval: the value layout.sync gives it, else off;
  • each drawing toolbar group's remembered tool, stored as railTools in the drawing preference record quickcharts.drawingPrefs.v1: the group's first tool;
  • the replay update timeframe, stored under quickcharts.replayIv.v1: preferences.replayTimeframe, else auto.

Hosts that keep templates by kind file them under indicator: the chart asks templates('indicator'), and the REST adapter asks /templates/indicator.

A RecentsPort of yours that stores rows stores dataSource, the field the source cell reads.

Quick Charts 1.3.0

Choose a tag to compare

@joeydangelo joeydangelo released this 02 Oct 05:23
18b1611

Hosts choose which chart styles, timeframes, layouts, drawing tools, built-in indicators, range presets and display timezones a chart offers, how the chart presents what the access policy refuses, and can open the timeframe list away from a chart. Every motion value is a theme role. Content already on a chart, or restored to it, stays when the access policy refuses creating it.

Every duration, timing function and motion scale is a theme role in the motion family, which a host's palette retunes and a reduced-motion preference resolves to no motion: motion.durationModerate, motion.durationSlow, motion.durationSlower, motion.easingStandard, motion.easingOut, motion.easingLinear, motion.easingSpring and motion.scaleEnter join motion.durationFast and motion.durationBase, and ThemeRoleKind includes easing and scale. A modal dialog fades its backdrop in and fades and scales its box from motion.scaleEnter, over motion.durationBase.

The symbol search offers its classes and spread operators as the host configures them: search.spreads switches spreads off or offers only the listed operators (SpreadOperatorId), search.allClasses hides or renames the All chip, and search.classSelection: 'multiple' lets the viewer select several classes, which the feed receives as classes (DatafeedSearchOptions). A feed's config().classes may declare a class with narrower classes (SearchClassNode), which the search offers in a second row of chips. openSymbolSearch and mountSymbolSearch take the same options.

Hosts choose which chart styles a chart offers with styles, in the order the style picker lists them; a style left out has no command, the picker is not shown for a single style, and a saved layout naming a style left out opens on the first offered one.

Hosts choose which timeframes a chart offers with timeframes, presets or other tokens, and can switch custom timeframes off with customTimeframes: false; a timeframe left out has no command and no chip or row in the picker, setTimeframe ignores it, the picker is not shown for a single timeframe, and a saved layout naming a timeframe left out opens on the smallest offered one.

Hosts choose which layouts a chart offers with layouts, a list of arrangement codes, and which sync switches the viewer may change with layoutSync; an arrangement left out has no tile and the setter ignores it, the layout setup menu is not shown when there is nothing to choose, a switch left out holds the host's layout.sync value, and a saved layout naming an arrangement left out opens on the offered one with the most charts not above its count while carrying the charts it does not show, so a re-save keeps them. ui.topBar.layoutSetup and ui.topBar.savedLayouts hide one of the two layout menus. Without a layouts store the saved-layouts menu is not shown, and Download chart data sits in the image menu.

A menu that has no rows to show (nothing to remove, no saved layouts, loading) states it at the rows' own size and inset, in the muted ink.

Hosts choose how the chart's own controls present what the access policy refuses with access.refused: 'disable' (the default) draws it disabled as before, and 'hide' leaves it out, so a refused drawing tool is not in the rail's flyouts, on the favorites bar or in the glyph picker, a refused indicator is not in the indicator browser, and a control or menu row whose command is refused is not drawn, with an emptied section, group or rule going too. A permitted command that cannot run now stays drawn and disabled, the controls follow a policy that changes, nothing stored (favorites, drawings, indicators) is rewritten, and every other door refuses as before. Any other value is a setup error from createChart.

Hosts choose which drawing tools a chart offers with drawingTools, a list of tool types; a tool left out is not in the rail's flyouts, on a group's face, on the favorites bar, on the rail (measure, zoom) or among the glyph picker's kinds, with an emptied section or group going too, and arming it or copying a drawing of it (clone, paste, a modifier-drag duplicate) is refused from every door. Drawings of it already on the chart render and stay fully editable and deletable, the eraser is always offered, a listed tool the access policy refuses follows access.refused, and nothing stored (favorites, a group's remembered face) is rewritten. An empty list, an unknown type and a repeated type are setup errors from createChart. The drawing layer takes copies to refuse a copy by type.

Hosts tell a chart that the access policy answers differently with widget.refreshAccess(): every control, rail tool and group, the favorites bar, the glyph picker, the legend's row controls and every open menu, flyout and dialog (the indicator browser among them) read the policy again at once, commands.onChange listeners hear it, and nothing stored or on the chart changes.

The public placeImage on a chart's drawings asks the access policy for the image tool, as arming it and chart.drawings.placeImage do; it placed an image the policy refused.

Hosts choose which built-in indicators a chart offers with builtInIndicators, a list of built-in definition ids; one left out is not in the indicator browser (built-ins, favorites, search results), the host's picker listing is handed only the offered ids, and adding one is refused from every door (chart.indicators.add answers denied, indicators.add and indicators.set add none, a re-tiled pane copies the first chart's studies without it). Instances of it already on the chart render and stay fully editable and removable, a host's own definitions and picker content are never filtered, a listed built-in the access policy refuses follows access.refused, and nothing saved is rewritten. A non-list, an empty list, an unknown id, a repeated id and an indicators instance whose built-in is not listed are setup errors from createChart.

Content already on a chart is never dropped by the access policy, which refuses only creating new content: an indicator whose definition access.indicator refuses stays when indicators.set or chart.indicators.update edits it or any other study (an edit that would move one onto a refused definition leaves it as it stands, and a new instance is still left out), where both dropped it. A drawing whose tool access.drawingTool refuses is not cloned, pasted or duplicated by a modifier-drag, as a tool drawingTools leaves out is not, and it still selects, edits and deletes as before.

A restore keeps the studies the access policy refuses: loading a saved chart or a layout, an undo and a redo put back an indicator whose definition access.indicator refuses like any other, where they left it out (so a load followed by a save rewrote the viewer's content without it). The policy refuses adding, never restoring, and the restored study renders and stays editable and removable. Drawings of a tool access.drawingTool refuses or drawingTools leaves out, and built-ins builtInIndicators leaves out, already restored whole.

Hosts choose which range presets the bottom bar offers with ranges, a list of preset keys in the order the bar draws them; a preset left out has no command and no button and chart.range.set ignores its key, and an empty list offers no range buttons while the clock, timezone picker and session view stay. A non-list, an unknown key and a repeated key are setup errors from createChart.

Hosts choose which display timezones a chart offers with timezones, zone ids and exchange; a choice left out has no command and no row in the timezone picker, chart.timezone.set and setTimezone ignore it, the picker is not shown for a single choice (the clock still reads that zone), and a stored or preferred choice left out opens on the first listed one without being rewritten. The exported TIMEZONES, isTimezoneChoice and timezoneListing are not filtered. A non-list, an empty list, an unknown id and a repeated id are setup errors from createChart.

Hosts open the chart's own timeframe list away from a chart with openTimeframePicker, a drop-down under a control the page owns, and mountTimeframePicker, a card in a box the page owns (TimeframePickerOptions, TimeframePickerHandle, MountedTimeframePicker). Both draw the same unit groups, rows and custom composer as the chart's picker, take timeframe, timeframes and customTimeframes with the setup errors createChart throws, leave out a row resolutions or supportedResolutions does not serve, paint their own theme root from theme, locale and icons, and hand the chosen token to onPick. They carry no saved chips or stars and keep nothing.

Validation covers 3,735 unit tests, packed JavaScript and TypeScript consumers, and 42 conformance checks in each of Chromium, Firefox and Playwright WebKit. The first-party app passed 2,774 unit tests, its production build and its full browser suite against the exact tarball. The package is published with npm provenance.