Releases: ramp4-pcar4/ramp4-pcar4
RAMP v4.6.0
Documentation Site (pinned at v4.6.0
).
See the v4.0.0 Release Notes for more information if upgrading from RAMP 2/3.
New Features
- Support for Arcade expressions in layer drawing order (#2152)
- File Layer Loading Performance (#2173)
- Optional map extent enforcement (#2176)
Bug Fixes
- Race condition in highlighting requests mitigated (#2129)
- Maptips will work accurately on a non-unique draw order (#2151)
- File Layer Icon, Attribute Performance, & Faster grid render (#2164)
- Some tooltips would position incorrectly on multi-instance pages (#2166)
- Legend reload button disabled when layers don't support reloading (#2170)
- Export fixture will no longer break when given sparse configuration object (#2171)
Documentation Updates
- Updates of French text to officially translated text (#1743)
Internal Updates
- ESRI API updated to
v4.29
(#2157)
Known Issues
The following are the major issues that may impact typical use-cases. These were also present in v4.0.0
.
Maptips
- If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
External Fixtures
- Migration to Vue 3 has broken some methods of generating fixtures without a build process. This was erroneously considered fixed at the
v4.0.0
release. See #692
RAMP v4.5.0
Documentation Site (pinned at v4.5.0
).
See the v4.0.0 Release Notes for more information if upgrading from RAMP 2/3.
New Features
- Maptips will now move in relation to the mouse cursor (#952 , #2077)
- Config flag to hide geometry measurement fields (#1945)
- Identify panels now single panel in RAMP2 style (#2091)
- Improved contrast of map caption text (#2120)
- Config option to suppress number format localization (#2122)
Bug Fixes
- Informational items in notification tray no longer have checkbox icons (#1663)
- Scrolling added for large appbar overflow content (#1866)
- Race condition for layer order during the initialize phase (#2006)
- Focus rectangle on additional legend icons resized (#2020)
- Race condition during Fog highlighter creation (#2094)
- Maptips would break if configuration throttle amounts were set low (#2101)
- Transient layer errors via Wizard mitigated (#2103)
- Layer type in the Wizard no longer changes to the system value (#2105)
Documentation Updates
- Help content for using the wizard to add layers (#2097)
- Clearer naming of Image Server sources in the wizard (#2116)
Internal Updates
- CSS Class added to target grid clear-all button (#1959)
- Changes to internal handling of layer order (#2095)
Breaking Changes
Please be aware the file names of the built libraries have changed. Of course they can be renamed but any automated extracting / copying routines will need adjusting.
Known Issues
The following are the major issues that may impact typical use-cases. These were also present in v4.0.0
.
Maptips
- Cannot derive topmost feature on a layer without a
drawOrder
, or withdrawOrder
on a non-unique field (#931) - If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
External Fixtures
- Migration to Vue 3 has broken some methods of generating fixtures without a build process. This was erroneously considered fixed at the
v4.0.0
release. See #692
RAMP v4.4.0
Documentation Site (pinned at v4.4.0
).
See the v4.0.0 Release Notes for more information if upgrading from RAMP 2/3.
New Features
- Confirmation on wizard panel for an added layer's fate (#1867)
- Ability to unpin the metadata columns in the grid (#1942)
- Sublayer picker in the wizard can now toggle between nested and flat view (#1949)
- Export CSV from the grid (#1964)
- Ability to remove the language selector via configuration (#1985)
- Allow Search in Help Menu (#2012)
- Basemap Recovery (#2027)
- Markdown support for metadata display (#2045)
- Ability to hide fields and override field aliases in Details view (#2053)
- Layer name moved from Settings panel title to panel body (#2071)
- Ability to specify attribute order in layers that support standard attributes (#2076)
Bug Fixes
- RAMP Instance would crash if its WebGL Context was destroyed (#1908)
- Grid state could become corrupted after changing languages (#1965)
- Export could error if sub-fixtures were removed (#1995)
- Move right button will now be disabled on column hide (#2011)
- Vertical scroll bar in the export panel could displace the page boundary on the preview (#2013)
- Legend would duplicate Map Image Sublayer entries (#2021)
- API call to show symbology on legend item with no symbols resulted in spinner (#2025)
- North pole specifications in config file were ignored (#2030)
- WFS / OGC API Features loader was using older GeoMet API parameter, resulting in incorrect batching during layer load (#2035)
- Metadata view was not respecting XML formatting (#2038)
- RAMP 2 configuration converter would reverse layer order, miss some legend controls (#2042)
- Fixed parsing error for help search no results French (#2046)
- The Details view would erase any field named
Symbol
(#2051) - Fixtures would not see layer-bound fixture configuration of layers added via the API (#2052, #2068)
- Hyperlinked name fields would render as raw HTML in Details title (#2073)
- Fix confusing TreeSelect behaviour (#2075)
- Broken support for Imagery Layers corrected (#2085)
- Disable maptips on layesr that don't support features (#2099)
- Accessibility correction on labels in the scalebar control (#2109)
Internal Updates
Breaking Changes
- The WFS / OGC API Features layer loader has been updated to match GeoMets current API. This means any service urls using the older
startIndex
parameter will now load all records. Change tooffset
when migrating (#2035)
Known Issues
The following are the major issues that may impact typical use-cases. These were also present in v4.0.0
.
Maptips
- Cannot derive topmost feature on a layer without a
drawOrder
, or withdrawOrder
on a non-unique field (#931) - If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
External Fixtures
- Migration to Vue 3 has broken some methods of generating fixtures without a build process. This was erroneously considered fixed at the
v4.0.0
release. See #692
RAMP v4.3.0
Documentation Site (pinned at v4.3.0
).
See the v4.0.0 Release Notes for more information if upgrading from RAMP 2/3.
New Features
- After reprojection, the map will attempt to position itself in the most similar view instead of attempting to fit the entire old view #1831
- Data Layers (features without geometry) (#1842)
- Tree picker for sublayers in the Add Layer Wizard (#1854)
- Maptips can be up to 3 lines, showing more information (#1902)
- Grid sizing changes to allow more visible data; shorter rows, thinner metadata columns (#1912)
- Grid search box now centered (#1912)
- Grid action button columns are now frozen (#1912)
- Configurable zoom-to-map icon (#1912)
- Better support for multiple hyperlinks in grid cells (#1912)
- Ability to have the RAMP instance scroll into view if a teleported grid executes a map action (#1912)
- Better hovertips on scalebar (#1936)
- Customizable grid row buttons (#1958)
- Footnote component for Export fixture (#2004)
Bug Fixes
- Grid column reordering could break (#1827)
- Host page could influence RAMP CSS (WET in particular) (#1833 #1834)
- Tile layers in mismatched schemas will now state-transition gracefully (#1855)
- Grid title would default to layer ID code (#1879)
- Legend buttons were not sized correctly (#1887)
- Legend items were unaligned (#1889)
- Geosearch filter icon was not standard gray (#1893)
- Various errors would happen if the instance reloaded with certain resources active (#1884 #1885 #1907)
- Informative legend icons were not keyboard accessible (#1903)
- Layer Groups added via the Wizard may not be collapsible (#1904)
- Wizard would allow a nameless layer to be added (#1909)
- Re-ordering grid columns could introduce extra white-space (#1914)
- Reloading errored layers would not draw symbols in legend (#1915)
- Merge grids with mapped attribute names would not un-map when passing row data to Details view (#1917)
- Multiple layer filter changes in a short time frame could corrupt the grids tracking of filtered rows (#1925)
- Grid row numbers could become scrambled (#1933)
- Static grid filters would not convey non-interactivity ( #1935)
- Using the enter key on the final step of the wizard could cause a page reload (#1944)
- When changing basemap projections, the overview map could give false warnings about slow drawing (#1951)
- Page could jump when expanding legend icons (#1968)
- Adding loaded layers via legend API could result in infinite loading animation (#1974)
- Panel re-ordering buttons were acting as if teleported panels were in the app (#1977)
- Export timestamp option was not working (#1980)
- Export legend is displaying items that aren't in the map legend (#1981)
- Legend "View All" dropdown menu had wrong width for French text (#1990)
- Custom north pole icons were ignored (#1992)
- Legend rows in error status were missing keyboard focus indicators (#2010)
Breaking Changes
- The default map reprojection behavior has changed. After changing basemap schemas, the new map view may not include the entire area that was visible prior to reprojection. However it should be more accurate (no more wildly different results).
Known Issues
The following are the major issues that may impact typical use-cases. These were also present in v4.0.0
.
Maptips
- Cannot derive topmost feature on a layer without a
drawOrder
, or withdrawOrder
on a non-unique field (#931) - If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
External Fixtures
- Migration to Vue 3 has broken some methods of generating fixtures without a build process. This was erroneously considered fixed at the
v4.0.0
release. See #692
RAMP v4.2.0
Documentation Site (pinned at v4.2.0
).
See the v4.0.0 Release Notes for more information if upgrading from RAMP 2/3.
New Features
- Configurable maximum layer load time (#1485)
- Ability to merge different layers into a single data table (#1662)
- Config option to globally hide Object ID fields (#1667)
- Ability to pipe panel content to an external
div
(#1668) (#1729) - Better presentation of object data in data grid (#1676)
- User notification when Map Image Layers cannot be filtered (#1684)
- Error notification for ESRI MapServers that do not expose
query
endpoints (#1685) - User notification if Tile layer has projection mis-match with map (#1704)
- Improved wizard error notification for unavailable services (#1708)
- Notifications and efficiency improvements when zooming to large geometries (#1720)
- Customize background colour per basemap (#1746)
- Improved API methods to get lists of layers (#1749)
- Slow layer notifications will use layer name if available (#1753)
- The sublayer selector in the wizard will size to the available space (#1779)
- Word wrapping added to wizard sublayer selector (#1790)
- Vue templating in grid cells (#1793)
Bug Fixes
- Added generic alt tag for images embedded in details panel (#1467)
- Images in Help documentation were missing
alt
tags (#1550) - Wizard would error attempting to load a Map Image Layer with a service that had layer indexes out of order (#1654)
- Map Image Layer group sublayers would not default to the service name (#1656)
- Map Image Layer group contents in the legend, when auto-generated, would be reverse order compared to the server (#1659)
- Data table column dropdown selector would not overflow nicely when too long (#1670)
- Legend could corrupt when changing languages (#1679)
- Legend entry vertical size could change when being highlighted (#1689)
- Pinned panels would obscure newly opened panels in mobile view (#1694)
- Data table zoom-to-feature would fail if ObjectID field was not
OBJECTID
(#1696) - Unique Value Renderers that had
null
as a potential value would break symbol lookups and filters (#1697) - When adding Tile layers, a symbol stack would not appear in the legend (#1703)
- Maptip would remain on if mouse left the map (#1714)
- Stop old demo builds from remaining in the repo as commits (#1716)
- Geosearch would fail to zoom to NTS result (#1717)
- Object ID field name was hardcoded in details panel view (#1721)
- Legend would not show layer drawing animation on initial draw (#1728)
- Grid apply-to-map button would be enabled in scenarios it would do nothing (#1732)
- Notification text was not selectable (#1748)
- Very difficult to copy text out of data grid (#1758)
- Potential for details not to update on WMS layer (#1767)
- Pinned panel would overpower new panel for small non-mobile screen sizes (#1787)
- Errors in the wizard when attempting to add WMS layers (#1802)
- Stock details view would show ESRI dates as epoch integers (#1804)
- Details would attempt to highlight WMS identify results (#1813)
- Keyboard controls and guides for navigating into panels was broken (#1814)
- Reloading with a data grid open could crash the app (#1824) (#1835)
- Mouse icon would allow drag-pan on the left-most grid column (#1828)
- Grid text search was using a different matching paradigm than the corresponding map filter (#1829)
- Unofficial French translations were being prefixed with
[fr]
(#1830)
Internal Updates
- Remove console warnings from
ag-grid
(#1652) - Improvements to code to remove linting and typescript errors (#1657, #1661)
- Support for debugging inside VSCode (#1631)
- Removal of unused mixin function (#1669)
Breaking Changes
- Removal of the
terminate
fixture hook (which was not being called anyways) (#1665) - Default event handler name
ramp_layer_remove_closes_grid
is nowramp_layer_remove_checks_grid
(#1698) - Changes to the behavior of methods on the instance
geo.layer
API (#1749)getLayer()
will now find any layers that are registered with the instance. Previously it would only find loaded, non-errored layers.allLayers()
will return the list of all layers registered with the instance. Previously it would only return loaded, non-errored layers.allErrorLayers()
will return the list of all registered layers in an error state. Previously it would only return errored layers that did not occupy the map stack.
- All RAMP CSS style definitions have moved from class
ramp-app
to classramp-styles
. This will only impact any pre-release adopters of the panel teleport feature (#1730) - The
pinned()
method on thePanelAPI
will now returnundefined
if no panel is pinned. Previously it would returnnull
(#1797)
Doc Updates
- Fancy docsite (#892)
- Official French translations (#1505)
- Added more button icons to help documentation (#1653)
- Doc page content (#1672)
Known Issues
The following are the major issues that may impact typical use-cases. These were also present in v4.0.0
.
Maptips
- Cannot derive topmost feature on a layer without a
drawOrder
, or withdrawOrder
on a non-unique field (#931) - If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
External Fixtures
Migration to Vue 3 has broken some methods of generating fixtures without a build process. This was erroneously considered fixed at the v4.0.0
release. See #692
RAMP v4.1.0
See the v4.0.0 Release Notes for more information if upgrading from RAMP 2/3.
Documentation
- The Makeshift Docsite, pinned at
v4.1.0
. - The Current Docsite, which may have improved content but may also include changes added after this release.
New Features
- Layers based on local files can be configured to be re-loadable. This may double memory impact for large files (#504)
- Import wizard will now only present fields with valid data for lat & lon choices when loading CSV files (#958)
- Legend indicators for layers with scale level visibility ranges (#1054)
- Permanent attribute filters. More efficient when only dealing with a subset of a hosted layer (#1464)
- Geosearch now supports street addresses. Result ranking also improved (#1469)
- Customizable symbol stacks in the legend (#1545)
- Geosearch config options for sorting and filtering results (#1576, #1577)
- Ability to have basemap selector entries as text-only (#1606)
- Sublayer name search in Wizard (#1629)
Bug Fixes
- Ensure total attribute download when server default order is not ObjectID (#843)
- Geosearch results now zooms to location bounding box instead of location center at fixed map scale (#1544)
- Event handler setup would critically fail if instance option
startRequired
was set to true (#1563) - Stop anchor tags from having a
#
target, which could modify the site url (#1571) - Details pane would take up too much horizontal space in mobile layouts (#1590)
- Layer Settings panel not opening (#1601)
- Slow highlight requests would appear after Details panel closed (#1604)
- Basemaps with multiple layers has improper image positioning on basemap selector fixture (#1605)
- If a Ramp instance was inside a web form, hitting Enter in certain text boxes would submit the form (#1611)
- Focus outlines on status bar were black-on-black (#1625)
- Small bug in Geosearch province filter (#1634)
- Could not mouse-highlight text in grid column filters (#1638)
- Bad image tag formatting in Help content (#1643)
- Custom batch size in WFS loader ignored (#1651)
Internal Updates
- ESRI JS API updated to
v4.26
- Migrate
axios
toredaxios
(#1023) - Updating numerous library dependencies (#1547)
- Calls to EPSG projection definition service are now always
https
(#1547) - Application components updated to use Vue Composition API instead of Vue Options API (#1586)
- Local build bug where Mapnav rendering had a race condition (#1589)
- Console message with version details now only prints once per page (#1600)
- Efficiency in rendering results list in Details panel (#1609)
- Geosearch zoom no longer derives extent, just uses polygon (#1617)
- Memory use improvements when using cached file layers (#1623)
vuex
has been migrated topinia
. See the store doc page for more details (#1626)- Migrate
enum
s toconst enum
s (#1647)
Breaking Changes
- The
started
boolean property on theInstanceAPI
is now read only. Setting this value manually would have broken the app. - When a layer is created from a local file via the Add Layer Wizard, the Layer API object will now have an empty string in the
url
property. - If accessing internationalization string functions directly in custom components, the API has been renamed. The old pattern of
.$vApp.$functionName()
is now.$i18n.functionName()
- E.g. Common text fetch call
.$vApp.$t(key)
has moved to.$i18n.t(key)
- E.g. Common text fetch call
- Given the internal store system has migrated to
pinia
, any 3rd partyvuex
stores or code that is directly manipulatingvuex
stores from outside (not encouraged, but still possible) will require an update. See the store doc page for more details. - Due to apparent initialization timing changes introduced at ESRI
v4.26
, the following changes have been made- In the
hilite
fixture API, methodgetHilightLayer()
is nowasync
. - Events
map/created
andmap/refreshend
are now raised after the internal Map View has finished initializing. This should not be a breaking change, but it is possible some outside code may find these events appear slightly later than before and could trigger lurking race conditions. Thecreated
property on the APIMap
object is also now set at the same time.
- In the
Doc Updates
Known Issues
The following are the major issues that may impact typical use-cases. These were also present in v4.0.0
.
Maptips
- Cannot derive topmost feature on a layer without a
drawOrder
, or withdrawOrder
on a non-unique field (#931) - If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
External Fixtures
Migration to Vue 3 has broken some methods of generating fixtures without a build process. This was erroneously considered fixed at the v4.0.0
release. See #692
RAMP v4.0.0
General Info & Usage
This is the initial release of RAMP version 4.
Find a bug? We would love to hear about it.
Documentation
- Our makeshift "docsite" can be found here. The link is pinned at
v4.0.0
. - The startup page in particular is useful for quickly adding RAMP to a webpage.
- Some sample pages can be viewed to see the platform in action.
- The Current Docsite can also be viewed. It may have improved content but may also include changes added after this release.
Breaking Changes
RAMP4 was written from the ground up using different web frameworks (significantly, Angular 1 has been replaced by Vue 3 and the ESRI JS API migrated from v3 to v4). Part of the initiative was to restructure the architecture to mitigate the restrictive nature of RAMP2. As such, pretty much everything is different. The major impacts will be highlighted here.
Instantiation
Instances of RAMP are no longer created with specially attributed divs on the host page.
E.g. <div is="rv-map"></div>
Instances are now generated via javascript calls which target a desired div
. This allows page authors more control over when instances get generated.
E.g.
const instanceAPI = RAMP.createInstance(
document.getElementById('map-div-id'),
configObject,
optionsObject
);
See the startup page for further details.
API Interface
The API is entirely different than the RAMP2 API. Notably, there are no observables; an event system is used instead.
Some API objects may be wrapped in Proxys. This is a side effect of Vue Reactivity, and the objects can be interacted with as if the proxy was not there.
Visit the API Section of the docs to see what content is currently available.
Details Templating
RAMP2 details templates used Angular markup. Since RAMP4 uses Vue, any old templates will not work. Manual conversion is required. Visit the details doc page for further information on the new templating system.
Identify Modes
highlight
andhaze
are now managed viahilight
fixtures.details
can be turned off or overridden via the default event handler namedramp_map_identify_opens_identify_results
marker
has not been implemented yet.
Related: #130
Configuration
The configuration schema is different than RAMP2. Visit the Configuration Section of the docs, or brave the schema file to learn about the RAMP4 configuration.
The library exposes a converter function configUpgrade()
which can be used outside of a RAMP instance to upgrade a RAMP2 config file to a RAMP4 config file. The function accepts a single config object, or an array of config object (each object having a unique language code). Any config contents that cannot be converted will be broadcast on the browser console.
const r4config = RAMP.configUpgrade([r2configEN, r2configFR]);
There is also a similar layerConfigUpgrade(r2layerConfig)
function that can be used to convert individual layer config objects (e.g. while parsing the output of an RCS response).
RAMP 2 Missing Features
One of the challenges of maintaining RAMP2 was that it had a lot of specific behaviors coded in the core of the library. This made customizations difficult, requiring things like large refactors, numerous config flags and branching logic, or dirty hacks.
RAMP4 embraces a new architecture approach, leveraging something we named fixtures
. They are similar to plugins, however most of the "stock" components out of the box (e.g. the legend, the grid) are implemented as fixtures. This allows things to be removed or replaced, and new components to be added. As an example, one could develop an entirely different grid fixture and use it instead of the stock grid fixture provided.
As such, some features from RAMP2 have not been ported, the idea being specific fixtures could be written that would meet specific requirements, rather than us attempting to provide some type of universal solution.
Other features are just not completed yet and may be prioritized in the future.
Autolegend
The legend fixture that ships with the ramp core only supports "structured" legends. Any type of automated adaptive legend construction should be implemented using the RAMP4 architecture: fixtures, events, and the RAMP API.
For simple cases, a fixture or custom script could easily parse the layer configuration and issue API calls on an empty legend to construct basic legend items. This allows the implementer flexibility in how their "autolegend" behaves. In the future, a basic optional fixture that does this may be included as part of the library.
For more complex cases, a custom legend fixture can be developed and replace the default legend fixture.
Bookmarking
The RAMP2 bookmarking function was convenient, but also inflexible in what data it could store. The RAMP4 philosophy is pages should implement their own bookmarking, thus allowing developers control over data, formats, and behavior. Data can be extracted and set via the API.
In the future, we may explore rudimentary bookmarking (as a convenience for simple and common requirements), and develop more helper routines on the API to support the extraction and setting of application state.
RCS Integration
Similar to bookmarking, any integration with RCS has been removed from the RAMP core. Developers can now write scripts or fixtures to integrate with any data source they choose, leveraging the API to co-ordinate with the RAMP instance.
WMS Styles
The ability to pick alternate styles on WMS layers is currently not supported. This also impacts the legend graphic that is automatically downloaded. The default style will be used. (#603)
Customized Exports
A rudimentary export fixture has been developed (export
). Sub-components of that fixture are also implement as fixtures, meaning developers willing to deep-dive can write modified/replacement components for desired customizations. Alternately new export fixtures can be written from scratch.
That said, the RAMP2 "custom export plugin" framework has not been ported and is not compatible with RAMP4.
Plugins
Most RAMP 2 plugins have not been migrated. The exception is Areas of Interest, which is available via the optional fixture areas-of-interest
.
Back to Cart, Co-ordinate Info, or anything in the Contributed Plugins repo would require a migration and likely should be implemented as fixtures.
Other Missing Features
- There is no UI support (e.g. indicators in the legend) for layers which are only visible at specific scales (#1054)
- There is no support for timed-refresh layers (i.e. layers with data that gets refreshed every given interval) (#1018)
- Hovertips are not supported on
graphic-layer
graphics. These would be analogous to graphics in RAMP2SimpleLayer
s (#998) - When loading CSV files via the import wizard, potential co-ordinate fields will not be pre-checked to ensure they contain valid lat/lon numbers (#958)
- Cannot have a specific data grid auto-open at application start via configuration (#909)
- There is no on-screen "bounding box" to be displayed for layers. It is questionable if this will ever be implemented (#194)
- The legend does not support the customization of the symbology stack
- There is no support for a "blank" basemap
- Grid columns do not support a "Selector" type filter
Known Issues
Maptips
Changes to ESRI's hitTest
during our development phase has introduced some undesirable behaviors regarding maptips.
- Cannot derive topmost feature on a layer without a
drawOrder
, or withdrawOrder
on a non-unique field (#931) - If a raster layer is covering a vector layer, the maptip engine currently cannot realize this and will show maptips for the covered vector features (#800)
- No maptips on highlighted features (#1320)
New Things
Panel API
While RAMP2 had fixed panels in fixed positions, RAMP4 utilizes a Panel API for a more flexible experience. Panels open left to right across the screen; if a new panel has no room, the leftmost panel is minimized.
Panels can be manually repositioned, minimized, pinned (i.e. avoid auto-minimization), and can optionally be sized. They are primarily, but not necessarily, associated with fixtures, such as the legend, geosearch, or grid.
Panels also assist in a friendlier mobile experience. On a phone-sized screen, only one panel is visible at a time and will occupy the majority of the viewing space.
Appbar
On the left side of the UI is an appbar. This tracks any open panels (similar to how a Windows Task Bar tracks windows), and can also host buttons to launch panels. Minimized panels can be restored via the appbar.
Appbar buttons can also be configured to perform custom actions.
Notification API
...