From fd61914f03dd117b8ecfbe031513e5ba38db9d72 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 10:38:46 -0400
Subject: [PATCH 001/131] alphabetize icons, update generated file
---
packages/ui/icon/buildIcons.ts | 9 +++++----
packages/ui/icon/iconList.ts | 2 +-
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/packages/ui/icon/buildIcons.ts b/packages/ui/icon/buildIcons.ts
index 0987c53a7f..123efdf257 100644
--- a/packages/ui/icon/buildIcons.ts
+++ b/packages/ui/icon/buildIcons.ts
@@ -1,4 +1,3 @@
-/* eslint-disable import/no-unused-modules */
import { listIcons } from '@iconify/react'
import { writeFileSync } from 'fs'
@@ -8,11 +7,13 @@ import { loadIcons } from './iconCollection'
loadIcons()
const generate = async () => {
- const iconList = `// generated file - do not modify directly\n// prettier-ignore\nexport const iconList = ${JSON.stringify(
- listIcons()
+ const iconList = listIcons().sort()
+
+ const output = `// generated file - do not modify directly\n// prettier-ignore\nexport const iconList = ${JSON.stringify(
+ iconList
)} as const\n`
- writeFileSync('./icon/iconList.ts', iconList)
+ writeFileSync('./icon/iconList.ts', output)
console.info(`Generated Icon List with ${listIcons().length} icons`)
}
diff --git a/packages/ui/icon/iconList.ts b/packages/ui/icon/iconList.ts
index 701a4b7aca..5f31c10683 100644
--- a/packages/ui/icon/iconList.ts
+++ b/packages/ui/icon/iconList.ts
@@ -1,3 +1,3 @@
// generated file - do not modify directly
// prettier-ignore
-export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","carbon:app-switcher","carbon:arrows","carbon:back-to-top","carbon:checkbox-undeterminate","carbon:cloud-lightning","carbon:cloud-rain","carbon:cloud-snow","carbon:delete","carbon:letter-aa-large","carbon:sunny","simple-icons:tiktok","ph:map-pin-fill","mdi:map-marker"] as const
+export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
From fca73c3f552990fa6f748fc7efc34e1c361b4f30 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 10:57:40 -0400
Subject: [PATCH 002/131] remove unused eslint disable
---
apps/app/src/pages/org/[slug]/index.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/apps/app/src/pages/org/[slug]/index.tsx b/apps/app/src/pages/org/[slug]/index.tsx
index 350cd580be..e324325160 100644
--- a/apps/app/src/pages/org/[slug]/index.tsx
+++ b/apps/app/src/pages/org/[slug]/index.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable i18next/no-literal-string */
import { createStyles, Divider, Grid, Skeleton, Stack, Tabs, useMantineTheme } from '@mantine/core'
import { useElementSize, useMediaQuery } from '@mantine/hooks'
import { type GetStaticPaths, type GetStaticPropsContext, type InferGetStaticPropsType } from 'next'
From 7133faeb0db6d2d1019a6cc62632c1258a7c8278 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 14:55:48 -0400
Subject: [PATCH 003/131] extract providers, add edit mode provider/hook
---
apps/app/src/pages/_app.tsx | 96 ++++++++++--------------------
apps/app/src/providers/index.tsx | 39 ++++++++++++
packages/ui/hooks/index.ts | 2 +-
packages/ui/hooks/useEditMode.ts | 11 ++++
packages/ui/providers/EditMode.tsx | 29 +++++++++
5 files changed, 110 insertions(+), 67 deletions(-)
create mode 100644 apps/app/src/providers/index.tsx
create mode 100644 packages/ui/hooks/useEditMode.ts
create mode 100644 packages/ui/providers/EditMode.tsx
diff --git a/apps/app/src/pages/_app.tsx b/apps/app/src/pages/_app.tsx
index 838b823203..ca42195fff 100644
--- a/apps/app/src/pages/_app.tsx
+++ b/apps/app/src/pages/_app.tsx
@@ -1,14 +1,13 @@
-import { MantineProvider, Space } from '@mantine/core'
-import { ModalsProvider } from '@mantine/modals'
+import 'core-js/features/array/at'
+
+import { Space } from '@mantine/core'
import { Notifications } from '@mantine/notifications'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
import { Analytics } from '@vercel/analytics/react'
import { type NextPage } from 'next'
import { type AppProps } from 'next/app'
-import { Work_Sans } from 'next/font/google'
import { useRouter } from 'next/router'
import { type Session } from 'next-auth'
-import { SessionProvider } from 'next-auth/react'
import { appWithTranslation } from 'next-i18next'
import { DefaultSeo, type DefaultSeoProps } from 'next-seo'
@@ -17,49 +16,24 @@ import { Footer } from '@weareinreach/ui/components/sections/Footer'
import { Navbar } from '@weareinreach/ui/components/sections/Navbar'
import { useScreenSize } from '@weareinreach/ui/hooks/useScreenSize'
import { BodyGrid } from '@weareinreach/ui/layouts/BodyGrid'
-import { GoogleMapsProvider } from '@weareinreach/ui/providers/GoogleMaps'
-import { SearchStateProvider } from '@weareinreach/ui/providers/SearchState'
-import { appCache, appTheme } from '@weareinreach/ui/theme'
+import { Providers } from '~app/providers'
import { api } from '~app/utils/api'
import nextI18nConfig from '../../next-i18next.config.mjs'
-import 'core-js/features/array/at'
-
-const fontWorkSans = Work_Sans({ subsets: ['latin'] })
const defaultSEO = {
titleTemplate: '%s | InReach',
defaultTitle: 'InReach',
additionalLinkTags: [
- {
- rel: 'icon',
- href: '/favicon-16x16.png',
- sizes: '16x16',
- },
- {
- rel: 'icon',
- href: '/favicon-32x32.png',
- sizes: '32x32',
- },
- {
- rel: 'icon',
- href: '/favicon-96x96.png',
- sizes: '96x96',
- },
- {
- rel: 'apple-touch-icon',
- href: '/apple-icon-120x120.png',
- sizes: '120x120',
- },
- {
- rel: 'apple-touch-icon',
- href: '/apple-icon-180x180.png',
- sizes: '180x180',
- },
+ { rel: 'icon', href: '/favicon-16x16.png', sizes: '16x16' },
+ { rel: 'icon', href: '/favicon-32x32.png', sizes: '32x32' },
+ { rel: 'icon', href: '/favicon-96x96.png', sizes: '96x96' },
+ { rel: 'apple-touch-icon', href: '/apple-icon-120x120.png', sizes: '120x120' },
+ { rel: 'apple-touch-icon', href: '/apple-icon-180x180.png', sizes: '180x180' },
],
} satisfies DefaultSeoProps
-const MyApp = (appProps: AppPropsWithGridSwitch) => {
+const MyApp = (appProps: AppPropsWithPageOptions) => {
const {
Component,
pageProps: { session, ...pageProps },
@@ -71,46 +45,36 @@ const MyApp = (appProps: AppPropsWithGridSwitch) => {
const autoResetState = Component.autoResetState ? { key: router.asPath } : {}
- const PageContent = Component.omitGrid ? (
-
- ) : (
-
+ const PageContent = () =>
+ Component.omitGrid ? (
-
- )
+ ) : (
+
+
+
+ )
return (
-
+ <>
-
-
-
-
-
-
- {PageContent}
- {(isMobile || isTablet) && }
-
-
-
-
-
+
+
+
+
+ {(isMobile || isTablet) && }
+
+
-
-
-
+
+
+ >
)
}
export default api.withTRPC(appWithTranslation(MyApp, nextI18nConfig))
-export type NextPageWithoutGrid
= NextPage
& {
+export type NextPageWithOptions = NextPage & {
omitGrid?: boolean
autoResetState?: boolean
}
-type AppPropsWithGridSwitch = AppProps & { Component: NextPageWithoutGrid; session: Session }
+type AppPropsWithPageOptions = AppProps<{ session: Session }> & { Component: NextPageWithOptions }
diff --git a/apps/app/src/providers/index.tsx b/apps/app/src/providers/index.tsx
new file mode 100644
index 0000000000..5468ad505c
--- /dev/null
+++ b/apps/app/src/providers/index.tsx
@@ -0,0 +1,39 @@
+'use client'
+import { MantineProvider } from '@mantine/core'
+import { ModalsProvider } from '@mantine/modals'
+import { Work_Sans } from 'next/font/google'
+import { type Session } from 'next-auth'
+import { SessionProvider } from 'next-auth/react'
+
+import { EditModeProvider } from '@weareinreach/ui/providers/EditMode'
+import { GoogleMapsProvider } from '@weareinreach/ui/providers/GoogleMaps'
+import { SearchStateProvider } from '@weareinreach/ui/providers/SearchState'
+import { appCache, appTheme } from '@weareinreach/ui/theme'
+
+const fontWorkSans = Work_Sans({ subsets: ['latin'] })
+
+export const Providers = ({ children, session }: ProviderProps) => {
+ return (
+
+
+
+
+
+ {children}
+
+
+
+
+
+ )
+}
+
+type ProviderProps = {
+ children: React.ReactNode
+ session: Session
+}
diff --git a/packages/ui/hooks/index.ts b/packages/ui/hooks/index.ts
index aea6fd8dfe..2f740a8228 100644
--- a/packages/ui/hooks/index.ts
+++ b/packages/ui/hooks/index.ts
@@ -1,6 +1,6 @@
-/* eslint-disable import/no-unused-modules */
// codegen:start {preset: barrel, include: ./*.ts*, exclude: ./*.stories.*}
export * from './useCustomVariant'
+export * from './useEditMode'
export * from './useFormattedAddress'
export * from './useFreeText'
export * from './useGoogleMapMarker'
diff --git a/packages/ui/hooks/useEditMode.ts b/packages/ui/hooks/useEditMode.ts
new file mode 100644
index 0000000000..dd0f0006f9
--- /dev/null
+++ b/packages/ui/hooks/useEditMode.ts
@@ -0,0 +1,11 @@
+import { useContext } from 'react'
+
+import { EditModeContext } from '~ui/providers/EditMode'
+
+export const useEditMode = () => {
+ const ctx = useContext(EditModeContext)
+ if (!ctx) {
+ throw new Error('useEditMode must be used within a EditModeProvider')
+ }
+ return ctx
+}
diff --git a/packages/ui/providers/EditMode.tsx b/packages/ui/providers/EditMode.tsx
new file mode 100644
index 0000000000..fb6f026fc3
--- /dev/null
+++ b/packages/ui/providers/EditMode.tsx
@@ -0,0 +1,29 @@
+import { createContext, type Dispatch, type SetStateAction, useRef, useState } from 'react'
+
+export const EditModeContext = createContext(null)
+
+export const EditModeProvider = ({ children }: { children: React.ReactNode }) => {
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)
+ const editModeRef = useRef({ handleEditSubmit: (handler: () => void) => handler() })
+
+ const contextValue = {
+ unsaved: {
+ set: setHasUnsavedChanges,
+ state: hasUnsavedChanges,
+ },
+ submitEditHandler: editModeRef.current.handleEditSubmit,
+ }
+
+ return {children}
+}
+
+type EditContext = {
+ unsaved: {
+ set: Dispatch>
+ state: boolean
+ }
+ submitEditHandler: (handler: () => void) => void
+}
+type EditModeRef = {
+ handleEditSubmit: (handler: () => void) => void
+}
From 5b9d43ab93057b8494427ae4078df3a47f44ae79 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 14:57:21 -0400
Subject: [PATCH 004/131] update configs
---
apps/app/next-i18next.config.mjs | 22 +++++-----------------
apps/app/next.config.mjs | 17 ++++++++++++-----
2 files changed, 17 insertions(+), 22 deletions(-)
diff --git a/apps/app/next-i18next.config.mjs b/apps/app/next-i18next.config.mjs
index 46b35fb1d2..f23f105000 100644
--- a/apps/app/next-i18next.config.mjs
+++ b/apps/app/next-i18next.config.mjs
@@ -1,4 +1,3 @@
-/* eslint-disable turbo/no-undeclared-env-vars */
/* eslint-disable node/no-process-env */
// @ts-check
import LanguageDetector from 'i18next-browser-languagedetector'
@@ -10,20 +9,9 @@ import MultiBackend from 'i18next-multiload-backend-adapter'
import path from 'path'
-export const namespaces = [
- 'attribute',
- 'common',
- 'country',
- 'gov-dist',
- // 'org-data',
- // 'org-description',
- // 'org-service',
- 'phone-type',
- 'services',
- 'user',
-]
const isBrowser = typeof window !== 'undefined'
-
+const isDev = process.env.NODE_ENV !== 'production'
+const isVerbose = !!process.env.NEXT_VERBOSE
// const Keys = z.record(z.string())
/**
@@ -60,8 +48,8 @@ const config = {
defaultNS: 'common',
localePath: path.resolve('./public/locales'),
fallbackLng: ['en'],
- reloadOnPrerender: process.env.NODE_ENV !== 'production',
- debug: process.env.NODE_ENV !== 'production' && isBrowser && !!process.env.NEXT_VERBOSE,
+ reloadOnPrerender: isDev,
+ debug: isDev && isBrowser && isVerbose,
partialBundledLanguages: true,
nonExplicitSupportedLngs: true,
cleanCode: true,
@@ -91,7 +79,7 @@ const config = {
interpolation: {
skipOnVariables: false,
alwaysFormat: true,
- format: (value, format, lng, edit) => {
+ format: (value, format) => {
switch (format) {
case 'lowercase': {
if (typeof value === 'string') return value.toLowerCase()
diff --git a/apps/app/next.config.mjs b/apps/app/next.config.mjs
index 12b1197c3b..267aa265cc 100644
--- a/apps/app/next.config.mjs
+++ b/apps/app/next.config.mjs
@@ -1,4 +1,3 @@
-/* eslint-disable turbo/no-undeclared-env-vars */
/* eslint-disable node/no-process-env */
import bundleAnalyze from '@next/bundle-analyzer'
@@ -15,6 +14,7 @@ const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const isVercelActiveDev = process.env.VERCEL_ENV === 'preview' && process.env.VERCEL_GIT_COMMIT_REF !== 'dev'
+const isVercelProd = process.env.VERCEL_ENV === 'production'
const isLocalDev =
process.env.NODE_ENV === 'development' && !['preview', 'production'].includes(process.env.VERCEL_ENV)
@@ -24,7 +24,14 @@ const nextConfig = {
i18n: i18nConfig.i18n,
reactStrictMode: true,
swcMinify: true,
- transpilePackages: ['@weareinreach/ui', '@weareinreach/db', '@weareinreach/auth', '@weareinreach/api'],
+ transpilePackages: [
+ '@weareinreach/api',
+ '@weareinreach/auth',
+ '@weareinreach/db',
+ '@weareinreach/env',
+ '@weareinreach/ui',
+ '@weareinreach/util',
+ ],
compiler: {
...(process.env.VERCEL_ENV === 'production' ? { removeConsole: { exclude: ['error'] } } : {}),
},
@@ -36,7 +43,7 @@ const nextConfig = {
instrumentationHook: true,
},
eslint: {
- ignoreDuringBuilds: isVercelActiveDev,
+ ignoreDuringBuilds: isVercelActiveDev || isLocalDev,
},
images: {
remotePatterns: [{ protocol: 'https', hostname: '**.4sqi.net' }],
@@ -44,13 +51,13 @@ const nextConfig = {
rewrites: async () => [{ source: '/search', destination: '/' }],
typescript: {
- ignoreBuildErrors: isVercelActiveDev,
+ ignoreBuildErrors: isVercelActiveDev || isLocalDev,
},
webpack: (config, { isServer, webpack }) => {
if (isServer) {
config.plugins = [...config.plugins, new PrismaPlugin()]
}
- if (process.env.VERCEL_ENV === 'production') {
+ if (isVercelProd) {
config.plugins.push(new webpack.DefinePlugin({ __SENTRY_DEBUG__: false }))
}
return config
From 0787e23830d47fbdf8a280d7953313fee8f53563 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 17:57:56 -0400
Subject: [PATCH 005/131] add deps & icons
---
apps/app/package.json | 4 +
packages/ui/icon/iconCollection.ts | 5 +-
packages/ui/icon/iconList.ts | 2 +-
packages/ui/package.json | 21 +++--
pnpm-lock.yaml | 130 ++++++++++++++++++++++++++---
5 files changed, 142 insertions(+), 20 deletions(-)
diff --git a/apps/app/package.json b/apps/app/package.json
index 439c6a6c79..f3a00b74b4 100644
--- a/apps/app/package.json
+++ b/apps/app/package.json
@@ -29,6 +29,7 @@
"@crowdin/ota-client": "1.0.0",
"@emotion/react": "11.11.1",
"@emotion/server": "11.11.0",
+ "@hookform/resolvers": "3.2.0",
"@iconify/react": "4.1.1",
"@mantine/carousel": "6.0.19",
"@mantine/core": "6.0.19",
@@ -107,11 +108,14 @@
"react": "18.2.0",
"react-dom": "18.2.0",
"react-error-boundary": "4.0.11",
+ "react-hook-form": "7.45.4",
+ "react-hook-form-mantine": "2.0.0",
"react-i18next": "13.1.2",
"tslog": "4.9.1",
"zod": "3.22.2"
},
"devDependencies": {
+ "@hookform/devtools": "4.3.1",
"@playwright/test": "1.37.1",
"@prisma/nextjs-monorepo-workaround-plugin": "5.1.1",
"@tanstack/react-query-devtools": "4.33.0",
diff --git a/packages/ui/icon/iconCollection.ts b/packages/ui/icon/iconCollection.ts
index 82b22a1fd5..05c37fffb4 100644
--- a/packages/ui/icon/iconCollection.ts
+++ b/packages/ui/icon/iconCollection.ts
@@ -3,6 +3,7 @@ import { addCollection } from '@iconify/react'
import { getIcons } from '@iconify/utils'
const { icons: carbonIcons } = require('@iconify-json/carbon')
+const { icons: fluentIcons } = require('@iconify-json/fluent-mdl2')
const { icons: mdiIcons } = require('@iconify-json/mdi')
const { icons: phIcons } = require('@iconify-json/ph')
const { icons: simpleIcons } = require('@iconify-json/simple-icons')
@@ -15,10 +16,12 @@ const { icons: simpleIcons } = require('@iconify-json/simple-icons')
export const loadIcons = () => {
const iconsSimple = getIcons(simpleIcons, ['tiktok'])
const iconsPh = getIcons(phIcons, ['map-pin-fill'])
- const iconsMdi = getIcons(mdiIcons, ['map-marker'])
+ const iconsMdi = getIcons(mdiIcons, ['map-marker', 'content-save'])
+ const iconsFluent = getIcons(fluentIcons, ['remove-from-trash'])
addCollection(carbonIcons)
if (iconsSimple !== null) addCollection(iconsSimple)
if (iconsPh !== null) addCollection(iconsPh)
if (iconsMdi !== null) addCollection(iconsMdi)
+ if (iconsFluent !== null) addCollection(iconsFluent)
}
diff --git a/packages/ui/icon/iconList.ts b/packages/ui/icon/iconList.ts
index 5f31c10683..9d755c9f29 100644
--- a/packages/ui/icon/iconList.ts
+++ b/packages/ui/icon/iconList.ts
@@ -1,3 +1,3 @@
// generated file - do not modify directly
// prettier-ignore
-export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
+export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","fluent-mdl2:remove-from-trash","mdi:content-save","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 1a0342b913..d0866b4043 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -43,7 +43,6 @@
"localized-address-format": "1.3.1",
"nextjs-routes": "2.0.1",
"probe-image-size": "7.2.3",
- "react-error-boundary": "4.0.11",
"react-phone-number-input": "3.3.4",
"react-string-replace": "1.1.1"
},
@@ -57,7 +56,10 @@
"@emotion/server": "11.11.0",
"@faker-js/faker": "8.0.2",
"@geometricpanda/storybook-addon-badges": "2.0.0",
+ "@hookform/devtools": "4.3.1",
+ "@hookform/resolvers": "3.2.0",
"@iconify-json/carbon": "1.1.20",
+ "@iconify-json/fluent-mdl2": "1.1.3",
"@iconify-json/mdi": "1.1.54",
"@iconify-json/ph": "1.1.6",
"@iconify-json/simple-icons": "1.1.67",
@@ -151,6 +153,9 @@
"react": "18.2.0",
"react-docgen-typescript": "2.2.2",
"react-dom": "18.2.0",
+ "react-error-boundary": "4.0.11",
+ "react-hook-form": "7.45.4",
+ "react-hook-form-mantine": "2.0.0",
"react-hook-tracer": "1.4.0",
"react-i18next": "13.1.2",
"resolve-url-loader": "5.0.0",
@@ -172,8 +177,9 @@
"peerDependencies": {
"@emotion/react": "^11",
"@emotion/server": "^11",
- "@iconify-json/carbon": "1.1.20",
- "@iconify-json/simple-icons": "1.1.67",
+ "@hookform/resolvers": "^3.2.0",
+ "@iconify-json/carbon": "^1.1.20",
+ "@iconify-json/simple-icons": "^1.1.67",
"@iconify/react": "^4",
"@iconify/utils": "^2",
"@mantine/carousel": "^6",
@@ -195,9 +201,9 @@
"@tiptap/extension-link": "^2.0.0",
"@tiptap/react": "^2.0.0",
"@tiptap/starter-kit": "^2.0.0",
- "@trpc/client": "10.37.1",
- "@trpc/next": "10.37.1",
- "@trpc/react-query": "10.37.1",
+ "@trpc/client": "^10.37.1",
+ "@trpc/next": "^10.37.1",
+ "@trpc/react-query": "^10.37.1",
"@weareinreach/api": "*",
"@weareinreach/auth": "*",
"dayjs": "^1",
@@ -212,6 +218,9 @@
"next-i18next": "^14.0.0",
"react": "^18",
"react-dom": "^18",
+ "react-error-boundary": "^4",
+ "react-hook-form": "^7.45.4",
+ "react-hook-form-mantine": "^2.0.0",
"react-i18next": "^13.0.0"
},
"msw": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 40f66a9dae..095edbd441 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -125,6 +125,9 @@ importers:
'@emotion/server':
specifier: 11.11.0
version: 11.11.0
+ '@hookform/resolvers':
+ specifier: 3.2.0
+ version: 3.2.0(react-hook-form@7.45.4)
'@iconify/react':
specifier: 4.1.1
version: 4.1.1(react@18.2.0)
@@ -359,6 +362,12 @@ importers:
react-error-boundary:
specifier: 4.0.11
version: 4.0.11(react@18.2.0)
+ react-hook-form:
+ specifier: 7.45.4
+ version: 7.45.4(react@18.2.0)
+ react-hook-form-mantine:
+ specifier: 2.0.0
+ version: 2.0.0(@mantine/core@6.0.19)(@mantine/dates@6.0.19)(react-dom@18.2.0)(react-hook-form@7.45.4)(react@18.2.0)
react-i18next:
specifier: 13.1.2
version: 13.1.2(i18next@23.4.4)(react-dom@18.2.0)(react@18.2.0)
@@ -369,6 +378,9 @@ importers:
specifier: 3.22.2
version: 3.22.2
devDependencies:
+ '@hookform/devtools':
+ specifier: 4.3.1
+ version: 4.3.1(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
'@playwright/test':
specifier: 1.37.1
version: 1.37.1
@@ -1433,9 +1445,6 @@ importers:
probe-image-size:
specifier: 7.2.3
version: 7.2.3
- react-error-boundary:
- specifier: 4.0.11
- version: 4.0.11(react@18.2.0)
react-phone-number-input:
specifier: 3.3.4
version: 3.3.4(react-dom@18.2.0)(react@18.2.0)
@@ -1470,9 +1479,18 @@ importers:
'@geometricpanda/storybook-addon-badges':
specifier: 2.0.0
version: 2.0.0(@storybook/blocks@7.3.2)(@storybook/components@7.3.2)(@storybook/core-events@7.3.2)(@storybook/manager-api@7.3.2)(@storybook/preview-api@7.3.2)(@storybook/theming@7.3.2)(@storybook/types@7.3.2)(react-dom@18.2.0)(react@18.2.0)
+ '@hookform/devtools':
+ specifier: 4.3.1
+ version: 4.3.1(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
+ '@hookform/resolvers':
+ specifier: 3.2.0
+ version: 3.2.0(react-hook-form@7.45.4)
'@iconify-json/carbon':
specifier: 1.1.20
version: 1.1.20
+ '@iconify-json/fluent-mdl2':
+ specifier: 1.1.3
+ version: 1.1.3
'@iconify-json/mdi':
specifier: 1.1.54
version: 1.1.54
@@ -1752,6 +1770,15 @@ importers:
react-dom:
specifier: 18.2.0
version: 18.2.0(react@18.2.0)
+ react-error-boundary:
+ specifier: 4.0.11
+ version: 4.0.11(react@18.2.0)
+ react-hook-form:
+ specifier: 7.45.4
+ version: 7.45.4(react@18.2.0)
+ react-hook-form-mantine:
+ specifier: 2.0.0
+ version: 2.0.0(@mantine/core@6.0.19)(@mantine/dates@6.0.19)(react-dom@18.2.0)(react-hook-form@7.45.4)(react@18.2.0)
react-hook-tracer:
specifier: 1.4.0
version: 1.4.0(react-dom@18.2.0)(react@18.2.0)
@@ -4434,7 +4461,6 @@ packages:
resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==}
dependencies:
'@emotion/memoize': 0.8.1
- dev: false
/@emotion/memoize@0.8.1:
resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
@@ -4503,7 +4529,6 @@ packages:
'@emotion/utils': 1.2.1
'@types/react': 18.2.20
react: 18.2.0
- dev: false
/@emotion/unitless@0.8.1:
resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
@@ -5316,6 +5341,33 @@ packages:
'@hapi/hoek': 9.3.0
dev: true
+ /@hookform/devtools@4.3.1(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-CrWxEoHQZaOXJZVQ8KBgOuAa8p2LI8M0DAN5GTRTmdCieRwFVjVDEmuTAVazWVRRkpEQSgSt3KYp7VmmqXdEnw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18 || 18
+ react-dom: ^16.8.0 || ^17 || ^18 || 18
+ dependencies:
+ '@emotion/react': 11.11.1(@types/react@18.2.20)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0)
+ '@types/lodash': 4.14.197
+ little-state-machine: 4.8.0(react@18.2.0)
+ lodash: 4.17.21
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-simple-animate: 3.5.2(react-dom@18.2.0)
+ use-deep-compare-effect: 1.8.1(react@18.2.0)
+ uuid: 9.0.0
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: true
+
+ /@hookform/resolvers@3.2.0(react-hook-form@7.45.4):
+ resolution: {integrity: sha512-skXQHhLxq0Sz2xDwCyv5dygBCtXJe1GmWwxDzfdtl0X6agD6qcyTG8HrZWkjJoy8AkiLARqYvSYJ8z7+Nwmi7w==}
+ peerDependencies:
+ react-hook-form: ^7.0.0
+ dependencies:
+ react-hook-form: 7.45.4(react@18.2.0)
+
/@humanwhocodes/config-array@0.11.10:
resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==}
engines: {node: '>=10.10.0'}
@@ -5342,6 +5394,12 @@ packages:
'@iconify/types': 2.0.0
dev: true
+ /@iconify-json/fluent-mdl2@1.1.3:
+ resolution: {integrity: sha512-LtsZvgFjWK4fQwe0G6cNFDMXhvon4PqUfZY+E4vW6ruOyoFN/Bjzd/LSOVe2POwM785L6ChW2djgNu7fOjrT6Q==}
+ dependencies:
+ '@iconify/types': 2.0.0
+ dev: true
+
/@iconify-json/mdi@1.1.54:
resolution: {integrity: sha512-3QAsxte90EalbN2e8J30OqSSZz9qN2x+kmykQwsPahoW2dOtSvj+BR9YdiUd9A5XKk2nuU4UH5Gj/cq6WZ6CzQ==}
dependencies:
@@ -5886,7 +5944,7 @@ packages:
dependencies:
'@mantine/ssr': 6.0.19(@emotion/react@11.11.1)(@emotion/server@11.11.0)(react-dom@18.2.0)(react@18.2.0)
'@mantine/styles': 6.0.19(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0)
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -10617,7 +10675,7 @@ packages:
'@trpc/client': 10.37.1(@trpc/server@10.37.1)
'@trpc/react-query': 10.37.1(@tanstack/react-query@4.33.0)(@trpc/client@10.37.1)(@trpc/server@10.37.1)(react-dom@18.2.0)(react@18.2.0)
'@trpc/server': 10.37.1
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-ssr-prepass: 1.5.0(react@18.2.0)
@@ -18490,6 +18548,14 @@ packages:
lit-html: 2.8.0
dev: true
+ /little-state-machine@4.8.0(react@18.2.0):
+ resolution: {integrity: sha512-xfi5+iDxTLhu0hbnNubUs+qoQQqxhtEZeObP5ELjUlHnl74bbasY7mOonsGQrAouyrbag3ebNLSse5xX1T7buQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18 || 18
+ dependencies:
+ react: 18.2.0
+ dev: true
+
/load-plugin@5.1.0:
resolution: {integrity: sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==}
dependencies:
@@ -19832,7 +19898,7 @@ packages:
'@panva/hkdf': 1.1.1
cookie: 0.5.0
jose: 4.14.4
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
oauth: 0.9.15
openid-client: 5.4.3
preact: 10.17.0
@@ -19856,7 +19922,7 @@ packages:
hoist-non-react-statics: 3.3.2
i18next: 23.4.4
i18next-fs-backend: 2.1.5
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-i18next: 13.1.2(i18next@23.4.4)(react-dom@18.2.0)(react@18.2.0)
@@ -19920,7 +19986,6 @@ packages:
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- dev: true
/next@13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==}
@@ -19969,7 +20034,7 @@ packages:
next: '*'
dependencies:
chokidar: 3.5.3
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
dev: false
/nice-try@1.0.5:
@@ -21879,7 +21944,29 @@ packages:
dependencies:
'@babel/runtime': 7.22.10
react: 18.2.0
- dev: false
+
+ /react-hook-form-mantine@2.0.0(@mantine/core@6.0.19)(@mantine/dates@6.0.19)(react-dom@18.2.0)(react-hook-form@7.45.4)(react@18.2.0):
+ resolution: {integrity: sha512-/vHi2wm9sU2cWR/wAJ1hsH/TZzlu6z/zxQNR4jUVPcB6Bz9+HKGdWk6Di9snqYG3rOBbWqR93BIBE1cyxcK8OA==}
+ peerDependencies:
+ '@mantine/core': ^6.0.0
+ '@mantine/dates': ^6.0.0
+ react: ^18.2.0 || 18
+ react-dom: ^18.2.0 || 18
+ react-hook-form: ^7.43
+ dependencies:
+ '@mantine/core': 6.0.19(@emotion/react@11.11.1)(@mantine/hooks@6.0.19)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
+ '@mantine/dates': 6.0.19(@mantine/core@6.0.19)(@mantine/hooks@6.0.19)(dayjs@1.11.9)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-hook-form: 7.45.4(react@18.2.0)
+
+ /react-hook-form@7.45.4(react@18.2.0):
+ resolution: {integrity: sha512-HGDV1JOOBPZj10LB3+OZgfDBTn+IeEsNOKiq/cxbQAIbKaiJUe/KV8DBUzsx0Gx/7IG/orWqRRm736JwOfUSWQ==}
+ engines: {node: '>=12.22.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17 || ^18 || 18
+ dependencies:
+ react: 18.2.0
/react-hook-tracer@1.4.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-RX3JFlDmw5Q8LWltp0XRtMQ2VgaZF0QeuL4IfNwAA2eG4ASF7qaxBu7UOMGk9wrZB0NC6zV4R63osRas5ZrQGA==}
@@ -22018,6 +22105,14 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
+ /react-simple-animate@3.5.2(react-dom@18.2.0):
+ resolution: {integrity: sha512-xLE65euP920QMTOmv5haPlml+hmOPDkbIr5WeF7ADIXWBYt5kW/vwpNfWg8EKMab8aeDxIZ6QjffVh8v2dUyhg==}
+ peerDependencies:
+ react-dom: ^16.8.0 || ^17 || ^18 || 18
+ dependencies:
+ react-dom: 18.2.0(react@18.2.0)
+ dev: true
+
/react-ssr-prepass@1.5.0(react@18.2.0):
resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==}
peerDependencies:
@@ -24793,6 +24888,17 @@ packages:
dependencies:
react: 18.2.0
+ /use-deep-compare-effect@1.8.1(react@18.2.0):
+ resolution: {integrity: sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==}
+ engines: {node: '>=10', npm: '>=6'}
+ peerDependencies:
+ react: '>=16.13 || 18'
+ dependencies:
+ '@babel/runtime': 7.22.10
+ dequal: 2.0.3
+ react: 18.2.0
+ dev: true
+
/use-isomorphic-layout-effect@1.1.2(@types/react@18.2.20)(react@18.2.0):
resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
peerDependencies:
From 7d6a9c1f272f7102706f3defef85bf7954fdcf08 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 18:04:47 -0400
Subject: [PATCH 006/131] add routes, convert "misc" router
---
packages/api/router/misc/index.ts | 101 +++++++-----------
.../misc/query.forEditNavbar.handler.ts | 24 +++++
.../router/misc/query.forEditNavbar.schema.ts | 9 ++
.../query.getCountryTranslation.handler.ts | 17 +++
.../query.getCountryTranslation.schema.ts | 9 ++
.../misc/query.hasContactInfo.handler.ts | 79 ++++++++++++++
.../misc/query.hasContactInfo.schema.ts | 10 ++
packages/api/router/misc/schemas.ts | 5 +
packages/api/router/organization/index.ts | 10 ++
.../query.forOrgPageEdits.handler.ts | 46 ++++++++
.../query.forOrgPageEdits.schema.ts | 4 +
packages/api/router/organization/schemas.ts | 1 +
12 files changed, 253 insertions(+), 62 deletions(-)
create mode 100644 packages/api/router/misc/query.forEditNavbar.handler.ts
create mode 100644 packages/api/router/misc/query.forEditNavbar.schema.ts
create mode 100644 packages/api/router/misc/query.getCountryTranslation.handler.ts
create mode 100644 packages/api/router/misc/query.getCountryTranslation.schema.ts
create mode 100644 packages/api/router/misc/query.hasContactInfo.handler.ts
create mode 100644 packages/api/router/misc/query.hasContactInfo.schema.ts
create mode 100644 packages/api/router/misc/schemas.ts
create mode 100644 packages/api/router/organization/query.forOrgPageEdits.handler.ts
create mode 100644 packages/api/router/organization/query.forOrgPageEdits.schema.ts
diff --git a/packages/api/router/misc/index.ts b/packages/api/router/misc/index.ts
index cf038a2199..6be4c1dcf5 100644
--- a/packages/api/router/misc/index.ts
+++ b/packages/api/router/misc/index.ts
@@ -1,68 +1,45 @@
-import { z } from 'zod'
+import { defineRouter, permissionedProcedure, publicProcedure } from '~api/lib/trpc'
-import { getIdPrefixRegex, isIdFor, type Prisma } from '@weareinreach/db'
-import { defineRouter, publicProcedure } from '~api/lib/trpc'
-import { isPublic } from '~api/schemas/selects/common'
+import * as schema from './schemas'
+
+const HandlerCache: Partial = {}
+
+type MiscHandlerCache = {
+ hasContactInfo: typeof import('./query.hasContactInfo.handler').hasContactInfo
+ getCountryTranslation: typeof import('./query.getCountryTranslation.handler').getCountryTranslation
+ forEditNavbar: typeof import('./query.forEditNavbar.handler').forEditNavbar
+}
export const miscRouter = defineRouter({
- hasContactInfo: publicProcedure
- .input(z.string().regex(getIdPrefixRegex('organization', 'orgLocation', 'orgService')))
+ hasContactInfo: publicProcedure.input(schema.ZHasContactInfoSchema).query(async ({ ctx, input }) => {
+ if (!HandlerCache.hasContactInfo)
+ HandlerCache.hasContactInfo = await import('./query.hasContactInfo.handler').then(
+ (mod) => mod.hasContactInfo
+ )
+
+ if (!HandlerCache.hasContactInfo) throw new Error('Failed to load handler')
+ return HandlerCache.hasContactInfo({ ctx, input })
+ }),
+ getCountryTranslation: publicProcedure
+ .input(schema.ZGetCountryTranslationSchema)
.query(async ({ ctx, input }) => {
- const whereId = (): {
- phone: Prisma.OrgPhoneWhereInput
- email: Prisma.OrgEmailWhereInput
- website: Prisma.OrgWebsiteWhereInput
- socialMedia: Prisma.OrgSocialMediaWhereInput
- } => {
- switch (true) {
- case isIdFor('organization', input): {
- return {
- email: { organization: { some: { organization: { id: input, ...isPublic } } }, ...isPublic },
- phone: { organization: { organization: { id: input, ...isPublic } }, ...isPublic },
- socialMedia: { organization: { id: input, ...isPublic }, ...isPublic },
- website: { organization: { id: input, ...isPublic }, ...isPublic },
- }
- }
- case isIdFor('orgLocation', input): {
- return {
- email: { locations: { some: { location: { id: input, ...isPublic } } }, ...isPublic },
- phone: { locations: { some: { location: { id: input, ...isPublic } } }, ...isPublic },
- socialMedia: { orgLocation: { id: input, ...isPublic }, ...isPublic },
- website: { orgLocation: { id: input, ...isPublic }, ...isPublic },
- }
- }
- case isIdFor('orgService', input): {
- return {
- email: { services: { some: { service: { id: input, ...isPublic } } }, ...isPublic },
- phone: { services: { some: { service: { id: input, ...isPublic } } }, ...isPublic },
- socialMedia: {},
- website: {},
- }
- }
- default: {
- return {
- email: {},
- phone: {},
- socialMedia: {},
- website: {},
- }
- }
- }
- }
- const [email, phone, socialMedia, website] = await Promise.all([
- ctx.prisma.orgEmail.count({ where: whereId().email }),
- ctx.prisma.orgPhone.count({ where: whereId().phone }),
- whereId().socialMedia ? ctx.prisma.orgSocialMedia.count({ where: whereId().socialMedia }) : 0,
- whereId().website ? ctx.prisma.orgWebsite.count({ where: whereId().website }) : 0,
- ])
- return email + phone + socialMedia + website !== 0 // ? 'true' : 'false'
+ if (!HandlerCache.getCountryTranslation)
+ HandlerCache.getCountryTranslation = await import('./query.getCountryTranslation.handler').then(
+ (mod) => mod.getCountryTranslation
+ )
+
+ if (!HandlerCache.getCountryTranslation) throw new Error('Failed to load handler')
+ return HandlerCache.getCountryTranslation({ ctx, input })
+ }),
+ forEditNavbar: permissionedProcedure('updateLocation')
+ .input(schema.ZForEditNavbarSchema)
+ .query(async ({ ctx, input }) => {
+ if (!HandlerCache.forEditNavbar)
+ HandlerCache.forEditNavbar = await import('./query.forEditNavbar.handler').then(
+ (mod) => mod.forEditNavbar
+ )
+
+ if (!HandlerCache.forEditNavbar) throw new Error('Failed to load handler')
+ return HandlerCache.forEditNavbar({ ctx, input })
}),
- getCountryTranslation: publicProcedure
- .input(z.object({ cca2: z.string().length(2) }))
- .query(async ({ ctx, input }) =>
- ctx.prisma.country.findUniqueOrThrow({
- where: { cca2: input.cca2 },
- select: { name: true, tsKey: true, tsNs: true },
- })
- ),
})
diff --git a/packages/api/router/misc/query.forEditNavbar.handler.ts b/packages/api/router/misc/query.forEditNavbar.handler.ts
new file mode 100644
index 0000000000..a52bae3b14
--- /dev/null
+++ b/packages/api/router/misc/query.forEditNavbar.handler.ts
@@ -0,0 +1,24 @@
+import { isIdFor, prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type TForEditNavbarSchema } from './query.forEditNavbar.schema'
+
+export const forEditNavbar = async ({ input }: TRPCHandlerParams) => {
+ try {
+ if (input.slug) {
+ const result = await prisma.organization.findUniqueOrThrow({
+ where: { slug: input.slug },
+ select: { published: true, deleted: true, lastVerified: true },
+ })
+ return result
+ }
+ const result = await prisma.orgLocation.findUniqueOrThrow({
+ where: { id: input.orgLocationId },
+ select: { published: true, deleted: true },
+ })
+ return { ...result, lastVerified: null }
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/router/misc/query.forEditNavbar.schema.ts b/packages/api/router/misc/query.forEditNavbar.schema.ts
new file mode 100644
index 0000000000..1464036d9d
--- /dev/null
+++ b/packages/api/router/misc/query.forEditNavbar.schema.ts
@@ -0,0 +1,9 @@
+import { z } from 'zod'
+
+import { prefixedId } from '~api/schemas/idPrefix'
+
+export const ZForEditNavbarSchema = z.union([
+ z.object({ slug: z.string(), orgLocationId: z.never().optional() }),
+ z.object({ orgLocationId: prefixedId('orgLocation'), slug: z.never().optional() }),
+])
+export type TForEditNavbarSchema = z.infer
diff --git a/packages/api/router/misc/query.getCountryTranslation.handler.ts b/packages/api/router/misc/query.getCountryTranslation.handler.ts
new file mode 100644
index 0000000000..b6d28f9820
--- /dev/null
+++ b/packages/api/router/misc/query.getCountryTranslation.handler.ts
@@ -0,0 +1,17 @@
+import { prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type TGetCountryTranslationSchema } from './query.getCountryTranslation.schema'
+
+export const getCountryTranslation = async ({ input }: TRPCHandlerParams) => {
+ try {
+ const result = await prisma.country.findUniqueOrThrow({
+ where: { cca2: input.cca2 },
+ select: { name: true, tsKey: true, tsNs: true },
+ })
+ return result
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/router/misc/query.getCountryTranslation.schema.ts b/packages/api/router/misc/query.getCountryTranslation.schema.ts
new file mode 100644
index 0000000000..3bffee1da9
--- /dev/null
+++ b/packages/api/router/misc/query.getCountryTranslation.schema.ts
@@ -0,0 +1,9 @@
+import { z } from 'zod'
+
+export const ZGetCountryTranslationSchema = z.object({
+ cca2: z
+ .string()
+ .length(2)
+ .transform((str) => str.toUpperCase()),
+})
+export type TGetCountryTranslationSchema = z.infer
diff --git a/packages/api/router/misc/query.hasContactInfo.handler.ts b/packages/api/router/misc/query.hasContactInfo.handler.ts
new file mode 100644
index 0000000000..2c0194e4bb
--- /dev/null
+++ b/packages/api/router/misc/query.hasContactInfo.handler.ts
@@ -0,0 +1,79 @@
+import { isIdFor, type Prisma, prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { globalWhere } from '~api/selects/global'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type THasContactInfoSchema } from './query.hasContactInfo.schema'
+
+export const hasContactInfo = async ({ input }: TRPCHandlerParams) => {
+ try {
+ const whereId = (): {
+ phone: Prisma.OrgPhoneWhereInput
+ email: Prisma.OrgEmailWhereInput
+ website: Prisma.OrgWebsiteWhereInput
+ socialMedia: Prisma.OrgSocialMediaWhereInput
+ } => {
+ switch (true) {
+ case isIdFor('organization', input): {
+ return {
+ email: {
+ organization: { some: { organization: { id: input, ...globalWhere.isPublic } } },
+ ...globalWhere.isPublic,
+ },
+ phone: {
+ organization: { organization: { id: input, ...globalWhere.isPublic } },
+ ...globalWhere.isPublic,
+ },
+ socialMedia: { organization: { id: input, ...globalWhere.isPublic }, ...globalWhere.isPublic },
+ website: { organization: { id: input, ...globalWhere.isPublic }, ...globalWhere.isPublic },
+ }
+ }
+ case isIdFor('orgLocation', input): {
+ return {
+ email: {
+ locations: { some: { location: { id: input, ...globalWhere.isPublic } } },
+ ...globalWhere.isPublic,
+ },
+ phone: {
+ locations: { some: { location: { id: input, ...globalWhere.isPublic } } },
+ ...globalWhere.isPublic,
+ },
+ socialMedia: { orgLocation: { id: input, ...globalWhere.isPublic }, ...globalWhere.isPublic },
+ website: { orgLocation: { id: input, ...globalWhere.isPublic }, ...globalWhere.isPublic },
+ }
+ }
+ case isIdFor('orgService', input): {
+ return {
+ email: {
+ services: { some: { service: { id: input, ...globalWhere.isPublic } } },
+ ...globalWhere.isPublic,
+ },
+ phone: {
+ services: { some: { service: { id: input, ...globalWhere.isPublic } } },
+ ...globalWhere.isPublic,
+ },
+ socialMedia: {},
+ website: {},
+ }
+ }
+ default: {
+ return {
+ email: {},
+ phone: {},
+ socialMedia: {},
+ website: {},
+ }
+ }
+ }
+ }
+ const [email, phone, socialMedia, website] = await Promise.all([
+ prisma.orgEmail.count({ where: whereId().email }),
+ prisma.orgPhone.count({ where: whereId().phone }),
+ whereId().socialMedia ? prisma.orgSocialMedia.count({ where: whereId().socialMedia }) : 0,
+ whereId().website ? prisma.orgWebsite.count({ where: whereId().website }) : 0,
+ ])
+ return email + phone + socialMedia + website !== 0 // ? 'true' : 'false'
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/router/misc/query.hasContactInfo.schema.ts b/packages/api/router/misc/query.hasContactInfo.schema.ts
new file mode 100644
index 0000000000..fa31b38331
--- /dev/null
+++ b/packages/api/router/misc/query.hasContactInfo.schema.ts
@@ -0,0 +1,10 @@
+import { z } from 'zod'
+
+import { prefixedId } from '~api/schemas/idPrefix'
+
+export const ZHasContactInfoSchema = z.union([
+ prefixedId('organization'),
+ prefixedId('orgLocation'),
+ prefixedId('orgService'),
+])
+export type THasContactInfoSchema = z.infer
diff --git a/packages/api/router/misc/schemas.ts b/packages/api/router/misc/schemas.ts
new file mode 100644
index 0000000000..7b1c664352
--- /dev/null
+++ b/packages/api/router/misc/schemas.ts
@@ -0,0 +1,5 @@
+// codegen:start {preset: barrel, include: ./*.schema.ts}
+export * from './query.forEditNavbar.schema'
+export * from './query.getCountryTranslation.schema'
+export * from './query.hasContactInfo.schema'
+// codegen:end
diff --git a/packages/api/router/organization/index.ts b/packages/api/router/organization/index.ts
index 806ad37b75..51a31f5e3f 100644
--- a/packages/api/router/organization/index.ts
+++ b/packages/api/router/organization/index.ts
@@ -25,6 +25,7 @@ type OrganizationHandlerCache = {
getIntlCrisis: typeof import('./query.getIntlCrisis.handler').getIntlCrisis
getNatlCrisis: typeof import('./query.getNatlCrisis.handler').getNatlCrisis
forOrganizationTable: typeof import('./query.forOrganizationTable.handler').forOrganizationTable
+ forOrgPageEdits: typeof import('./query.forOrgPageEdits.handler').forOrgPageEdits
// #endregion
//
@@ -174,6 +175,15 @@ export const orgRouter = defineRouter({
if (!HandlerCache.forOrganizationTable) throw new Error('Failed to load handler')
return HandlerCache.forOrganizationTable({ ctx, input })
}),
+ forOrgPageEdits: publicProcedure.input(schema.ZForOrgPageEditsSchema).query(async ({ ctx, input }) => {
+ if (!HandlerCache.forOrgPageEdits)
+ HandlerCache.forOrgPageEdits = await import('./query.forOrgPageEdits.handler').then(
+ (mod) => mod.forOrgPageEdits
+ )
+
+ if (!HandlerCache.forOrgPageEdits) throw new Error('Failed to load handler')
+ return HandlerCache.forOrgPageEdits({ ctx, input })
+ }),
// #endregion
diff --git a/packages/api/router/organization/query.forOrgPageEdits.handler.ts b/packages/api/router/organization/query.forOrgPageEdits.handler.ts
new file mode 100644
index 0000000000..7d68ca3709
--- /dev/null
+++ b/packages/api/router/organization/query.forOrgPageEdits.handler.ts
@@ -0,0 +1,46 @@
+import { prisma } from '@weareinreach/db'
+import { attributes, freeText } from '~api/schemas/selects/common'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type TForOrgPageEditsSchema } from './query.forOrgPageEdits.schema'
+
+export const forOrgPageEdits = async ({ input }: TRPCHandlerParams) => {
+ const { slug } = input
+ const org = await prisma.organization.findUniqueOrThrow({
+ where: {
+ slug,
+ },
+ select: {
+ id: true,
+ name: true,
+ slug: true,
+ published: true,
+ deleted: true,
+ lastVerified: true,
+ allowedEditors: { where: { authorized: true }, select: { userId: true } },
+ description: freeText,
+ attributes,
+ reviews: {
+ select: { id: true },
+ },
+ locations: {
+ select: {
+ id: true,
+ street1: true,
+ street2: true,
+ city: true,
+ postCode: true,
+ country: { select: { cca2: true } },
+ govDist: { select: { abbrev: true, tsKey: true, tsNs: true } },
+ },
+ },
+ },
+ })
+ const { allowedEditors, ...orgData } = org
+ const reformatted = {
+ ...orgData,
+ isClaimed: Boolean(allowedEditors.length),
+ }
+
+ return reformatted
+}
diff --git a/packages/api/router/organization/query.forOrgPageEdits.schema.ts b/packages/api/router/organization/query.forOrgPageEdits.schema.ts
new file mode 100644
index 0000000000..e508a676cc
--- /dev/null
+++ b/packages/api/router/organization/query.forOrgPageEdits.schema.ts
@@ -0,0 +1,4 @@
+import { z } from 'zod'
+
+export const ZForOrgPageEditsSchema = z.object({ slug: z.string() })
+export type TForOrgPageEditsSchema = z.infer
diff --git a/packages/api/router/organization/schemas.ts b/packages/api/router/organization/schemas.ts
index bdef2c7b0a..41181d25f7 100644
--- a/packages/api/router/organization/schemas.ts
+++ b/packages/api/router/organization/schemas.ts
@@ -6,6 +6,7 @@ export * from './query.checkForExisting.schema'
export * from './query.forLocationPage.schema'
export * from './query.forOrganizationTable.schema'
export * from './query.forOrgPage.schema'
+export * from './query.forOrgPageEdits.schema'
export * from './query.generateSlug.schema'
export * from './query.getById.schema'
export * from './query.getBySlug.schema'
From 724d56f54809bcbe2c2356b4f3cf8b94d59c726e Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 18:05:36 -0400
Subject: [PATCH 007/131] remove prisma from context
---
packages/api/lib/context.ts | 2 -
packages/api/lib/prismaRaw/coveredAreas.ts | 44 -------
packages/api/lib/prismaRaw/index.ts | 1 -
packages/api/prisma/org.ts | 135 ---------------------
packages/api/router/organization/lib.ts | 26 ----
packages/api/trpc/client.ts | 2 -
6 files changed, 210 deletions(-)
delete mode 100644 packages/api/lib/prismaRaw/coveredAreas.ts
delete mode 100644 packages/api/prisma/org.ts
delete mode 100644 packages/api/router/organization/lib.ts
diff --git a/packages/api/lib/context.ts b/packages/api/lib/context.ts
index 68216f004d..83a1d45ee3 100644
--- a/packages/api/lib/context.ts
+++ b/packages/api/lib/context.ts
@@ -3,7 +3,6 @@ import { type CreateNextContextOptions } from '@trpc/server/adapters/next'
import { type NextApiRequest, type NextApiResponse } from 'next'
import { getServerSession, type Session } from '@weareinreach/auth'
-import { prisma } from '@weareinreach/db/client'
import { generateId } from '@weareinreach/db/lib/idGen'
export type CreateContextOptions = {
@@ -24,7 +23,6 @@ export type CreateContextOptions = {
export const createContextInner = (opts: CreateContextOptions) => {
return {
session: opts.session,
- prisma,
generateId,
skipCache: false,
req: opts.req,
diff --git a/packages/api/lib/prismaRaw/coveredAreas.ts b/packages/api/lib/prismaRaw/coveredAreas.ts
deleted file mode 100644
index 11cfb77862..0000000000
--- a/packages/api/lib/prismaRaw/coveredAreas.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { type Context } from '../context'
-
-export const getCoveredDists = async (coords: Coords, ctx: Context) => {
- const { lat, lon } = coords
-
- const result = await ctx.prisma.$queryRaw<{ id: string }[]>`
- SELECT id FROM "GovDist"
- WHERE ST_CoveredBy(ST_SetSRID(ST_MakePoint(${lon}, ${lat}),4326), geo)
- `
- return result
-}
-export const getCoveredCountry = async (coords: Coords, ctx: Context) => {
- const { lat, lon } = coords
-
- const result = await ctx.prisma.$queryRaw<{ id: string }>`
- SELECT id FROM "Country"
- WHERE ST_CoveredBy(ST_SetSRID(ST_MakePoint(${lon}, ${lat}),4326), geo)
- `
- return result
-}
-export const getCoveredAreas = async (coords: Coords, ctx: Context) => {
- const { lat, lon } = coords
-
- const result = await ctx.prisma.$transaction(async (tx) => {
- const govDist = await tx.$queryRaw<{ id: string }[]>`
- SELECT id FROM "GovDist"
- WHERE ST_CoveredBy(ST_SetSRID(ST_MakePoint(${lon}, ${lat}),4326), geo)
- `
- const country = await tx.$queryRaw<{ id: string }[]>`
- SELECT id FROM "Country"
- WHERE ST_CoveredBy(ST_SetSRID(ST_MakePoint(${lon}, ${lat}),4326), geo)
- `
- return {
- country,
- govDist,
- }
- })
- return result
-}
-
-type Coords = {
- lat: number
- lon: number
-}
diff --git a/packages/api/lib/prismaRaw/index.ts b/packages/api/lib/prismaRaw/index.ts
index f295d4eb50..93a111c83c 100644
--- a/packages/api/lib/prismaRaw/index.ts
+++ b/packages/api/lib/prismaRaw/index.ts
@@ -1,5 +1,4 @@
// codegen:start {preset: barrel, include: ./*.ts}
-export * from './coveredAreas'
export * from './orgSearch'
export * from './updateGeo'
// codegen:end
diff --git a/packages/api/prisma/org.ts b/packages/api/prisma/org.ts
deleted file mode 100644
index 315206f20f..0000000000
--- a/packages/api/prisma/org.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { getDistance } from 'geolib'
-
-import { type Prisma } from '@weareinreach/db'
-import { type Context } from '~api/lib'
-import { attributeFilter, serviceFilter } from '~api/schemas/filters'
-import { type DistSearch } from '~api/schemas/org/search'
-import { isPublic } from '~api/schemas/selects/common'
-import { orgSearchSelect } from '~api/schemas/selects/org'
-
-export const prismaDistSearchDetails = async ({ ctx, input }: PrismaSearchDistance) => {
- const { resultIds, skip, take, lat: latitude, lon: longitude, attributes, services } = input
- const results = await ctx.prisma.organization.findMany({
- where: {
- id: { in: resultIds },
- // ...attributeFilter(attributes),
- // ...serviceFilter(services),
- ...isPublic,
- },
- select: orgSearchSelect,
- })
-
- const transformed = results.map(({ attributes, description, locations, services, ...rest }) => {
- const servIds = new Set()
- const attribIds = new Set()
- const cities: City[] = []
- const serviceTagMap = new Map()
- const serviceCategoryMap = new Map()
- const attributeMap = new Map()
-
- services.forEach(({ services }) =>
- services.forEach(({ tag, service }) => {
- const { id, tsKey, tsNs, category } = tag
- servIds.add(id)
- serviceCategoryMap.set(category.id, category)
- serviceTagMap.set(id, { id, tsKey, tsNs })
- service.attributes.forEach(({ attribute }) => {
- const { categories, ...rest } = attribute
- attribIds.add(rest.id)
- categories.forEach(({ category }) =>
- attributeMap.set(`${rest.id}${category.tag}`, { category, ...rest })
- )
- })
- })
- )
-
- locations.forEach(({ services, city, ...coords }) => {
- cities.push({
- city,
- dist: getDistance(
- { latitude, longitude },
- { latitude: coords.latitude ?? 0, longitude: coords.longitude ?? 0 },
- 1000
- ),
- })
- services.forEach(({ service }) =>
- service.services.forEach(({ tag, service }) => {
- const { id, tsKey, tsNs, category } = tag
- servIds.add(id)
- serviceCategoryMap.set(category.id, category)
- serviceTagMap.set(id, { id, tsKey, tsNs })
- service.attributes.forEach(({ attribute }) => {
- const { categories, ...rest } = attribute
- attribIds.add(rest.id)
- categories.forEach(({ category }) =>
- attributeMap.set(`${rest.id}${category.tag}`, { category, ...rest })
- )
- })
- })
- )
- })
- attributes.forEach(({ attribute }) => {
- const { categories, ...rest } = attribute
- attribIds.add(rest.id)
- categories.forEach(({ category }) =>
- attributeMap.set(`${rest.id}${category.tag}`, { category, ...rest })
- )
- })
-
- const desc = description
- ? { key: description.key, ns: description.ns, text: description.tsKey.text }
- : null
-
- // const serviceTags = Array.from(serviceTagMap.values())
- const serviceCategories = Array.from(serviceCategoryMap.values())
- const allAttributes = Array.from(attributeMap.values())
-
- const orgLeader = allAttributes.filter(({ category }) => category.tag === 'organization-leadership')
- const orgFocus = allAttributes.filter(
- ({ category, _count: count }) => category.tag === 'service-focus' && count.parents === 0
- )
- const sortedCities = [
- ...new Set(cities.sort(({ dist: distA }, { dist: distB }) => distA - distB).map(({ city }) => city)),
- ]
-
- return {
- ...rest,
- description: desc,
- // attributes: allAttributes,
- // services: serviceTags,
- serviceCategories,
- orgLeader,
- orgFocus,
- locations: sortedCities,
- }
- })
-
- return transformed
-}
-
-export type PrismaDistSearchDetailsResult = Prisma.PromiseReturnType
-interface PrismaSearchDistance {
- ctx: Context
- input: DistSearch & { resultIds: string[] }
-}
-type IdKeyNs = {
- id: string
- tsKey: string
- tsNs: string
-}
-type Attribute = {
- id: string
- tsKey: string
- icon: string | null
- iconBg: string | null
- category: {
- tag: string
- }
- _count: {
- parents: number
- }
-}
-type City = {
- city: string
- dist: number
-}
diff --git a/packages/api/router/organization/lib.ts b/packages/api/router/organization/lib.ts
deleted file mode 100644
index ec933228ea..0000000000
--- a/packages/api/router/organization/lib.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import slugify from 'slugify'
-
-import { type Context } from '~api/lib/context'
-
-export const uniqueSlug = async (ctx: Context, name: string, inc?: number): Promise => {
- try {
- const check = async (slug: string) => {
- const existing = await ctx.prisma.organization.findUnique({
- where: {
- slug,
- },
- select: {
- slug: true,
- },
- })
- return !existing?.slug
- }
- const generatedSlug = slugify(inc ? `${name} ${inc}` : name, { lower: true, strict: true, trim: true })
- const isUnique = await check(generatedSlug)
- if (isUnique) return generatedSlug
- else return await uniqueSlug(ctx, name, (inc ?? 0) + 1)
- } catch (error) {
- console.error(error)
- throw error
- }
-}
diff --git a/packages/api/trpc/client.ts b/packages/api/trpc/client.ts
index 00363ffb57..d4232a8f03 100644
--- a/packages/api/trpc/client.ts
+++ b/packages/api/trpc/client.ts
@@ -19,12 +19,10 @@ export const trpcConfig = {
transformer,
links: [
devtoolsLink({
- // eslint-disable-next-line node/no-process-env
enabled: process.env.NODE_ENV === 'development',
}),
loggerLink({
enabled: (opts) =>
- // eslint-disable-next-line node/no-process-env
(process.env.NODE_ENV === 'development' && typeof window !== 'undefined') ||
(opts.direction === 'down' && opts.result instanceof Error),
}),
From 87d5f141c1c8dc1b9c2149d3f41d2158c9b704fe Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 18:07:50 -0400
Subject: [PATCH 008/131] log display during dev mode
---
packages/util/logger/index.ts | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/packages/util/logger/index.ts b/packages/util/logger/index.ts
index a10b43b2b3..943b059810 100644
--- a/packages/util/logger/index.ts
+++ b/packages/util/logger/index.ts
@@ -1,6 +1,13 @@
import { type ISettingsParam, Logger } from 'tslog'
-export const appLog = new Logger({ name: 'app', type: 'json', hideLogPositionForProduction: true })
+// eslint-disable-next-line node/no-process-env
+const isDev = process.env.NODE_ENV === 'development'
+
+export const appLog = new Logger({
+ name: 'app',
+ type: isDev ? 'pretty' : 'json',
+ hideLogPositionForProduction: true,
+})
export const createLoggerInstance = (name: string, opts?: Omit, 'name'>) =>
appLog.getSubLogger({ name, ...opts })
From ded5a5734a5de0ff396de768f5925abf2d78f3a7 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 21 Aug 2023 18:08:26 -0400
Subject: [PATCH 009/131] edit mode toolbar
---
apps/app/public/locales/en/common.json | 8 ++
apps/app/src/pages/index.tsx | 4 +-
apps/app/src/pages/org/[slug]/edit.tsx | 69 ++++----------
packages/ui/components/core/Breadcrumb.tsx | 6 +-
packages/ui/components/sections/Navbar.tsx | 105 ++++++++++++++++++++-
packages/ui/hooks/useEditMode.ts | 9 +-
packages/ui/providers/EditMode.tsx | 11 ++-
7 files changed, 150 insertions(+), 62 deletions(-)
diff --git a/apps/app/public/locales/en/common.json b/apps/app/public/locales/en/common.json
index 6f761ecd85..07f5ad60a7 100644
--- a/apps/app/public/locales/en/common.json
+++ b/apps/app/public/locales/en/common.json
@@ -95,6 +95,9 @@
"try-again-text": "Something went wrong! Please try again."
},
"exclude": "Exclude",
+ "exit": {
+ "edit-mode": "Exit edit mode"
+ },
"filter-by-service": "Filter by services",
"find-resources": "Find resources",
"find-x": "Find {{value}}",
@@ -396,9 +399,13 @@
"please-wait": "Please wait...",
"prev": "Prev",
"print": "Print",
+ "publish": "Publish",
+ "restore": "Restore",
+ "reverify": "Reverify",
"review": "Review",
"reviews": "Reviews",
"save": "Save",
+ "save-changes": "Save changes",
"saved": "Saved",
"search": "Search",
"service-hours": "Service hours",
@@ -407,6 +414,7 @@
"sign-up": "Sign up",
"skip": "Skip",
"support": "Support",
+ "unpublish": "Unpublish",
"website": "Website",
"yes": "Yes"
}
diff --git a/apps/app/src/pages/index.tsx b/apps/app/src/pages/index.tsx
index a1531d8ff9..1d5254bd5c 100644
--- a/apps/app/src/pages/index.tsx
+++ b/apps/app/src/pages/index.tsx
@@ -33,7 +33,7 @@ import { ResetPasswordModal } from '@weareinreach/ui/modals/ResetPassword'
import { api } from '~app/utils/api'
import { getServerSideTranslations } from '~app/utils/i18n'
-import { type NextPageWithoutGrid } from './_app'
+import { type NextPageWithOptions } from './_app'
const useStyles = createStyles((theme) => ({
callout1text: {
@@ -153,7 +153,7 @@ const CardTranslation = ({ i18nKey, t }: { i18nKey: string; t: TFunction }) => {
)
}
-const Home: NextPageWithoutGrid = () => {
+const Home: NextPageWithOptions = () => {
const { t } = useTranslation('landingPage')
const theme = useMantineTheme()
const variants = useCustomVariant()
diff --git a/apps/app/src/pages/org/[slug]/edit.tsx b/apps/app/src/pages/org/[slug]/edit.tsx
index 6d7574a507..1e064c6655 100644
--- a/apps/app/src/pages/org/[slug]/edit.tsx
+++ b/apps/app/src/pages/org/[slug]/edit.tsx
@@ -1,7 +1,7 @@
/* eslint-disable i18next/no-literal-string */
import { Grid, Stack, Tabs, Title } from '@mantine/core'
import { useElementSize } from '@mantine/hooks'
-import { type GetServerSideProps, type NextPage } from 'next'
+import { type GetServerSideProps } from 'next'
import { useRouter } from 'next/router'
import { useTranslation } from 'next-i18next'
import { type RoutedQuery } from 'nextjs-routes'
@@ -18,63 +18,31 @@ import { PhotosSection } from '@weareinreach/ui/components/sections/Photos'
import { ReviewSection } from '@weareinreach/ui/components/sections/Reviews'
import { ServicesInfoCard } from '@weareinreach/ui/components/sections/ServicesInfo'
import { VisitCard } from '@weareinreach/ui/components/sections/VisitCard'
+import { type NextPageWithOptions } from '~app/pages/_app'
import { api } from '~app/utils/api'
import { getServerSideTranslations } from '~app/utils/i18n'
-const OrganizationPage: NextPage = () => {
+const OrganizationPage: NextPageWithOptions = () => {
const { t } = useTranslation()
const router = useRouter<'/org/[slug]'>()
const { query } = router.isReady ? router : { query: { slug: '' } }
const [activeTab, setActiveTab] = useState('services')
const [loading, setLoading] = useState(true)
- const { data, status } = api.organization.getBySlug.useQuery(query, { enabled: router.isReady })
+ const { data, status } = api.organization.forOrgPageEdits.useQuery(query, { enabled: router.isReady })
+ const { data: hasRemote } = api.service.forServiceInfoCard.useQuery(
+ { parentId: data?.id ?? '', remoteOnly: true },
+ {
+ enabled: !!data?.id && data?.locations.length > 1,
+ select: (data) => data.length !== 0,
+ }
+ )
const { ref, width } = useElementSize()
useEffect(() => {
if (data && status === 'success') setLoading(false)
}, [data, status])
if (loading || !data) return <>Loading>
- const {
- // emails,
- // phones,
- // socialMedia,
- // websites,
- userLists,
- attributes,
- description,
- slug,
- // photos,
- reviews,
- locations,
- isClaimed,
- id: organizationId,
- } = data
-
- const body =
- locations?.length === 1 ? (
-
-
- {t('services')}
- {t('photo', { count: 2 })}
- {t('review', { count: 2 })}
-
-
-
-
-
-
-
-
-
-
-
- ) : (
- <>
- {locations.map((location) => (
-
- ))}
- >
- )
+ const { attributes, description, slug, reviews, locations, isClaimed, id: organizationId } = data
const sidebar =
locations?.length === 1 ? (
@@ -95,13 +63,15 @@ const OrganizationPage: NextPage = () => {
return (
<>
- EDIT MODE
+
+ EDIT MODE
+
- router.back() }}
saved={Boolean(userLists?.length)}
organizationId={organizationId}
- />
+ /> */}
{
isClaimed,
}}
/>
- {body}
+ {locations.map((location) => (
+
+ ))}
@@ -166,5 +138,4 @@ export const getServerSideProps: GetServerSideProps<
props,
}
}
-
export default OrganizationPage
diff --git a/packages/ui/components/core/Breadcrumb.tsx b/packages/ui/components/core/Breadcrumb.tsx
index 9000c5afa7..96b435fa8b 100644
--- a/packages/ui/components/core/Breadcrumb.tsx
+++ b/packages/ui/components/core/Breadcrumb.tsx
@@ -35,7 +35,7 @@ const useStyles = createStyles((theme) => ({
const isString = (...args: unknown[]) => args.every((val) => typeof val === 'string')
export const Breadcrumb = (props: BreadcrumbProps) => {
- const { option, backTo, backToText, onClick } = props
+ const { option, backTo, backToText, onClick, children } = props
const { classes } = useStyles()
const theme = useMantineTheme()
const { t } = useTranslation('common')
@@ -125,7 +125,7 @@ export const Breadcrumb = (props: BreadcrumbProps) => {
className={classes.icon}
/>
- {childrenRender}
+ {children || childrenRender}
@@ -150,7 +150,7 @@ type PossibleBreadcrumbProps = {
export type ModalTitleBreadcrumb = Omit & {
onClick?: MouseEventHandler
}
-export type BreadcrumbProps = Close | Back | BackToDynamic
+export type BreadcrumbProps = (Close | Back | BackToDynamic) & { children?: React.ReactNode }
interface Close {
option: 'close'
onClick: MouseEventHandler
diff --git a/packages/ui/components/sections/Navbar.tsx b/packages/ui/components/sections/Navbar.tsx
index ff8c35465f..0cdaf1316e 100644
--- a/packages/ui/components/sections/Navbar.tsx
+++ b/packages/ui/components/sections/Navbar.tsx
@@ -1,5 +1,6 @@
-import { Container, createStyles, Flex, Group, rem } from '@mantine/core'
+import { Container, createStyles, Flex, Group, rem, UnstyledButton, useMantineTheme } from '@mantine/core'
import Image from 'next/image'
+import { useRouter } from 'next/router'
import { useTranslation } from 'next-i18next'
import InReachLogo from '~ui/assets/inreach.svg'
@@ -7,25 +8,115 @@ import { Button } from '~ui/components/core/Button'
import { Link } from '~ui/components/core/Link'
import { MobileNav } from '~ui/components/core/MobileNav'
import { UserMenu } from '~ui/components/core/UserMenu'
-import { useCustomVariant, useScreenSize } from '~ui/hooks'
+import { useCustomVariant, useEditMode, useScreenSize } from '~ui/hooks'
+import { Icon } from '~ui/icon'
+import { trpc as api } from '~ui/lib/trpcClient'
const useStyles = createStyles((theme) => ({
desktopNav: {
- height: rem(64),
+ minHeight: rem(64),
boxShadow: theme.shadows.xs,
marginBottom: rem(40),
[theme.fn.smallerThan('sm')]: {
display: 'none',
},
+ position: 'sticky',
+ top: 0,
+ left: 0,
+ right: 0,
+ zIndex: 10000,
+ backgroundColor: theme.other.colors.secondary.white,
},
mobileNav: {
[theme.fn.largerThan('sm')]: {
display: 'none',
},
},
+ editBar: {
+ background: `linear-gradient(180deg, ${theme.other.colors.secondary.white} 0%, ${theme.fn.lighten(
+ theme.other.colors.tertiary.red,
+ 0.75
+ )} 10%)`,
+ padding: `${rem(8)} ${rem(128)} ${rem(8)} ${rem(64)}`,
+ margin: `0 ${rem(-64)}`,
+ },
+ editBarButtonText: {
+ ...theme.other.utilityFonts.utility3,
+ ...theme.fn.hover({ backgroundColor: theme.other.colors.secondary.white }),
+ padding: `${rem(4)} ${rem(8)}`,
+ borderRadius: rem(8),
+ '&:disabled': {
+ color: theme.other.colors.secondary.darkGray,
+ cursor: 'not-allowed',
+ ...theme.fn.hover({ backgroundColor: theme.other.colors.primary.lightGray }),
+ },
+ },
}))
+const EditModeBar = () => {
+ const { classes } = useStyles()
+ const theme = useMantineTheme()
+ const { canSave, handleEditSubmit } = useEditMode()
+ const { t } = useTranslation('common')
+ const router = useRouter()
+ const { orgLocationId, slug } = router.query
+ const { data, isLoading } = api.misc.forEditNavbar.useQuery(
+ orgLocationId ? { orgLocationId: orgLocationId as string } : { slug: slug as string },
+ {
+ enabled: typeof orgLocationId === 'string' || typeof slug === 'string',
+ }
+ )
+
+ return (
+
+
+
+
+ {t('exit.edit-mode')}
+
+
+
+ handleEditSubmit(() => console.log('save action from toolbar'))}
+ >
+
+
+ {t('words.save-changes')}
+
+
+ {slug && !orgLocationId && (
+
+
+
+ {t('words.reverify')}
+
+
+ )}
+
+
+
+ {t(data?.published ? 'words.unpublish' : 'words.publish')}
+
+
+
+
+
+ {t(data?.deleted ? 'words.restore' : 'words.delete')}
+
+
+
+
+ )
+}
+
export const Navbar = () => {
+ const { isEditMode } = useEditMode()
const { t } = useTranslation('common')
const { classes } = useStyles()
const variants = useCustomVariant()
@@ -53,7 +144,15 @@ export const Navbar = () => {
+ {isEditMode ? : null}
>
)
}
+
+type NavbarProps = {
+ editMode?: boolean
+ editModeRef?: {
+ handleEditSubmit: (handler: () => void) => void
+ }
+}
diff --git a/packages/ui/hooks/useEditMode.ts b/packages/ui/hooks/useEditMode.ts
index dd0f0006f9..20b39fec31 100644
--- a/packages/ui/hooks/useEditMode.ts
+++ b/packages/ui/hooks/useEditMode.ts
@@ -1,11 +1,18 @@
+import { useRouter } from 'next/router'
import { useContext } from 'react'
import { EditModeContext } from '~ui/providers/EditMode'
export const useEditMode = () => {
+ const router = useRouter()
const ctx = useContext(EditModeContext)
if (!ctx) {
throw new Error('useEditMode must be used within a EditModeProvider')
}
- return ctx
+ const isEditMode = router.pathname.endsWith('/edit')
+
+ return {
+ isEditMode,
+ ...ctx,
+ }
}
diff --git a/packages/ui/providers/EditMode.tsx b/packages/ui/providers/EditMode.tsx
index fb6f026fc3..5808bef150 100644
--- a/packages/ui/providers/EditMode.tsx
+++ b/packages/ui/providers/EditMode.tsx
@@ -4,14 +4,17 @@ export const EditModeContext = createContext(null)
export const EditModeProvider = ({ children }: { children: React.ReactNode }) => {
const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)
- const editModeRef = useRef({ handleEditSubmit: (handler: () => void) => handler() })
+ const editModeRef = useRef({
+ handleEditSubmit: (handler: () => void) => handler(),
+ canSave: false,
+ })
const contextValue = {
unsaved: {
set: setHasUnsavedChanges,
state: hasUnsavedChanges,
},
- submitEditHandler: editModeRef.current.handleEditSubmit,
+ ...editModeRef.current,
}
return {children}
@@ -22,8 +25,8 @@ type EditContext = {
set: Dispatch>
state: boolean
}
- submitEditHandler: (handler: () => void) => void
-}
+} & EditModeRef
type EditModeRef = {
handleEditSubmit: (handler: () => void) => void
+ canSave: boolean
}
From 8c0a2a7fb1ac3ed4ffd9731ee650fe2ff365a048 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 23 Aug 2023 11:25:54 -0400
Subject: [PATCH 010/131] make component polymorphic
---
.../data-portal/InlineTextInput.stories.tsx | 29 ++++------
.../data-portal/InlineTextInput.tsx | 55 ++++++-------------
2 files changed, 28 insertions(+), 56 deletions(-)
diff --git a/packages/ui/components/data-portal/InlineTextInput.stories.tsx b/packages/ui/components/data-portal/InlineTextInput.stories.tsx
index 183b81fe09..4c1a3e751d 100644
--- a/packages/ui/components/data-portal/InlineTextInput.stories.tsx
+++ b/packages/ui/components/data-portal/InlineTextInput.stories.tsx
@@ -1,14 +1,14 @@
-import { Box } from '@mantine/core'
-import { type Meta } from '@storybook/react'
+import { Textarea } from '@mantine/core'
+import { type Meta, type StoryObj } from '@storybook/react'
-import { InlineTextarea, InlineTextInput } from './InlineTextInput'
+import { InlineTextInput } from './InlineTextInput'
export default {
title: 'Data Portal/Fields/Inline Text Field',
component: InlineTextInput,
parameters: {
layout: 'fullscreen',
- layoutWrapper: 'centeredHalf',
+ layoutWrapper: 'gridDouble',
},
argTypes: {
fontSize: {
@@ -21,25 +21,16 @@ export default {
value: 'Test value',
},
} satisfies Meta
-
-export const TextInput = {
+type StoryDef = StoryObj
+export const SingleLine = {
args: {
fontSize: 'h1',
},
- render: (args) => (
-
-
-
- ),
-} satisfies Meta
+} satisfies StoryDef
-export const Textarea = {
+export const MultiLine = {
args: {
fontSize: 'utility1',
+ component: Textarea,
},
- render: (args) => (
-
-
-
- ),
-} satisfies Meta
+} satisfies StoryDef
diff --git a/packages/ui/components/data-portal/InlineTextInput.tsx b/packages/ui/components/data-portal/InlineTextInput.tsx
index 06da4cef2f..69aeb73646 100644
--- a/packages/ui/components/data-portal/InlineTextInput.tsx
+++ b/packages/ui/components/data-portal/InlineTextInput.tsx
@@ -1,11 +1,12 @@
import {
+ Box,
+ createPolymorphicComponent,
createStyles,
rem,
- Textarea,
- type TextareaProps,
TextInput,
type TextInputProps,
} from '@mantine/core'
+import { forwardRef } from 'react'
const useStyles = createStyles((theme) => ({
...theme.other.utilityFonts,
@@ -22,59 +23,39 @@ const useBaseStyles = createStyles((theme) => ({
'&:focus, &:focus-within': {
borderColor: theme.other.colors.secondary.black,
borderWidth: rem(1),
+ backgroundColor: theme.other.colors.secondary.white,
},
'&[data-isDirty=true]': {
- backgroundColor: theme.other.colors.primary.lightGray,
+ backgroundColor: theme.fn.lighten(theme.other.colors.secondary.teal, 0.6),
},
},
}))
-const useFontSize = ({ fontSize, classNames }: SingleLineTextProps | MultiLineTextProps) => {
+const useFontSize = ({ fontSize, classNames }: InlineEditProps) => {
const { classes } = useStyles()
const { classes: baseClasses, cx } = useBaseStyles()
return {
...classNames,
- input: fontSize ? cx(classes[fontSize], baseClasses.input) : baseClasses.input,
+ input: fontSize
+ ? cx(classNames?.input, classes[fontSize], baseClasses.input)
+ : cx(classNames?.input, baseClasses.input),
}
}
-/**
- * Components works like TextInput. To use one of the variant fonts pass a string like 'h1', 'h2', 'utility1',
- * etc to the fontSize prop.
- *
- * @param props - TextInputProps
- * @param props.fontSize - HeadingSizes | utilitySizes
- * @returns JSX.Element
- */
-export const InlineTextInput = ({ fontSize, ...props }: SingleLineTextProps) => {
- const variant = useFontSize({ fontSize, ...props })
+const _InlineTextInput = forwardRef(
+ ({ fontSize, classNames, ...rest }, ref) => {
+ const variant = useFontSize({ fontSize, ...rest })
- return
-}
-
-/**
- * Component works like Textarea. To use one of the variant fonts pass a string like 'h1', 'h2', 'utility1',
- * etc to the fontSize prop.
- *
- * @param props - TextareaProps
- * @param props.fontSize - HeadingSizes | utilitySizes
- * @returns JSX.Element
- */
-export const InlineTextarea = ({ fontSize, ...props }: MultiLineTextProps) => {
- const variant = useFontSize({ fontSize, ...props })
-
- return
-}
+ return
+ }
+)
+_InlineTextInput.displayName = 'InlineEdit'
+export const InlineTextInput = createPolymorphicComponent<'input', InlineEditProps>(_InlineTextInput)
type FontSizes = keyof ReturnType['classes']
-interface SingleLineTextProps extends TextInputProps {
+interface InlineEditProps extends TextInputProps {
fontSize?: FontSizes
/** Flag if background color should change to indicate that the field was edited */
'data-isDirty'?: boolean
}
-
-interface MultiLineTextProps extends TextareaProps {
- fontSize?: FontSizes
- 'data-isDirty'?: boolean
-}
From 5fab005963b36b0497cdd04c20285a2c351ddbbc Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 23 Aug 2023 13:59:03 -0400
Subject: [PATCH 011/131] extract loading state
---
.../pages/org/[slug]/[orgLocationId]/edit.tsx | 4 +--
.../org/[slug]/[orgLocationId]/index.tsx | 29 ++---------------
apps/app/src/pages/org/[slug]/index.tsx | 32 ++-----------------
.../ui/loading-states/OrgLocationPage.tsx | 25 +++++++++++++++
packages/ui/loading-states/OrgPage.tsx | 25 +++++++++++++++
5 files changed, 57 insertions(+), 58 deletions(-)
create mode 100644 packages/ui/loading-states/OrgLocationPage.tsx
create mode 100644 packages/ui/loading-states/OrgPage.tsx
diff --git a/apps/app/src/pages/org/[slug]/[orgLocationId]/edit.tsx b/apps/app/src/pages/org/[slug]/[orgLocationId]/edit.tsx
index f591dc6d11..27d171486d 100644
--- a/apps/app/src/pages/org/[slug]/[orgLocationId]/edit.tsx
+++ b/apps/app/src/pages/org/[slug]/[orgLocationId]/edit.tsx
@@ -16,6 +16,7 @@ import { PhotosSection } from '@weareinreach/ui/components/sections/Photos'
import { ReviewSection } from '@weareinreach/ui/components/sections/Reviews'
import { ServicesInfoCard } from '@weareinreach/ui/components/sections/ServicesInfo'
import { VisitCard } from '@weareinreach/ui/components/sections/VisitCard'
+import { OrgLocationPageLoading } from '@weareinreach/ui/loading-states/OrgLocationPage'
import { api } from '~app/utils/api'
import { getServerSideTranslations } from '~app/utils/i18n'
@@ -36,7 +37,7 @@ const OrgLocationPage: NextPage = () => {
useEffect(() => {
if (data && status === 'success' && orgData && orgDataStatus === 'success') setLoading(false)
}, [data, status, orgData, orgDataStatus])
- if (loading || !data || !orgData) return <>Loading>
+ if (loading || !data || !orgData) return
const {
// emails,
@@ -69,7 +70,6 @@ const OrgLocationPage: NextPage = () => {
/>
(
- <>
-
- {/* Toolbar */}
-
-
- {/* Listing Basic */}
-
- {/* Body */}
-
- {/* Tab panels */}
-
-
-
-
- {/* Contact Card */}
-
- {/* Visit Card */}
-
-
-
- >
-)
-
const useStyles = createStyles((theme) => ({
tabsList: {
position: 'sticky',
@@ -83,7 +59,7 @@ const OrgLocationPage: NextPage = () => {
useEffect(() => {
if (data && status === 'success' && orgData && orgDataStatus === 'success') setLoading(false)
}, [data, status, orgData, orgDataStatus])
- if (loading || !data || !orgData || router.isFallback) return
+ if (loading || !data || !orgData || router.isFallback) return
const { attributes, description, reviews } = data
@@ -109,7 +85,6 @@ const OrgLocationPage: NextPage = () => {
/>
(
- <>
-
- {/* Toolbar */}
-
-
- {/* Listing Basic */}
-
- {/* Body */}
-
- {/* Tab panels */}
-
-
-
-
- {/* Contact Card */}
-
- {/* Visit Card */}
-
-
-
- >
-)
const useStyles = createStyles((theme) => ({
tabsList: {
@@ -97,7 +72,7 @@ const OrganizationPage = ({ slug }: InferGetStaticPropsType
+ if (loading || !data || router.isFallback) return
const { userLists, attributes, description, reviews, locations, isClaimed, id: organizationId } = data
@@ -201,7 +176,6 @@ const OrganizationPage = ({ slug }: InferGetStaticPropsType
(
+ <>
+
+ {/* Toolbar */}
+
+
+ {/* Listing Basic */}
+
+ {/* Body */}
+
+ {/* Tab panels */}
+
+
+
+
+ {/* Contact Card */}
+
+ {/* Visit Card */}
+
+
+
+ >
+)
diff --git a/packages/ui/loading-states/OrgPage.tsx b/packages/ui/loading-states/OrgPage.tsx
new file mode 100644
index 0000000000..2170fa4fb0
--- /dev/null
+++ b/packages/ui/loading-states/OrgPage.tsx
@@ -0,0 +1,25 @@
+import { Grid, Skeleton, Stack } from '@mantine/core'
+
+export const OrgPageLoading = () => (
+ <>
+
+ {/* Toolbar */}
+
+
+ {/* Listing Basic */}
+
+ {/* Body */}
+
+ {/* Tab panels */}
+
+
+
+
+ {/* Contact Card */}
+
+ {/* Visit Card */}
+
+
+
+ >
+)
From e290bbee737804cf4858316b0420065d3755c06e Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 23 Aug 2023 16:43:22 -0400
Subject: [PATCH 012/131] add zustand
---
packages/ui/package.json | 3 ++-
pnpm-lock.yaml | 9 ++++++---
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/packages/ui/package.json b/packages/ui/package.json
index f33088d645..bd3f72a803 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -44,7 +44,8 @@
"nextjs-routes": "2.0.1",
"probe-image-size": "7.2.3",
"react-phone-number-input": "3.3.4",
- "react-string-replace": "1.1.1"
+ "react-string-replace": "1.1.1",
+ "zustand": "4.4.1"
},
"devDependencies": {
"@babel/core": "7.22.10",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8a48c0de12..27f8e8cc94 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1357,7 +1357,7 @@ importers:
version: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.4.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0)
eslint-plugin-node:
specifier: npm:eslint-plugin-n@latest
- version: /eslint-plugin-n@16.0.2(eslint@8.47.0)
+ version: /eslint-plugin-n@16.0.1(eslint@8.47.0)
eslint-plugin-react:
specifier: 7.33.2
version: 7.33.2(eslint@8.47.0)
@@ -1451,6 +1451,9 @@ importers:
react-string-replace:
specifier: 1.1.1
version: 1.1.1
+ zustand:
+ specifier: 4.4.1
+ version: 4.4.1(@types/react@18.2.20)(react@18.2.0)
devDependencies:
'@babel/core':
specifier: 7.22.10
@@ -14885,8 +14888,8 @@ packages:
semver: 6.3.1
dev: true
- /eslint-plugin-n@16.0.2(eslint@8.47.0):
- resolution: {integrity: sha512-Y66uDfUNbBzypsr0kELWrIz+5skicECrLUqlWuXawNSLUq3ltGlCwu6phboYYOTSnoTdHgTLrc+5Ydo6KjzZog==}
+ /eslint-plugin-n@16.0.1(eslint@8.47.0):
+ resolution: {integrity: sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==}
engines: {node: '>=16.0.0'}
peerDependencies:
eslint: '>=7.0.0'
From 6e527296dbc6d0a6c796b9f37db85619597ac3f2 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 23 Aug 2023 18:19:50 -0400
Subject: [PATCH 013/131] use edge runtime
---
apps/app/src/pages/api/i18n/load.ts | 29 ++++++++++++++++++++++-------
apps/app/src/utils/crowdin.ts | 12 +++++++++++-
2 files changed, 33 insertions(+), 8 deletions(-)
diff --git a/apps/app/src/pages/api/i18n/load.ts b/apps/app/src/pages/api/i18n/load.ts
index dc00cb9731..bfc35c0736 100644
--- a/apps/app/src/pages/api/i18n/load.ts
+++ b/apps/app/src/pages/api/i18n/load.ts
@@ -1,7 +1,6 @@
-/* eslint-disable turbo/no-undeclared-env-vars */
-/* eslint-disable node/no-process-env */
import { context, trace } from '@opentelemetry/api'
-import { type NextApiRequest, type NextApiResponse } from 'next'
+// import { type NextApiRequest, type NextApiResponse } from 'next'
+import { type NextRequest } from 'next/server'
import { z } from 'zod'
import { createLoggerInstance } from '@weareinreach/util/logger'
@@ -9,6 +8,10 @@ import { crowdinOpts } from '~app/data/crowdinOta'
import { crowdinDistTimestamp, fetchCrowdinDbKey, fetchCrowdinFile } from '~app/utils/crowdin'
import { redisReadCache, redisWriteCache } from '~app/utils/vercel-kv'
+export const config = {
+ runtime: 'edge',
+}
+
const QuerySchema = z.object({
lng: z.string(),
ns: z.string(),
@@ -16,8 +19,15 @@ const QuerySchema = z.object({
const tracer = trace.getTracer('inreach-app')
const log = createLoggerInstance('i18n Loader')
-export default async function handler(req: NextApiRequest, res: NextApiResponse) {
- const query = QuerySchema.parse(req.query)
+export default async function handler(req: NextRequest) {
+ const { searchParams } = new URL(req.url)
+ const parsedQuery = QuerySchema.safeParse({ ns: searchParams.get('ns'), lng: searchParams.get('lng') })
+ if (!parsedQuery.success) {
+ return new Response(JSON.stringify({ error: parsedQuery.error.message }), {
+ status: 400,
+ })
+ }
+ const query = parsedQuery.data
const namespaces = query.ns.split(' ')
const langs = query.lng.split(' ')
const cacheWriteQueue: WriteCacheArgs[] = []
@@ -66,11 +76,16 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
results.set(lang, Object.fromEntries(langResult))
} catch (error) {
log.error(error)
- return res.status(500).json({ error })
+ return new Response(JSON.stringify({ error }), {
+ status: 500,
+ })
}
}
const data = Object.fromEntries(results.entries())
- res.status(200).json(data)
+ // res.status(200).json(data)
+ return new Response(JSON.stringify(data), {
+ status: 200,
+ })
}
interface WriteCacheArgs {
diff --git a/apps/app/src/utils/crowdin.ts b/apps/app/src/utils/crowdin.ts
index a0e5fc3ade..61ae92e14a 100644
--- a/apps/app/src/utils/crowdin.ts
+++ b/apps/app/src/utils/crowdin.ts
@@ -1,5 +1,4 @@
/* eslint-disable no-var */
-/* eslint-disable turbo/no-undeclared-env-vars */
/* eslint-disable node/no-process-env */
import Crowdin from '@crowdin/crowdin-api-client'
import OtaClient from '@crowdin/ota-client'
@@ -15,6 +14,17 @@ export const crowdinApi =
export const crowdinOta = new OtaClient(crowdinOpts.hash, {
enterpriseOrganizationDomain: 'inreach',
disableJsonDeepMerge: true,
+ ...(process.env.NEXT_RUNTIME === 'edge'
+ ? {
+ httpClient: {
+ get: async (url: string) => {
+ const data = await fetch(url)
+
+ return (await data.json()) as T
+ },
+ },
+ }
+ : {}),
})
export const crowdinVars = {
From 3b0d88eff6bd942a1549b4ec4bf544aff2f31031 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 23 Aug 2023 18:21:00 -0400
Subject: [PATCH 014/131] basic info inline edits
---
apps/app/src/pages/org/[slug]/edit.tsx | 98 ++++++++--------
.../components/sections/ListingBasicInfo.tsx | 110 ++++++++++++++----
2 files changed, 138 insertions(+), 70 deletions(-)
diff --git a/apps/app/src/pages/org/[slug]/edit.tsx b/apps/app/src/pages/org/[slug]/edit.tsx
index 1e064c6655..3f75347a04 100644
--- a/apps/app/src/pages/org/[slug]/edit.tsx
+++ b/apps/app/src/pages/org/[slug]/edit.tsx
@@ -1,34 +1,46 @@
-/* eslint-disable i18next/no-literal-string */
-import { Grid, Stack, Tabs, Title } from '@mantine/core'
+import { DevTool } from '@hookform/devtools'
+import { Grid, Stack } from '@mantine/core'
import { useElementSize } from '@mantine/hooks'
+import compact from 'just-compact'
import { type GetServerSideProps } from 'next'
import { useRouter } from 'next/router'
import { useTranslation } from 'next-i18next'
import { type RoutedQuery } from 'nextjs-routes'
import { useEffect, useState } from 'react'
+import { FormProvider, useForm } from 'react-hook-form'
+import { z } from 'zod'
import { trpcServerClient } from '@weareinreach/api/trpc'
import { checkServerPermissions } from '@weareinreach/auth'
import { GoogleMap } from '@weareinreach/ui/components/core/GoogleMap'
-import { Toolbar } from '@weareinreach/ui/components/core/Toolbar'
import { ContactSection } from '@weareinreach/ui/components/sections/Contact'
import { ListingBasicInfo } from '@weareinreach/ui/components/sections/ListingBasicInfo'
import { LocationCard } from '@weareinreach/ui/components/sections/LocationCard'
-import { PhotosSection } from '@weareinreach/ui/components/sections/Photos'
-import { ReviewSection } from '@weareinreach/ui/components/sections/Reviews'
-import { ServicesInfoCard } from '@weareinreach/ui/components/sections/ServicesInfo'
-import { VisitCard } from '@weareinreach/ui/components/sections/VisitCard'
+import { OrgPageLoading } from '@weareinreach/ui/loading-states/OrgPage'
import { type NextPageWithOptions } from '~app/pages/_app'
import { api } from '~app/utils/api'
import { getServerSideTranslations } from '~app/utils/i18n'
+const formSchema = z
+ .object({
+ name: z.string(),
+ description: z.string(),
+ })
+ .partial()
+type FormSchema = z.infer
+
const OrganizationPage: NextPageWithOptions = () => {
- const { t } = useTranslation()
const router = useRouter<'/org/[slug]'>()
const { query } = router.isReady ? router : { query: { slug: '' } }
- const [activeTab, setActiveTab] = useState('services')
- const [loading, setLoading] = useState(true)
const { data, status } = api.organization.forOrgPageEdits.useQuery(query, { enabled: router.isReady })
+ const { t } = useTranslation()
+ const formMethods = useForm({
+ values: {
+ name: data?.name,
+ description: data?.description?.tsKey?.text,
+ },
+ })
+ const [loading, setLoading] = useState(true)
const { data: hasRemote } = api.service.forServiceInfoCard.useQuery(
{ parentId: data?.id ?? '', remoteOnly: true },
{
@@ -40,41 +52,15 @@ const OrganizationPage: NextPageWithOptions = () => {
useEffect(() => {
if (data && status === 'success') setLoading(false)
}, [data, status])
- if (loading || !data) return <>Loading>
+ if (loading || !data) return
- const { attributes, description, slug, reviews, locations, isClaimed, id: organizationId } = data
-
- const sidebar =
- locations?.length === 1 ? (
- <>{locations[0] && }>
- ) : (
- locations.length && (
-
- {width && (
- id)}
- width={width}
- height={Math.floor(width * 1.185)}
- />
- )}
-
- )
- )
+ const { attributes, description, slug, locations, isClaimed } = data
return (
- <>
-
- EDIT MODE
-
+
- {/* router.back() }}
- saved={Boolean(userLists?.length)}
- organizationId={organizationId}
- /> */}
{
locations,
isClaimed,
}}
+ edit
/>
- {locations.map((location) => (
-
- ))}
+
+ {locations.map((location) => (
+
+ ))}
+ {hasRemote && }
+
- {/* */}
- {/* */}
- {sidebar}
+
+ {width && (
+ id)}
+ width={width}
+ height={Math.floor(width * 1.185)}
+ />
+ )}
+
+
- >
+
)
}
@@ -126,12 +123,17 @@ export const getServerSideProps: GetServerSideProps<
}
const ssg = await trpcServerClient({ session })
+ const orgId = await ssg.organization.getIdFromSlug.fetch({ slug })
- await ssg.organization.getBySlug.prefetch({ slug })
+ const [i18n] = await Promise.allSettled([
+ getServerSideTranslations(locale, compact(['common', 'services', 'attribute', 'phone-type', orgId?.id])),
+ ssg.organization.getBySlug.prefetch({ slug }),
+ ssg.organization.forOrgPageEdits.prefetch({ slug }),
+ ])
const props = {
session,
trpcState: ssg.dehydrate(),
- ...(await getServerSideTranslations(locale, ['common', 'services', 'attribute', 'phone-type', slug])),
+ ...(i18n.status === 'fulfilled' ? i18n.value : {}),
}
return {
diff --git a/packages/ui/components/sections/ListingBasicInfo.tsx b/packages/ui/components/sections/ListingBasicInfo.tsx
index 967d16e114..9f825adb9a 100644
--- a/packages/ui/components/sections/ListingBasicInfo.tsx
+++ b/packages/ui/components/sections/ListingBasicInfo.tsx
@@ -1,17 +1,20 @@
import { Skeleton, Stack, Text, Title } from '@mantine/core'
import { useTranslation } from 'next-i18next'
+import { memo } from 'react'
+import { useFormContext } from 'react-hook-form'
+import { Textarea, TextInput } from 'react-hook-form-mantine'
import { type ApiOutput } from '@weareinreach/api'
import { BadgeGroup, type CustomBadgeProps } from '~ui/components/core/Badge'
import { Rating } from '~ui/components/core/Rating'
+import { InlineTextInput } from '~ui/components/data-portal/InlineTextInput'
import { useCustomVariant, useFormattedAddress } from '~ui/hooks'
-export const ListingBasicInfo = ({ role, data }: ListingBasicInfoProps) => {
+export const ListingBasicDisplay = memo(({ data }: ListingBasicInfoProps) => {
const { t, ready: i18nReady } = useTranslation(data.id)
const variants = useCustomVariant()
- const { attributes, isClaimed, locations, description, slug, id } = data
+ const { attributes, isClaimed, locations, description, id } = data
- // const isMultiLoc = role === 'org' && (locations?.length ?? 0) > 1
const isSingleLoc = locations?.length === 1
const location = isSingleLoc ? locations[0] : undefined
@@ -72,34 +75,97 @@ export const ListingBasicInfo = ({ role, data }: ListingBasicInfoProps) => {
)
-}
+})
+ListingBasicDisplay.displayName = 'ListingBasicDisplay'
-export type ListingBasicInfoProps = { role: 'org' | 'location' } & (OrgInfoProps | LocationInfoProps)
+export const ListingBasicEdit = ({ data }: ListingBasicInfoProps) => {
+ const form = useFormContext()
+ const { attributes, isClaimed } = data
-export interface OrgInfoProps {
- role: 'org'
- data: {
- name: string
- id: string
- slug: string
- lastVerified: NonNullable['lastVerified']
- attributes: NonNullable['attributes']
- description: NonNullable['description']
- locations: NonNullable['locations']
- isClaimed: boolean
+ const leaderAttributes = attributes.filter(({ attribute }) =>
+ attribute.categories.some(({ category }) => category.tag === 'organization-leadership')
+ )
+ const focusedCommunities = attributes.filter(({ attribute }) =>
+ attribute.categories.some(
+ ({ category }) => category.tag === 'service-focus' && attribute._count.parents === 0
+ )
+ )
+
+ const infoBadges = () => {
+ const output: CustomBadgeProps[] = []
+ if (leaderAttributes.length) {
+ leaderAttributes.forEach((entry) =>
+ output.push({
+ variant: 'leader',
+ icon: entry.attribute.icon ?? '',
+ iconBg: entry.attribute.iconBg ?? '#FFF',
+ tsKey: entry.attribute.tsKey,
+ })
+ )
+ }
+ if (data.lastVerified)
+ output.push({
+ variant: 'verified',
+ lastverified: data.lastVerified.toString(),
+ })
+ output.push({
+ variant: isClaimed ? 'claimed' : 'unclaimed',
+ })
+
+ return output
}
+ const focusedCommBadges: CustomBadgeProps[] = focusedCommunities.map(({ attribute }) => ({
+ variant: 'community',
+ tsKey: attribute.tsKey,
+ icon: attribute.icon ?? '',
+ }))
+
+ return (
+
+ )
}
+ListingBasicEdit.displayName = 'ListingBasicEdit'
+
+export const ListingBasicInfo = ({ data, edit }: ListingBasicInfoProps) =>
+ edit ? :
+export type ListingBasicInfoProps = { edit?: boolean } & OrgInfoProps
-export interface LocationInfoProps {
- role: 'location'
+export interface OrgInfoProps {
data: {
name: string
id: string
slug: string
- lastVerified: NonNullable['lastVerified']
- attributes: NonNullable['attributes']
- description: NonNullable['description']
- locations: NonNullable[]
+ lastVerified:
+ | NonNullable['lastVerified']
+ | NonNullable['lastVerified']
+ attributes:
+ | NonNullable['attributes']
+ | NonNullable['attributes']
+ description:
+ | NonNullable['description']
+ | NonNullable['description']
+ locations:
+ | NonNullable['locations']
+ | NonNullable[]
isClaimed: boolean
}
}
From a9678f718c36cc18ee2aeea9886a0d7741519c65 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Thu, 24 Aug 2023 10:36:41 -0400
Subject: [PATCH 015/131] fix lockfile
---
pnpm-lock.yaml | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1e4a097acf..3727d836dd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -380,7 +380,7 @@ importers:
devDependencies:
'@hookform/devtools':
specifier: 4.3.1
- version: 4.3.1(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
+ version: 4.3.1(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)
'@playwright/test':
specifier: 1.37.1
version: 1.37.1
@@ -1453,7 +1453,7 @@ importers:
version: 1.1.1
zustand:
specifier: 4.4.1
- version: 4.4.1(@types/react@18.2.20)(react@18.2.0)
+ version: 4.4.1(@types/react@18.2.21)(react@18.2.0)
devDependencies:
'@babel/core':
specifier: 7.22.11
@@ -1484,7 +1484,7 @@ importers:
version: 2.0.0(@storybook/blocks@7.3.2)(@storybook/components@7.3.2)(@storybook/core-events@7.3.2)(@storybook/manager-api@7.3.2)(@storybook/preview-api@7.3.2)(@storybook/theming@7.3.2)(@storybook/types@7.3.2)(react-dom@18.2.0)(react@18.2.0)
'@hookform/devtools':
specifier: 4.3.1
- version: 4.3.1(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
+ version: 4.3.1(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)
'@hookform/resolvers':
specifier: 3.2.0
version: 3.2.0(react-hook-form@7.45.4)
@@ -5562,14 +5562,14 @@ packages:
'@hapi/hoek': 9.3.0
dev: true
- /@hookform/devtools@4.3.1(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0):
+ /@hookform/devtools@4.3.1(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-CrWxEoHQZaOXJZVQ8KBgOuAa8p2LI8M0DAN5GTRTmdCieRwFVjVDEmuTAVazWVRRkpEQSgSt3KYp7VmmqXdEnw==}
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || 18
react-dom: ^16.8.0 || ^17 || ^18 || 18
dependencies:
- '@emotion/react': 11.11.1(@types/react@18.2.20)(react@18.2.0)
- '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.20)(react@18.2.0)
+ '@emotion/react': 11.11.1(@types/react@18.2.21)(react@18.2.0)
+ '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.21)(react@18.2.0)
'@types/lodash': 4.14.197
little-state-machine: 4.8.0(react@18.2.0)
lodash: 4.17.21
@@ -6165,7 +6165,7 @@ packages:
dependencies:
'@mantine/ssr': 6.0.19(@emotion/react@11.11.1)(@emotion/server@11.11.0)(react-dom@18.2.0)(react@18.2.0)
'@mantine/styles': 6.0.19(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0)
- next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -20056,7 +20056,7 @@ packages:
'@panva/hkdf': 1.1.1
cookie: 0.5.0
jose: 4.14.4
- next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
oauth: 0.9.15
openid-client: 5.4.3
preact: 10.17.0
@@ -20080,7 +20080,7 @@ packages:
hoist-non-react-statics: 3.3.2
i18next: 23.4.5
i18next-fs-backend: 2.1.5
- next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-i18next: 13.2.0(i18next@23.4.5)(react-dom@18.2.0)(react@18.2.0)
@@ -20144,6 +20144,7 @@ packages:
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
+ dev: true
/next@13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==}
@@ -20192,7 +20193,7 @@ packages:
next: '*'
dependencies:
chokidar: 3.5.3
- next: 13.4.19(@babel/core@7.22.10)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
dev: false
/nice-try@1.0.5:
@@ -22112,7 +22113,7 @@ packages:
react-dom: ^18.2.0 || 18
react-hook-form: ^7.43
dependencies:
- '@mantine/core': 6.0.19(@emotion/react@11.11.1)(@mantine/hooks@6.0.19)(@types/react@18.2.20)(react-dom@18.2.0)(react@18.2.0)
+ '@mantine/core': 6.0.19(@emotion/react@11.11.1)(@mantine/hooks@6.0.19)(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)
'@mantine/dates': 6.0.19(@mantine/core@6.0.19)(@mantine/hooks@6.0.19)(dayjs@1.11.9)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -25050,7 +25051,7 @@ packages:
react: 18.2.0
dev: true
- /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.20)(react@18.2.0):
+ /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.21)(react@18.2.0):
resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
peerDependencies:
'@types/react': '*'
From c98df6247ef0932bfc3baa60bd5f9033bd650baf Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Thu, 24 Aug 2023 14:09:14 -0400
Subject: [PATCH 016/131] update component usage
---
packages/ui/components/data-portal/ServiceEditDrawer.tsx | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/packages/ui/components/data-portal/ServiceEditDrawer.tsx b/packages/ui/components/data-portal/ServiceEditDrawer.tsx
index 63bdac9380..9483ecfb94 100644
--- a/packages/ui/components/data-portal/ServiceEditDrawer.tsx
+++ b/packages/ui/components/data-portal/ServiceEditDrawer.tsx
@@ -9,6 +9,7 @@ import {
rem,
Stack,
Text,
+ Textarea,
Title,
} from '@mantine/core'
import { useForm } from '@mantine/form'
@@ -24,7 +25,7 @@ import { Icon } from '~ui/icon'
import { trpc as api } from '~ui/lib/trpcClient'
import { DataViewer } from '~ui/other/DataViewer'
-import { InlineTextarea, InlineTextInput } from './InlineTextInput'
+import { InlineTextInput } from './InlineTextInput'
const useStyles = createStyles((theme) => ({
drawerContent: {
@@ -200,7 +201,8 @@ const _ServiceEditDrawer = forwardRef
-
Date: Fri, 25 Aug 2023 11:47:30 -0400
Subject: [PATCH 017/131] attempt to reduce bundle size
---
apps/app/package.json | 2 ++
packages/api/package.json | 1 +
packages/auth/package.json | 1 +
packages/config/package.json | 1 +
packages/db/package.json | 1 +
packages/env/package.json | 1 +
packages/eslint-config/package.json | 1 +
packages/ui/package.json | 1 +
packages/util/package.json | 1 +
9 files changed, 10 insertions(+)
diff --git a/apps/app/package.json b/apps/app/package.json
index 536a07afd6..71b7a7a370 100644
--- a/apps/app/package.json
+++ b/apps/app/package.json
@@ -3,7 +3,9 @@
"version": "0.100.0",
"private": true,
"license": "GPL-3.0-only",
+ "sideEffects": false,
"scripts": {
+ "analyze": "ANALYZE=true next build",
"build": "next build",
"build:prebuild": "SKIP_ENV_VALIDATION=true tsx ./lib/prebuild.ts",
"clean:node": "rm -rf ./node_modules/ || true && rm -rf ./.next || true",
diff --git a/packages/api/package.json b/packages/api/package.json
index 505df5b3cf..869d3727e7 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -4,6 +4,7 @@
"private": true,
"license": "GPL-3.0-only",
"author": "",
+ "sideEffects": false,
"main": "./index.ts",
"types": "./index.ts",
"scripts": {
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 3940cd99af..76ec7f748c 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -3,6 +3,7 @@
"version": "0.100.0",
"private": true,
"license": "GPL-3.0-only",
+ "sideEffects": false,
"main": "./index.ts",
"types": "./index.ts",
"scripts": {
diff --git a/packages/config/package.json b/packages/config/package.json
index 9c40276f3b..49673fe8f0 100644
--- a/packages/config/package.json
+++ b/packages/config/package.json
@@ -3,6 +3,7 @@
"version": "0.100.0",
"private": true,
"license": "GPL-3.0-only",
+ "sideEffects": false,
"files": [
"lint-staged/index.js",
"lint-staged/next.js",
diff --git a/packages/db/package.json b/packages/db/package.json
index f8c8ad1271..fc63cdde4a 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -3,6 +3,7 @@
"version": "0.100.0",
"private": true,
"license": "GPL-3.0-only",
+ "sideEffects": false,
"main": "./index.ts",
"types": "./index.ts",
"scripts": {
diff --git a/packages/env/package.json b/packages/env/package.json
index cd0d8a3f08..ffc30e100e 100644
--- a/packages/env/package.json
+++ b/packages/env/package.json
@@ -2,6 +2,7 @@
"name": "@weareinreach/env",
"version": "0.0.0",
"private": true,
+ "sideEffects": false,
"main": "./index.ts",
"types": "./index.ts",
"files": [
diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json
index a5689042c5..35b8e5eeef 100644
--- a/packages/eslint-config/package.json
+++ b/packages/eslint-config/package.json
@@ -2,6 +2,7 @@
"name": "@weareinreach/eslint-config",
"version": "0.100.0",
"license": "GPL-3.0-only",
+ "sideEffects": false,
"main": "index.js",
"files": [
"next.js",
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 394de5d53b..161ba7e7b9 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -2,6 +2,7 @@
"name": "@weareinreach/ui",
"version": "0.100.0",
"license": "GPL-3.0-only",
+ "sideEffects": false,
"main": "./index.tsx",
"types": "./index.tsx",
"scripts": {
diff --git a/packages/util/package.json b/packages/util/package.json
index 1358779229..9e5b32a048 100644
--- a/packages/util/package.json
+++ b/packages/util/package.json
@@ -2,6 +2,7 @@
"name": "@weareinreach/util",
"version": "0.100.0",
"private": true,
+ "sideEffects": false,
"main": "./index.ts",
"types": "./index.ts",
"scripts": {
From 3fec980f5a2b2483924890dea68778ba6ab6fe80 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 25 Aug 2023 11:47:51 -0400
Subject: [PATCH 018/131] create zustand store
---
packages/ui/store/index.ts | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
create mode 100644 packages/ui/store/index.ts
diff --git a/packages/ui/store/index.ts b/packages/ui/store/index.ts
new file mode 100644
index 0000000000..7a80a62304
--- /dev/null
+++ b/packages/ui/store/index.ts
@@ -0,0 +1,19 @@
+import { create } from 'zustand'
+
+export const useStore = create((set) => ({
+ loading: false,
+ setLoading: (loading: boolean) => set(() => ({ loading })),
+
+ canSave: false,
+ setCanSave: (canSave: boolean) => set(() => ({ canSave })),
+}))
+
+export const useLoading = () => useStore((state) => [state.loading, state.setLoading])
+export const useCanSave = () => useStore((state) => [state.canSave, state.setCanSave])
+
+interface Store {
+ loading: boolean
+ setLoading: (loading: boolean) => void
+ canSave: boolean
+ setCanSave: (canSave: boolean) => void
+}
From 8d86afcf4a90baa6e24a8cee940d6dde923e60a3 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 25 Aug 2023 12:45:53 -0400
Subject: [PATCH 019/131] ensure component renders at top most level
---
packages/ui/components/core/PageLoadProgress.tsx | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/packages/ui/components/core/PageLoadProgress.tsx b/packages/ui/components/core/PageLoadProgress.tsx
index 906832da56..b2b7b2ea36 100644
--- a/packages/ui/components/core/PageLoadProgress.tsx
+++ b/packages/ui/components/core/PageLoadProgress.tsx
@@ -23,5 +23,12 @@ export const PageLoadProgress = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [router.asPath])
- return
+ return (
+
+ )
}
From 03288e43480822943d02674fe441dc5d28479e43 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 25 Aug 2023 18:04:45 -0400
Subject: [PATCH 020/131] improve logging/sentry
---
apps/app/instrumentation.node.ts | 1 -
apps/app/next.config.mjs | 4 +-
apps/app/package.json | 2 +
apps/app/sentry.client.config.ts | 11 +-
apps/app/sentry.server.config.ts | 3 +
apps/app/src/pages/api/trpc/[trpc].ts | 48 +++++++--
apps/app/src/utils/api.ts | 18 ++--
packages/api/lib/initTRPC.ts | 16 ++-
packages/ui/lib/trpcClient.ts | 9 +-
packages/util/logger/index.ts | 11 +-
packages/util/package.json | 1 +
pnpm-lock.yaml | 144 ++++++++++++++++++++++++++
12 files changed, 229 insertions(+), 39 deletions(-)
diff --git a/apps/app/instrumentation.node.ts b/apps/app/instrumentation.node.ts
index a10affbcdb..23d1e72495 100644
--- a/apps/app/instrumentation.node.ts
+++ b/apps/app/instrumentation.node.ts
@@ -1,4 +1,3 @@
-/* eslint-disable turbo/no-undeclared-env-vars */
/* eslint-disable node/no-process-env */
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
import { Resource } from '@opentelemetry/resources'
diff --git a/apps/app/next.config.mjs b/apps/app/next.config.mjs
index 267aa265cc..579bb770ae 100644
--- a/apps/app/next.config.mjs
+++ b/apps/app/next.config.mjs
@@ -89,7 +89,7 @@ const defineSentryConfig = (nextConfig) =>
// https://github.com/getsentry/sentry-webpack-plugin#options
// Suppresses source map uploading logs during build
- silent: true,
+ silent: isVercelProd,
org: 'weareinreach',
project: 'inreach-app',
},
@@ -110,7 +110,7 @@ const defineSentryConfig = (nextConfig) =>
hideSourceMaps: false,
// Automatically tree-shake Sentry logger statements to reduce bundle size
- disableLogger: true,
+ disableLogger: isVercelProd,
}
)
diff --git a/apps/app/package.json b/apps/app/package.json
index 71b7a7a370..7211bf61c1 100644
--- a/apps/app/package.json
+++ b/apps/app/package.json
@@ -60,7 +60,9 @@
"@opentelemetry/semantic-conventions": "1.15.2",
"@prisma/instrumentation": "5.2.0",
"@sentry/nextjs": "7.64.0",
+ "@sentry/node": "7.64.0",
"@sentry/opentelemetry-node": "7.64.0",
+ "@sentry/profiling-node": "1.1.2",
"@tanstack/react-query": "4.33.0",
"@tanstack/react-table": "8.9.3",
"@tiptap/extension-link": "2.1.7",
diff --git a/apps/app/sentry.client.config.ts b/apps/app/sentry.client.config.ts
index 17ee0cb2d4..cb741cf32e 100644
--- a/apps/app/sentry.client.config.ts
+++ b/apps/app/sentry.client.config.ts
@@ -28,9 +28,10 @@ Sentry.init({
}),
new Sentry.BrowserTracing(),
],
- tracePropagationTargets: [
- 'https://app.inreach.org',
- 'https://*-weareinreach.vercel.app',
- 'http://localhost',
- ],
+ // tracePropagationTargets: [
+ // / https:\/\/app.inreach.org\/.*/,
+ // /https:\/\/.*-weareinreach.vercel.app\//,
+ // 'localhost',
+ // /^\//,
+ // ],
})
diff --git a/apps/app/sentry.server.config.ts b/apps/app/sentry.server.config.ts
index 8ab470d526..d1e6a08e94 100644
--- a/apps/app/sentry.server.config.ts
+++ b/apps/app/sentry.server.config.ts
@@ -3,6 +3,7 @@
// https://docs.sentry.io/platforms/javascript/guides/nextjs/
import * as Sentry from '@sentry/nextjs'
+import { ProfilingIntegration } from '@sentry/profiling-node'
Sentry.init({
dsn: 'https://3398c2248c86498ab42fa8533e4f83f1@o1412293.ingest.sentry.io/6751163',
@@ -13,4 +14,6 @@ Sentry.init({
// Setting this option to true will print useful information to the console while you're setting up Sentry.
debug: false,
instrumenter: 'otel',
+ integrations: [new ProfilingIntegration()],
+ profilesSampleRate: 1,
})
diff --git a/apps/app/src/pages/api/trpc/[trpc].ts b/apps/app/src/pages/api/trpc/[trpc].ts
index fc6aac6565..a264184d46 100644
--- a/apps/app/src/pages/api/trpc/[trpc].ts
+++ b/apps/app/src/pages/api/trpc/[trpc].ts
@@ -1,3 +1,4 @@
+import * as Sentry from '@sentry/nextjs'
import { createNextApiHandler } from '@trpc/server/adapters/next'
import { appRouter, createContext } from '@weareinreach/api'
@@ -5,19 +6,48 @@ import { createLoggerInstance } from '@weareinreach/util/logger'
const log = createLoggerInstance('tRPC')
+// eslint-disable-next-line node/no-process-env
+const isDev = process.env.NODE_ENV === 'development'
+const isServer = typeof window === 'undefined'
+
/* Creating a handler for the tRPC endpoint. */
export default createNextApiHandler({
router: appRouter,
createContext,
- onError:
- // eslint-disable-next-line node/no-process-env
- process.env.NODE_ENV === 'development'
- ? ({ path, error, type }) => {
- log.error(`❌ tRPC ${type} failed on ${path}: ${error}`)
- }
- : typeof window === 'undefined'
- ? ({ path, error, type }) => log.error({ type, path, error })
- : undefined,
+ onError: ({ path, error, type }) => {
+ switch (true) {
+ case isDev: {
+ if (error.code === 'INTERNAL_SERVER_ERROR') {
+ log.debug('Sending error to Sentry')
+ Sentry.captureException(error, (scope) => {
+ scope.setTags({
+ 'tRPC.path': path,
+ 'tRPC.operation': type,
+ })
+ return scope
+ })
+ }
+ log.error(`❌ tRPC ${type} failed on ${path}:`, error)
+ break
+ }
+ case isServer: {
+ if (error.code === 'INTERNAL_SERVER_ERROR') {
+ Sentry.captureException(error, (scope) => {
+ scope.setTags({
+ 'tRPC.path': path,
+ 'tRPC.operation': type,
+ })
+ return scope
+ })
+ }
+ log.error({ type, path, error })
+ break
+ }
+ default: {
+ return
+ }
+ }
+ },
responseMeta(opts) {
const { ctx, errors, type } = opts
diff --git a/apps/app/src/utils/api.ts b/apps/app/src/utils/api.ts
index 25516a8fc8..15c3bd9865 100644
--- a/apps/app/src/utils/api.ts
+++ b/apps/app/src/utils/api.ts
@@ -9,37 +9,31 @@ import { devtoolsLink } from 'trpc-client-devtools-link'
import { type AppRouter } from '@weareinreach/api'
import { transformer } from '@weareinreach/api/lib/transformer'
import { getEnv } from '@weareinreach/env'
-import { createLoggerInstance } from '@weareinreach/util/logger'
+// import { createLoggerInstance } from '@weareinreach/util/logger'
-const log = createLoggerInstance('tRPC')
+// const log = createLoggerInstance('tRPC')
const getBaseUrl = () => {
if (typeof window !== 'undefined') return '' // browser should use relative url
if (getEnv('VERCEL_URL')) return `https://${getEnv('VERCEL_URL')}` // SSR should use vercel url
return `http://localhost:${getEnv('PORT') ?? 3000}` // dev SSR should use localhost
}
+// eslint-disable-next-line node/no-process-env
+const isDev = process.env.NODE_ENV === 'development'
export const api = createTRPCNext({
config() {
return {
transformer,
links: [
devtoolsLink({
- // eslint-disable-next-line node/no-process-env
- enabled: process.env.NODE_ENV === 'development',
+ enabled: isDev,
}),
loggerLink({
- enabled: (opts) =>
- // eslint-disable-next-line node/no-process-env
- (process.env.NODE_ENV === 'development' && typeof window !== 'undefined') ||
- (opts.direction === 'down' && opts.result instanceof Error),
+ enabled: () => isDev,
}),
-
httpBatchStreamLink({
url: `${getBaseUrl()}/api/trpc`,
}),
- // httpBatchLink({
- // url: `${getBaseUrl()}/api/trpc`,
- // }),
],
queryClientConfig: {
defaultOptions: {
diff --git a/packages/api/lib/initTRPC.ts b/packages/api/lib/initTRPC.ts
index 1ca6fd8485..44c0186d55 100644
--- a/packages/api/lib/initTRPC.ts
+++ b/packages/api/lib/initTRPC.ts
@@ -1,6 +1,7 @@
-import { initTRPC } from '@trpc/server'
+import { initTRPC, TRPCError } from '@trpc/server'
import superjson from 'superjson'
import { type TRPCPanelMeta } from 'trpc-panel'
+import { ZodError } from 'zod'
import { type Permission } from '@weareinreach/db/generated/permission'
@@ -15,7 +16,16 @@ export const t = initTRPC
.meta()
.create({
transformer: superjson,
- errorFormatter({ shape }) {
- return shape
+ errorFormatter({ shape, error }) {
+ return {
+ ...shape,
+ data: {
+ ...shape.data,
+ cause: error.cause instanceof ZodError ? error.cause.flatten() : error.cause,
+ // ...(error.code === 'BAD_REQUEST' && error.cause instanceof ZodError
+ // ? { zodError: error.cause.flatten() }
+ // : {}),
+ },
+ }
},
})
diff --git a/packages/ui/lib/trpcClient.ts b/packages/ui/lib/trpcClient.ts
index 995844a737..bfc9cabbc8 100644
--- a/packages/ui/lib/trpcClient.ts
+++ b/packages/ui/lib/trpcClient.ts
@@ -1,4 +1,3 @@
-/* eslint-disable turbo/no-undeclared-env-vars */
/* eslint-disable node/no-process-env */
import {
// httpBatchLink,
@@ -19,6 +18,8 @@ export const getBaseUrl = () => {
return `http://localhost:${getEnv('PORT') ?? process.env.STORYBOOK ? 6006 : 3000}` // dev SSR should use localhost
}
+const isDev = process.env.NODE_ENV === 'development'
+
export const nextTRPC = () =>
createTRPCNext({
config() {
@@ -26,12 +27,10 @@ export const nextTRPC = () =>
transformer,
links: [
devtoolsLink({
- enabled: process.env.NODE_ENV === 'development',
+ enabled: isDev,
}),
loggerLink({
- enabled: (opts) =>
- process.env.NODE_ENV === 'development' ||
- (opts.direction === 'down' && opts.result instanceof Error),
+ enabled: () => isDev,
}),
httpBatchStreamLink({
url: `${getBaseUrl()}/api/trpc`,
diff --git a/packages/util/logger/index.ts b/packages/util/logger/index.ts
index 943b059810..8d10220cc8 100644
--- a/packages/util/logger/index.ts
+++ b/packages/util/logger/index.ts
@@ -1,12 +1,19 @@
+// import { get } from '@vercel/edge-config'
import { type ISettingsParam, Logger } from 'tslog'
-
// eslint-disable-next-line node/no-process-env
const isDev = process.env.NODE_ENV === 'development'
export const appLog = new Logger({
name: 'app',
type: isDev ? 'pretty' : 'json',
- hideLogPositionForProduction: true,
+ // minLevel: isDev ? 0 : get('minLogLevel').then((level) => level),
+ prettyInspectOptions: {
+ depth: 3,
+ colors: true,
+ },
+ stylePrettyLogs: true,
+ prettyErrorLoggerNameDelimiter: '',
+ prettyLogTimeZone: isDev ? 'local' : 'UTC',
})
export const createLoggerInstance = (name: string, opts?: Omit, 'name'>) =>
diff --git a/packages/util/package.json b/packages/util/package.json
index 9e5b32a048..1e29c2828f 100644
--- a/packages/util/package.json
+++ b/packages/util/package.json
@@ -14,6 +14,7 @@
"with-env": "dotenv -e ../../.env --"
},
"dependencies": {
+ "@vercel/edge-config": "0.2.1",
"tslog": "4.9.2"
},
"devDependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3727d836dd..c78cc4119a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -212,9 +212,15 @@ importers:
'@sentry/nextjs':
specifier: 7.64.0
version: 7.64.0(next@13.4.19)(react@18.2.0)
+ '@sentry/node':
+ specifier: 7.64.0
+ version: 7.64.0
'@sentry/opentelemetry-node':
specifier: 7.64.0
version: 7.64.0(@opentelemetry/api@1.4.1)(@opentelemetry/core@1.15.2)(@opentelemetry/sdk-trace-base@1.15.2)(@opentelemetry/semantic-conventions@1.15.2)
+ '@sentry/profiling-node':
+ specifier: 1.1.2
+ version: 1.1.2
'@tanstack/react-query':
specifier: 4.33.0
version: 4.33.0(react-dom@18.2.0)(react@18.2.0)
@@ -1836,6 +1842,9 @@ importers:
packages/util:
dependencies:
+ '@vercel/edge-config':
+ specifier: 0.2.1
+ version: 0.2.1
tslog:
specifier: 4.9.2
version: 4.9.2
@@ -8424,6 +8433,16 @@ packages:
tslib: 2.6.1
dev: false
+ /@sentry/hub@7.64.0:
+ resolution: {integrity: sha512-7vy71bE6WX/zvQ2VxdJ+kTM72U1iP3iTiba0jNXCnpLpeRE+c5LbvNHWxsZh20JX3gqxuhncaVCKWW8Iezhc2w==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@sentry/core': 7.64.0
+ '@sentry/types': 7.64.0
+ '@sentry/utils': 7.64.0
+ tslib: 2.6.1
+ dev: false
+
/@sentry/integrations@7.64.0:
resolution: {integrity: sha512-6gbSGiruOifAmLtXw//Za19GWiL5qugDMEFxSvc5WrBWb+A8UK+foPn3K495OcivLS68AmqAQCUGb+6nlVowwA==}
engines: {node: '>=8'}
@@ -8498,6 +8517,24 @@ packages:
'@sentry/utils': 7.64.0
dev: false
+ /@sentry/profiling-node@1.1.2:
+ resolution: {integrity: sha512-bI320I78bfUPqwLkKVWbr4AE6WeWepKPGXtbuEHUvrqvQAKkEjjUAEFKuE/8clTCcZ4DaVT6PNaKJDhL/3XvGg==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+ requiresBuild: true
+ dependencies:
+ '@sentry/core': 7.64.0
+ '@sentry/hub': 7.64.0
+ '@sentry/node': 7.64.0
+ '@sentry/types': 7.64.0
+ '@sentry/utils': 7.64.0
+ detect-libc: 2.0.2
+ node-abi: 3.47.0
+ node-gyp: 9.4.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/@sentry/react@7.64.0(react@18.2.0):
resolution: {integrity: sha512-wOyJUQi7OoT1q+F/fVVv1fzbyO4OYbTu6m1DliLOGQPGEHPBsgPc722smPIExd1/rAMK/FxOuNN5oNhubH8nhg==}
engines: {node: '>=8'}
@@ -11966,6 +12003,10 @@ packages:
dev: true
optional: true
+ /abbrev@1.1.1:
+ resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
+ dev: false
+
/abbrev@2.0.0:
resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -12248,6 +12289,10 @@ packages:
default-require-extensions: 3.0.1
dev: true
+ /aproba@2.0.0:
+ resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+ dev: false
+
/archiver-utils@2.1.0:
resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==}
engines: {node: '>= 6'}
@@ -12279,6 +12324,14 @@ packages:
resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==}
dev: true
+ /are-we-there-yet@3.0.1:
+ resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ dependencies:
+ delegates: 1.0.0
+ readable-stream: 3.6.2
+ dev: false
+
/arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
@@ -13517,6 +13570,11 @@ packages:
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ /color-support@1.1.3:
+ resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+ hasBin: true
+ dev: false
+
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -13662,6 +13720,10 @@ packages:
resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==}
dev: true
+ /console-control-strings@1.1.0:
+ resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+ dev: false
+
/constants-browserify@1.0.0:
resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
dev: true
@@ -14176,6 +14238,10 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
+ /delegates@1.0.0:
+ resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
+ dev: false
+
/denque@2.1.0:
resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
engines: {node: '>=0.10'}
@@ -14215,6 +14281,11 @@ packages:
engines: {node: '>=12.20'}
dev: false
+ /detect-libc@2.0.2:
+ resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
+ engines: {node: '>=8'}
+ dev: false
+
/detect-newline@3.1.0:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
@@ -15473,6 +15544,10 @@ packages:
jest-util: 29.6.2
dev: true
+ /exponential-backoff@3.1.1:
+ resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+ dev: false
+
/express@4.18.2:
resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
engines: {node: '>= 0.10.0'}
@@ -15995,6 +16070,20 @@ packages:
resolution: {integrity: sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==}
dev: true
+ /gauge@4.0.4:
+ resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ dependencies:
+ aproba: 2.0.0
+ color-support: 1.1.3
+ console-control-strings: 1.1.0
+ has-unicode: 2.0.1
+ signal-exit: 3.0.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wide-align: 1.1.5
+ dev: false
+
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -16389,6 +16478,10 @@ packages:
dependencies:
has-symbols: 1.0.3
+ /has-unicode@2.0.1:
+ resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
+ dev: false
+
/has-yarn@2.1.0:
resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==}
engines: {node: '>=8'}
@@ -20236,6 +20329,13 @@ packages:
lower-case: 2.0.2
tslib: 2.6.1
+ /node-abi@3.47.0:
+ resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==}
+ engines: {node: '>=10'}
+ dependencies:
+ semver: 7.5.4
+ dev: false
+
/node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
dev: true
@@ -20289,6 +20389,26 @@ packages:
resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==}
hasBin: true
+ /node-gyp@9.4.0:
+ resolution: {integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==}
+ engines: {node: ^12.13 || ^14.13 || >=16}
+ hasBin: true
+ dependencies:
+ env-paths: 2.2.1
+ exponential-backoff: 3.1.1
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ make-fetch-happen: 11.1.1
+ nopt: 6.0.0
+ npmlog: 6.0.2
+ rimraf: 3.0.2
+ semver: 7.5.4
+ tar: 6.1.15
+ which: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@@ -20336,6 +20456,14 @@ packages:
/node-releases@2.0.13:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
+ /nopt@6.0.0:
+ resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: false
+
/nopt@7.2.0:
resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
@@ -20454,6 +20582,16 @@ packages:
path-key: 4.0.0
dev: false
+ /npmlog@6.0.2:
+ resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ dependencies:
+ are-we-there-yet: 3.0.1
+ console-control-strings: 1.1.0
+ gauge: 4.0.4
+ set-blocking: 2.0.0
+ dev: false
+
/nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
@@ -25558,6 +25696,12 @@ packages:
dependencies:
isexe: 2.0.0
+ /wide-align@1.1.5:
+ resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+ dependencies:
+ string-width: 4.2.3
+ dev: false
+
/widest-line@3.1.0:
resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
engines: {node: '>=8'}
From 66ba5d1ef8e7060d60815c5c5e462270528dbeb8 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 28 Aug 2023 12:15:49 -0400
Subject: [PATCH 021/131] silence build logging
---
apps/app/next.config.mjs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/app/next.config.mjs b/apps/app/next.config.mjs
index 579bb770ae..eb4303891d 100644
--- a/apps/app/next.config.mjs
+++ b/apps/app/next.config.mjs
@@ -89,7 +89,7 @@ const defineSentryConfig = (nextConfig) =>
// https://github.com/getsentry/sentry-webpack-plugin#options
// Suppresses source map uploading logs during build
- silent: isVercelProd,
+ silent: true,
org: 'weareinreach',
project: 'inreach-app',
},
From 5a7c93e40511339de46da90cb3abc79ca8d64656 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 28 Aug 2023 12:16:19 -0400
Subject: [PATCH 022/131] remove unused eslint disable
---
packages/ui/modals/ResetPassword.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/ui/modals/ResetPassword.tsx b/packages/ui/modals/ResetPassword.tsx
index fdb889de4e..aba4444c88 100644
--- a/packages/ui/modals/ResetPassword.tsx
+++ b/packages/ui/modals/ResetPassword.tsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/no-unescaped-entities */
import {
Box,
type ButtonProps,
From cecc58c18255ff6936a05eef91b230be858265f1 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 29 Aug 2023 13:17:06 -0400
Subject: [PATCH 023/131] remove duplicate
---
packages/util/logger/index.ts | 2 --
1 file changed, 2 deletions(-)
diff --git a/packages/util/logger/index.ts b/packages/util/logger/index.ts
index 19b2ce40e1..dbc3a4f8b0 100644
--- a/packages/util/logger/index.ts
+++ b/packages/util/logger/index.ts
@@ -1,7 +1,5 @@
/* eslint-disable node/no-process-env */
import { type ISettingsParam, Logger } from 'tslog'
-// eslint-disable-next-line node/no-process-env
-const isDev = process.env.NODE_ENV === 'development'
const isDev = process.env.NODE_ENV === 'development'
const verboseLogging = Boolean(isDev && (!!process.env.NEXT_VERBOSE || !!process.env.PRISMA_VERBOSE))
From 894a18a71fc582c58ff53f1f2c6516453632d278 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 29 Aug 2023 13:17:59 -0400
Subject: [PATCH 024/131] updated icon list
---
packages/ui/icon/iconList.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/ui/icon/iconList.ts b/packages/ui/icon/iconList.ts
index 2c7488ae33..9d755c9f29 100644
--- a/packages/ui/icon/iconList.ts
+++ b/packages/ui/icon/iconList.ts
@@ -1,3 +1,3 @@
// generated file - do not modify directly
// prettier-ignore
-export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","carbon:app-switcher","carbon:arrows","carbon:back-to-top","carbon:checkbox-undeterminate","carbon:cloud-lightning","carbon:cloud-rain","carbon:cloud-snow","carbon:letter-aa-large","carbon:sunny","simple-icons:tiktok","ph:map-pin-fill","mdi:map-marker"] as const
+export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","fluent-mdl2:remove-from-trash","mdi:content-save","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
From b43d33f1002729f5ede510fefde385d41388b223 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Thu, 31 Aug 2023 18:12:30 -0400
Subject: [PATCH 025/131] create audit trail table
---
.../migration.sql | 29 +++++++
packages/db/prisma/schema.prisma | 80 ++++++++++++++++++-
.../prisma/views/public/pg_cache_hit_rate.sql | 10 +++
.../db/prisma/views/public/pg_index_usage.sql | 49 ++++++++++++
.../views/public/pg_index_usage_rate.sql | 12 +++
5 files changed, 179 insertions(+), 1 deletion(-)
create mode 100644 packages/db/prisma/migrations/20230831190234_audit_trail_table/migration.sql
create mode 100644 packages/db/prisma/views/public/pg_cache_hit_rate.sql
create mode 100644 packages/db/prisma/views/public/pg_index_usage.sql
create mode 100644 packages/db/prisma/views/public/pg_index_usage_rate.sql
diff --git a/packages/db/prisma/migrations/20230831190234_audit_trail_table/migration.sql b/packages/db/prisma/migrations/20230831190234_audit_trail_table/migration.sql
new file mode 100644
index 0000000000..235dc61d5b
--- /dev/null
+++ b/packages/db/prisma/migrations/20230831190234_audit_trail_table/migration.sql
@@ -0,0 +1,29 @@
+-- CreateEnum
+CREATE TYPE "AuditTrailOperation" AS ENUM ('INSERT', 'UPDATE', 'DELETE');
+
+-- CreateTable
+CREATE TABLE "AuditTrail" (
+ "id" UUID NOT NULL DEFAULT gen_random_uuid(),
+ "table" TEXT NOT NULL,
+ "table_oid" OID NOT NULL,
+ "recordId" TEXT[],
+ "operation" "AuditTrailOperation" NOT NULL,
+ "old" JSONB,
+ "new" JSONB,
+ "timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "actorId" TEXT NOT NULL,
+
+ CONSTRAINT "AuditTrail_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE INDEX "AuditTrail_recordId_idx" ON "AuditTrail"("recordId");
+
+-- CreateIndex
+CREATE INDEX "AuditTrail_actorId_idx" ON "AuditTrail"("actorId");
+
+-- CreateIndex
+CREATE INDEX "AuditTrail_table_oid_idx" ON "AuditTrail"("table_oid");
+
+-- CreateIndex
+CREATE INDEX "AuditTrail_timestamp_idx" ON "AuditTrail" USING BRIN ("timestamp");
diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma
index e4078bddaa..cb014c3d96 100644
--- a/packages/db/prisma/schema.prisma
+++ b/packages/db/prisma/schema.prisma
@@ -29,7 +29,7 @@ datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DB_DIRECT_URL")
- extensions = [postgis, pg_stat_statements]
+ extensions = [pg_stat_statements, postgis]
// schemas = ["user", "org", "system", "relation"]
}
@@ -1797,6 +1797,29 @@ enum AuditLogOperation {
UNLINK
}
+model AuditTrail {
+ id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
+ table String
+ table_oid Int @db.Oid
+ recordId String[]
+ operation AuditTrailOperation
+ old Json?
+ new Json?
+ timestamp DateTime @default(now())
+ actorId String
+
+ @@index([recordId])
+ @@index([actorId])
+ @@index([table_oid])
+ @@index([timestamp], type: Brin)
+}
+
+enum AuditTrailOperation {
+ INSERT
+ UPDATE
+ DELETE
+}
+
//
// RELATION TABLES
//
@@ -2480,3 +2503,58 @@ view pg_index_usage {
@@ignore
}
+
+// view pg_stat_statements_info {
+// dealloc BigInt?
+// stats_reset DateTime? @db.Timestamptz(6)
+
+// @@ignore
+// }
+
+// view pg_stat_statements {
+// userid Int? @db.Oid
+// dbid Int? @db.Oid
+// toplevel Boolean?
+// queryid BigInt?
+// query String?
+// plans BigInt?
+// total_plan_time Float?
+// min_plan_time Float?
+// max_plan_time Float?
+// mean_plan_time Float?
+// stddev_plan_time Float?
+// calls BigInt?
+// total_exec_time Float?
+// min_exec_time Float?
+// max_exec_time Float?
+// mean_exec_time Float?
+// stddev_exec_time Float?
+// rows BigInt?
+// shared_blks_hit BigInt?
+// shared_blks_read BigInt?
+// shared_blks_dirtied BigInt?
+// shared_blks_written BigInt?
+// local_blks_hit BigInt?
+// local_blks_read BigInt?
+// local_blks_dirtied BigInt?
+// local_blks_written BigInt?
+// temp_blks_read BigInt?
+// temp_blks_written BigInt?
+// blk_read_time Float?
+// blk_write_time Float?
+// temp_blk_read_time Float?
+// temp_blk_write_time Float?
+// wal_records BigInt?
+// wal_fpi BigInt?
+// wal_bytes Decimal? @db.Decimal
+// jit_functions BigInt?
+// jit_generation_time Float?
+// jit_inlining_count BigInt?
+// jit_inlining_time Float?
+// jit_optimization_count BigInt?
+// jit_optimization_time Float?
+// jit_emission_count BigInt?
+// jit_emission_time Float?
+
+// @@ignore
+// }
diff --git a/packages/db/prisma/views/public/pg_cache_hit_rate.sql b/packages/db/prisma/views/public/pg_cache_hit_rate.sql
new file mode 100644
index 0000000000..9eb8e150ee
--- /dev/null
+++ b/packages/db/prisma/views/public/pg_cache_hit_rate.sql
@@ -0,0 +1,10 @@
+SELECT
+ sum(pg_statio_user_tables.heap_blks_read) AS heap_read,
+ sum(pg_statio_user_tables.heap_blks_hit) AS heap_hit,
+ (
+ (
+ sum(pg_statio_user_tables.heap_blks_hit) - sum(pg_statio_user_tables.heap_blks_read)
+ ) / sum(pg_statio_user_tables.heap_blks_hit)
+ ) AS ratio
+FROM
+ pg_statio_user_tables;
\ No newline at end of file
diff --git a/packages/db/prisma/views/public/pg_index_usage.sql b/packages/db/prisma/views/public/pg_index_usage.sql
new file mode 100644
index 0000000000..309375a916
--- /dev/null
+++ b/packages/db/prisma/views/public/pg_index_usage.sql
@@ -0,0 +1,49 @@
+SELECT
+ t.tablename AS relation,
+ foo.indexname,
+ c.reltuples AS num_rows,
+ pg_size_pretty(
+ pg_relation_size((quote_ident((t.tablename) :: text)) :: regclass)
+ ) AS table_size,
+ pg_size_pretty(
+ pg_relation_size(
+ (quote_ident((foo.indexrelname) :: text)) :: regclass
+ )
+ ) AS index_size,
+ foo.idx_scan AS number_of_scans,
+ foo.idx_tup_read AS tuples_read,
+ foo.idx_tup_fetch AS tuples_fetched
+FROM
+ (
+ (
+ pg_tables t
+ LEFT JOIN pg_class c ON ((t.tablename = c.relname))
+ )
+ LEFT JOIN (
+ SELECT
+ c_1.relname AS ctablename,
+ ipg.relname AS indexname,
+ x.indnatts AS number_of_columns,
+ psai.idx_scan,
+ psai.idx_tup_read,
+ psai.idx_tup_fetch,
+ psai.indexrelname,
+ x.indisunique
+ FROM
+ (
+ (
+ (
+ pg_index x
+ JOIN pg_class c_1 ON ((c_1.oid = x.indrelid))
+ )
+ JOIN pg_class ipg ON ((ipg.oid = x.indexrelid))
+ )
+ JOIN pg_stat_all_indexes psai ON ((x.indexrelid = psai.indexrelid))
+ )
+ ) foo ON ((t.tablename = foo.ctablename))
+ )
+WHERE
+ (t.schemaname = 'public' :: name)
+ORDER BY
+ t.tablename,
+ foo.indexname;
\ No newline at end of file
diff --git a/packages/db/prisma/views/public/pg_index_usage_rate.sql b/packages/db/prisma/views/public/pg_index_usage_rate.sql
new file mode 100644
index 0000000000..2dd4f1aecc
--- /dev/null
+++ b/packages/db/prisma/views/public/pg_index_usage_rate.sql
@@ -0,0 +1,12 @@
+SELECT
+ pg_stat_user_tables.relname,
+ (
+ (100 * pg_stat_user_tables.idx_scan) / (
+ pg_stat_user_tables.seq_scan + pg_stat_user_tables.idx_scan
+ )
+ ) AS percent_of_times_index_used,
+ pg_stat_user_tables.n_live_tup AS rows_in_table
+FROM
+ pg_stat_user_tables
+ORDER BY
+ pg_stat_user_tables.n_live_tup DESC;
\ No newline at end of file
From f1e23a00f4a455c0bb883d7be90e9f9585539756 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Thu, 31 Aug 2023 19:25:41 -0400
Subject: [PATCH 026/131] create migration generator
---
packages/db/package.json | 1 +
packages/db/turbo/generators/config.ts | 48 ++
.../generators/templates/dataMigration.hbs} | 14 +-
pnpm-lock.yaml | 559 +++++++++++++++++-
4 files changed, 608 insertions(+), 14 deletions(-)
create mode 100644 packages/db/turbo/generators/config.ts
rename packages/db/{prisma/data-migrations/!YYYY-MM-DD_job-template.ts => turbo/generators/templates/dataMigration.hbs} (80%)
diff --git a/packages/db/package.json b/packages/db/package.json
index 9fe2c4a120..377176cdda 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -83,6 +83,7 @@
"@nuskin/mexico-state-lookup": "2.1.0",
"@placemarkio/check-geojson": "0.1.12",
"@terraformer/wkt": "2.2.0",
+ "@turbo/gen": "1.10.13",
"@turf/buffer": "6.5.0",
"@turf/helpers": "6.5.0",
"@turf/points-within-polygon": "6.5.0",
diff --git a/packages/db/turbo/generators/config.ts b/packages/db/turbo/generators/config.ts
new file mode 100644
index 0000000000..0d68bde3dd
--- /dev/null
+++ b/packages/db/turbo/generators/config.ts
@@ -0,0 +1,48 @@
+import { type PlopTypes } from '@turbo/gen'
+import { DateTime } from 'luxon'
+import slugify from 'slugify'
+
+export default function generator(plop: PlopTypes.NodePlopAPI): void {
+ plop.setHelper('slug', (str: string) => slugify(str, { lower: true, strict: true, trim: true }))
+ plop.setHelper('dateDashed', () => DateTime.now().toFormat('yyyy-MM-dd'))
+ plop.setHelper('dateConcat', () => DateTime.now().toFormat('yyyyMMdd'))
+ plop.setHelper('forVar', (str: string) =>
+ slugify(str, { lower: true, strict: true, trim: true }).replaceAll('-', '_')
+ )
+
+ // create a generator
+ plop.setGenerator('data-migration', {
+ description: 'Data migration',
+ prompts: [
+ {
+ type: 'input',
+ name: 'shortDescription',
+ message: 'Short description',
+ },
+ {
+ type: 'input',
+ name: 'name',
+ message: 'Your name',
+ },
+ {
+ type: 'confirm',
+ name: 'createInFolder',
+ message: 'Create the migration in a folder?',
+ default: false,
+ },
+ ],
+ actions: (data) => {
+ const filePath = data?.createInFolder
+ ? '{{dateDashed}}_{{slug shortDescription}}/index.ts'
+ : '{{dateDashed}}_{{slug shortDescription}}.ts'
+
+ return [
+ {
+ type: 'add',
+ path: `prisma/data-migrations/${filePath}`,
+ templateFile: 'templates/dataMigration.hbs',
+ },
+ ]
+ },
+ })
+}
diff --git a/packages/db/prisma/data-migrations/!YYYY-MM-DD_job-template.ts b/packages/db/turbo/generators/templates/dataMigration.hbs
similarity index 80%
rename from packages/db/prisma/data-migrations/!YYYY-MM-DD_job-template.ts
rename to packages/db/turbo/generators/templates/dataMigration.hbs
index fd0c4b91a3..488a300d17 100644
--- a/packages/db/prisma/data-migrations/!YYYY-MM-DD_job-template.ts
+++ b/packages/db/turbo/generators/templates/dataMigration.hbs
@@ -5,22 +5,16 @@ import { createLogger, type JobDef, jobPostRunner } from '~db/prisma/jobPreRun'
/** Define the job metadata here. */
const jobDef: JobDef = {
- jobId: 'yyyy-mm-dd-shortDescription',
- title: 'Descriptive Title',
- createdBy: 'Your Name',
+ jobId: '{{dateDashed}}-{{slug shortDescription}}',
+ title: '{{shortDescription}}',
+ createdBy: '{{name}}',
/** Optional: Longer description for the job */
description: undefined,
}
/**
* Job export - this variable MUST be UNIQUE
- *
- * Use the format `jobYYYYMMDD` and append a letter afterwards if there is already a job with this name.
- *
- * @example `job20230404`
- *
- * @example `job20230404b`
*/
-export const jobYYYYmmDD = {
+export const job{{dateConcat}}_{{forVar shortDescription}} = {
title: `[${jobDef.jobId}] ${jobDef.title}`,
task: async (_ctx, task) => {
/** Create logging instance */
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index adf5d85bf4..549570656f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1005,6 +1005,9 @@ importers:
'@terraformer/wkt':
specifier: 2.2.0
version: 2.2.0
+ '@turbo/gen':
+ specifier: 1.10.13
+ version: 1.10.13(@types/node@18.17.12)(typescript@5.2.2)
'@turf/buffer':
specifier: 6.5.0
version: 6.5.0
@@ -3987,6 +3990,14 @@ packages:
resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
dev: true
+ /@babel/runtime-corejs3@7.22.11:
+ resolution: {integrity: sha512-NhfzUbdWbiE6fCFypbWCPu6AR8xre31EOPF7wwAIJEvGQ2avov04eymayWinCuyXmV1b0+jzoXP/HYzzUYdvwg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ core-js-pure: 3.32.0
+ regenerator-runtime: 0.14.0
+ dev: true
+
/@babel/runtime@7.22.10:
resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==}
engines: {node: '>=6.9.0'}
@@ -4267,6 +4278,13 @@ packages:
dev: false
patched: true
+ /@cspotcode/source-map-support@0.8.1:
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+ dev: true
+
/@discoveryjs/json-ext@0.5.7:
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
engines: {node: '>=10.0.0'}
@@ -5649,6 +5667,13 @@ packages:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
+ /@jridgewell/trace-mapping@0.3.9:
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
/@juggle/resize-observer@3.4.0:
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
dev: true
@@ -10404,6 +10429,10 @@ packages:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
+ /@tootallnate/quickjs-emscripten@0.23.0:
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+ dev: true
+
/@total-typescript/ts-reset@0.5.1:
resolution: {integrity: sha512-AqlrT8YA1o7Ff5wPfMOL0pvL+1X+sw60NN6CcOCqs658emD6RfiXhF7Gu9QcfKBH7ELY2nInLhKSCWVoNL70MQ==}
dev: true
@@ -10479,6 +10508,63 @@ packages:
/@trpc/server@10.38.1:
resolution: {integrity: sha512-59mM0Jk3cnWBExSv4Z4cw/776MPwa+rcVNywnV5gyHyK/p5qHtis1b1JPYdTEQZ0zhR+6zeto14rTR51hg+Nuw==}
+ /@tsconfig/node10@1.0.9:
+ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
+ dev: true
+
+ /@tsconfig/node12@1.0.11:
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+ dev: true
+
+ /@tsconfig/node14@1.0.3:
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+ dev: true
+
+ /@tsconfig/node16@1.0.4:
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+ dev: true
+
+ /@turbo/gen@1.10.13(@types/node@18.17.12)(typescript@5.2.2):
+ resolution: {integrity: sha512-fwGVjeun2i0RIdq/20d2wpatPw9vE4Mbk60uB8rk8NENDXn2JLfbsh00mZ5KAEX5ZQUibh6tD+B7xROV8Eb7dQ==}
+ hasBin: true
+ dependencies:
+ '@turbo/workspaces': 1.10.13
+ chalk: 2.4.2
+ commander: 10.0.1
+ fs-extra: 10.1.0
+ inquirer: 8.2.6
+ minimatch: 9.0.3
+ node-plop: 0.26.3
+ proxy-agent: 6.3.0
+ ts-node: 10.9.1(@types/node@18.17.12)(typescript@5.2.2)
+ update-check: 1.5.4
+ validate-npm-package-name: 5.0.0
+ transitivePeerDependencies:
+ - '@swc/core'
+ - '@swc/wasm'
+ - '@types/node'
+ - supports-color
+ - typescript
+ dev: true
+
+ /@turbo/workspaces@1.10.13:
+ resolution: {integrity: sha512-mvJCIkLkLPQv+6wH5DwIjhTVw4PSvpB68gySkKR0gwClhzb+qHagLh0h9VAURSS8Ub3HnWV3GWrByqHfNzB6cA==}
+ hasBin: true
+ dependencies:
+ chalk: 2.4.2
+ commander: 10.0.1
+ execa: 5.1.1
+ fast-glob: 3.3.1
+ fs-extra: 10.1.0
+ gradient-string: 2.0.2
+ inquirer: 8.2.6
+ js-yaml: 4.1.0
+ ora: 4.1.1
+ rimraf: 3.0.2
+ semver: 7.5.4
+ update-check: 1.5.4
+ dev: true
+
/@turf/bbox@6.5.0:
resolution: {integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==}
dependencies:
@@ -10751,6 +10837,13 @@ packages:
resolution: {integrity: sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==}
dev: true
+ /@types/glob@7.2.0:
+ resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 18.17.12
+ dev: true
+
/@types/google.maps@3.54.0:
resolution: {integrity: sha512-b1MBy2eGrZoEFLnzq1RrlHbfzuWHz+Nitgqbb5N+MFA0kAUv0kYPmAXtczpb4dHlFZyu58EYzcKXtWNqSInyXg==}
dev: true
@@ -10789,6 +10882,13 @@ packages:
'@types/inquirer': 9.0.3
dev: true
+ /@types/inquirer@6.5.0:
+ resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==}
+ dependencies:
+ '@types/through': 0.0.30
+ rxjs: 6.6.7
+ dev: true
+
/@types/inquirer@9.0.3:
resolution: {integrity: sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==}
dependencies:
@@ -10886,6 +10986,10 @@ packages:
resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
dev: true
+ /@types/minimatch@5.1.2:
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ dev: true
+
/@types/minimist@1.2.2:
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
@@ -11100,6 +11204,10 @@ packages:
'@types/node': 18.17.12
dev: true
+ /@types/tinycolor2@1.4.3:
+ resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==}
+ dev: true
+
/@types/trusted-types@2.0.3:
resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
dev: true
@@ -11663,6 +11771,15 @@ packages:
transitivePeerDependencies:
- supports-color
+ /agent-base@7.1.0:
+ resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/agentkeepalive@4.5.0:
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
engines: {node: '>= 8.0.0'}
@@ -11901,6 +12018,10 @@ packages:
readable-stream: 3.6.2
dev: false
+ /arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+ dev: true
+
/arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
@@ -12035,6 +12156,13 @@ packages:
resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
dev: true
+ /ast-types@0.13.4:
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
+ engines: {node: '>=4'}
+ dependencies:
+ tslib: 2.6.1
+ dev: true
+
/ast-types@0.14.2:
resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
engines: {node: '>=4'}
@@ -12342,6 +12470,11 @@ packages:
engines: {node: ^4.5.0 || >= 5.9}
dev: true
+ /basic-ftp@5.0.3:
+ resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==}
+ engines: {node: '>=10.0.0'}
+ dev: true
+
/before-after-hook@2.2.3:
resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
dev: true
@@ -12766,6 +12899,13 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ /camel-case@3.0.0:
+ resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
+ dependencies:
+ no-case: 2.3.2
+ upper-case: 1.1.3
+ dev: true
+
/camel-case@4.1.2:
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
dependencies:
@@ -12848,6 +12988,29 @@ packages:
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ /change-case@3.1.0:
+ resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==}
+ dependencies:
+ camel-case: 3.0.0
+ constant-case: 2.0.0
+ dot-case: 2.1.1
+ header-case: 1.0.1
+ is-lower-case: 1.1.3
+ is-upper-case: 1.1.2
+ lower-case: 1.1.4
+ lower-case-first: 1.0.2
+ no-case: 2.3.2
+ param-case: 2.1.1
+ pascal-case: 2.0.1
+ path-case: 2.1.1
+ sentence-case: 2.1.1
+ snake-case: 2.1.0
+ swap-case: 1.1.2
+ title-case: 2.1.1
+ upper-case: 1.1.3
+ upper-case-first: 1.1.2
+ dev: true
+
/char-regex@1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
@@ -13147,6 +13310,11 @@ packages:
resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==}
dev: true
+ /commander@10.0.1:
+ resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+ engines: {node: '>=14'}
+ dev: true
+
/commander@11.0.0:
resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==}
engines: {node: '>=16'}
@@ -13280,6 +13448,13 @@ packages:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
dev: false
+ /constant-case@2.0.0:
+ resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==}
+ dependencies:
+ snake-case: 2.1.0
+ upper-case: 1.1.3
+ dev: true
+
/constants-browserify@1.0.0:
resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==}
dev: true
@@ -13445,6 +13620,10 @@ packages:
sha.js: 2.4.11
dev: true
+ /create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+ dev: true
+
/crelt@1.0.6:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
@@ -13619,6 +13798,11 @@ packages:
/dash-get@1.0.2:
resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==}
+ /data-uri-to-buffer@5.0.1:
+ resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==}
+ engines: {node: '>= 14'}
+ dev: true
+
/dayjs@1.11.9:
resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==}
@@ -13777,6 +13961,29 @@ packages:
resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==}
dev: true
+ /degenerator@5.0.1:
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
+ engines: {node: '>= 14'}
+ dependencies:
+ ast-types: 0.13.4
+ escodegen: 2.1.0
+ esprima: 4.0.1
+ dev: true
+
+ /del@5.1.0:
+ resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==}
+ engines: {node: '>=8'}
+ dependencies:
+ globby: 10.0.2
+ graceful-fs: 4.2.11
+ is-glob: 4.0.3
+ is-path-cwd: 2.2.0
+ is-path-inside: 3.0.3
+ p-map: 3.0.0
+ rimraf: 3.0.2
+ slash: 3.0.0
+ dev: true
+
/del@6.1.1:
resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
engines: {node: '>=10'}
@@ -13884,6 +14091,11 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dev: true
+ /diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+ dev: true
+
/diff@5.1.0:
resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
engines: {node: '>=0.3.1'}
@@ -13990,6 +14202,12 @@ packages:
domelementtype: 2.3.0
domhandler: 4.3.1
+ /dot-case@2.1.1:
+ resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==}
+ dependencies:
+ no-case: 2.3.2
+ dev: true
+
/dot-case@3.0.4:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
dependencies:
@@ -15547,7 +15765,6 @@ packages:
graceful-fs: 4.2.11
jsonfile: 4.0.0
universalify: 0.1.2
- dev: false
/fs-jetpack@5.1.0:
resolution: {integrity: sha512-Xn4fDhLydXkuzepZVsr02jakLlmoARPy+YWIclo4kh0GyNGUHnTqeH/w/qIsVn50dFxtp8otPL2t/HcPJBbxUA==}
@@ -15711,6 +15928,18 @@ packages:
dependencies:
resolve-pkg-maps: 1.0.0
+ /get-uri@6.0.1:
+ resolution: {integrity: sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==}
+ engines: {node: '>= 14'}
+ dependencies:
+ basic-ftp: 5.0.3
+ data-uri-to-buffer: 5.0.1
+ debug: 4.3.4
+ fs-extra: 8.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/giget@1.1.2:
resolution: {integrity: sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==}
hasBin: true
@@ -15858,6 +16087,20 @@ packages:
dependencies:
define-properties: 1.2.0
+ /globby@10.0.2:
+ resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/glob': 7.2.0
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.1
+ glob: 7.2.3
+ ignore: 5.2.4
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
/globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
@@ -15924,6 +16167,14 @@ packages:
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ /gradient-string@2.0.2:
+ resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==}
+ engines: {node: '>=10'}
+ dependencies:
+ chalk: 4.1.2
+ tinygradient: 1.1.5
+ dev: true
+
/grapheme-splitter@1.0.4:
resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
dev: false
@@ -16133,6 +16384,13 @@ packages:
hasBin: true
dev: true
+ /header-case@1.0.1:
+ resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==}
+ dependencies:
+ no-case: 2.3.2
+ upper-case: 1.1.3
+ dev: true
+
/headers-polyfill@3.1.2:
resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==}
dev: true
@@ -16320,6 +16578,16 @@ packages:
transitivePeerDependencies:
- supports-color
+ /http-proxy-agent@7.0.0:
+ resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/http2-wrapper@1.0.3:
resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
engines: {node: '>=10.19.0'}
@@ -16358,6 +16626,16 @@ packages:
transitivePeerDependencies:
- supports-color
+ /https-proxy-agent@7.0.1:
+ resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.0
+ debug: 4.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/human-id@1.0.2:
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
dev: false
@@ -16573,6 +16851,25 @@ packages:
rxjs: 7.8.1
dev: true
+ /inquirer@7.3.3:
+ resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==}
+ engines: {node: '>=8.0.0'}
+ dependencies:
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-width: 3.0.0
+ external-editor: 3.1.0
+ figures: 3.2.0
+ lodash: 4.17.21
+ mute-stream: 0.0.8
+ run-async: 2.4.1
+ rxjs: 6.6.7
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ through: 2.3.8
+ dev: true
+
/inquirer@8.2.6:
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
engines: {node: '>=12.0.0'}
@@ -16652,6 +16949,10 @@ packages:
fp-ts: 2.16.1
dev: true
+ /ip@1.1.8:
+ resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==}
+ dev: true
+
/ip@2.0.0:
resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
@@ -16841,6 +17142,12 @@ packages:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
dev: false
+ /is-lower-case@1.1.3:
+ resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==}
+ dependencies:
+ lower-case: 1.1.4
+ dev: true
+
/is-map@2.0.2:
resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
dev: true
@@ -16979,6 +17286,12 @@ packages:
engines: {node: '>=12'}
dev: true
+ /is-upper-case@1.1.2:
+ resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==}
+ dependencies:
+ upper-case: 1.1.3
+ dev: true
+
/is-url@1.2.4:
resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
dev: true
@@ -17031,6 +17344,11 @@ packages:
/isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ /isbinaryfile@4.0.10:
+ resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
+ engines: {node: '>= 8.0.0'}
+ dev: true
+
/isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@@ -17953,7 +18271,6 @@ packages:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
optionalDependencies:
graceful-fs: 4.2.11
- dev: false
/jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
@@ -18387,6 +18704,10 @@ packages:
resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==}
dev: true
+ /lodash.get@4.4.2:
+ resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ dev: true
+
/lodash.includes@4.3.0:
resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==}
dev: true
@@ -18469,6 +18790,16 @@ packages:
dependencies:
js-tokens: 4.0.0
+ /lower-case-first@1.0.2:
+ resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==}
+ dependencies:
+ lower-case: 1.1.4
+ dev: true
+
+ /lower-case@1.1.4:
+ resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
+ dev: true
+
/lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
dependencies:
@@ -19597,6 +19928,11 @@ packages:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
dev: true
+ /netmask@2.0.2:
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
/new-github-issue-url@0.2.1:
resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==}
engines: {node: '>=10'}
@@ -19780,6 +20116,12 @@ packages:
dependencies:
'@types/nlcst': 1.0.1
+ /no-case@2.3.2:
+ resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
+ dependencies:
+ lower-case: 1.1.4
+ dev: true
+
/no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
@@ -19869,6 +20211,23 @@ packages:
/node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+ /node-plop@0.26.3:
+ resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==}
+ engines: {node: '>=8.9.4'}
+ dependencies:
+ '@babel/runtime-corejs3': 7.22.11
+ '@types/inquirer': 6.5.0
+ change-case: 3.1.0
+ del: 5.1.0
+ globby: 10.0.2
+ handlebars: 4.7.8
+ inquirer: 7.3.3
+ isbinaryfile: 4.0.10
+ lodash.get: 4.4.2
+ mkdirp: 0.5.6
+ resolve: 1.22.4
+ dev: true
+
/node-polyfill-webpack-plugin@2.0.1(webpack@5.88.2):
resolution: {integrity: sha512-ZUMiCnZkP1LF0Th2caY6J/eKKoA0TefpoVa68m/LQU1I/mE8rGt4fNYGgNuCcK+aG8P8P43nbeJ2RqJMOL/Y1A==}
engines: {node: '>=12'}
@@ -20278,6 +20637,20 @@ packages:
type-check: 0.4.0
dev: true
+ /ora@4.1.1:
+ resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==}
+ engines: {node: '>=8'}
+ dependencies:
+ chalk: 3.0.0
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.0
+ is-interactive: 1.0.0
+ log-symbols: 3.0.0
+ mute-stream: 0.0.8
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+ dev: true
+
/ora@5.4.1:
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
engines: {node: '>=10'}
@@ -20420,6 +20793,31 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
+ /pac-proxy-agent@7.0.0:
+ resolution: {integrity: sha512-t4tRAMx0uphnZrio0S0Jw9zg3oDbz1zVhQ/Vy18FjLfP1XOLNUEjaVxYCYRI6NS+BsMBXKIzV6cTLOkO9AtywA==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@tootallnate/quickjs-emscripten': 0.23.0
+ agent-base: 7.1.0
+ debug: 4.3.4
+ get-uri: 6.0.1
+ http-proxy-agent: 7.0.0
+ https-proxy-agent: 7.0.1
+ pac-resolver: 7.0.0
+ socks-proxy-agent: 8.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /pac-resolver@7.0.0:
+ resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ degenerator: 5.0.1
+ ip: 1.1.8
+ netmask: 2.0.2
+ dev: true
+
/package-hash@4.0.0:
resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==}
engines: {node: '>=8'}
@@ -20464,6 +20862,12 @@ packages:
resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==}
dev: true
+ /param-case@2.1.1:
+ resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
+ dependencies:
+ no-case: 2.3.2
+ dev: true
+
/param-case@3.0.4:
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
dependencies:
@@ -20551,6 +20955,13 @@ packages:
engines: {node: '>= 0.8'}
dev: true
+ /pascal-case@2.0.1:
+ resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==}
+ dependencies:
+ camel-case: 3.0.0
+ upper-case-first: 1.1.2
+ dev: true
+
/pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
dependencies:
@@ -20561,6 +20972,12 @@ packages:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
dev: true
+ /path-case@2.1.1:
+ resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==}
+ dependencies:
+ no-case: 2.3.2
+ dev: true
+
/path-exists@3.0.0:
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
engines: {node: '>=4'}
@@ -21402,6 +21819,22 @@ packages:
ipaddr.js: 1.9.1
dev: true
+ /proxy-agent@6.3.0:
+ resolution: {integrity: sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.0
+ debug: 4.3.4
+ http-proxy-agent: 7.0.0
+ https-proxy-agent: 7.0.1
+ lru-cache: 7.18.3
+ pac-proxy-agent: 7.0.0
+ proxy-from-env: 1.1.0
+ socks-proxy-agent: 8.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -22160,6 +22593,13 @@ packages:
unicode-match-property-value-ecmascript: 2.1.0
dev: true
+ /registry-auth-token@3.3.2:
+ resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==}
+ dependencies:
+ rc: 1.2.8
+ safe-buffer: 5.2.1
+ dev: true
+
/registry-auth-token@4.2.2:
resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==}
engines: {node: '>=6.0.0'}
@@ -22173,6 +22613,13 @@ packages:
dependencies:
'@pnpm/npm-conf': 2.2.2
+ /registry-url@3.1.0:
+ resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ rc: 1.2.8
+ dev: true
+
/registry-url@5.1.0:
resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==}
engines: {node: '>=8'}
@@ -22746,6 +23193,13 @@ packages:
- supports-color
dev: true
+ /sentence-case@2.1.1:
+ resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==}
+ dependencies:
+ no-case: 2.3.2
+ upper-case-first: 1.1.2
+ dev: true
+
/serialize-javascript@6.0.1:
resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
dependencies:
@@ -22946,6 +23400,12 @@ packages:
yargs: 15.4.1
dev: false
+ /snake-case@2.1.0:
+ resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==}
+ dependencies:
+ no-case: 2.3.2
+ dev: true
+
/socket.io-adapter@2.5.2:
resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==}
dependencies:
@@ -22993,6 +23453,17 @@ packages:
- supports-color
dev: false
+ /socks-proxy-agent@8.0.1:
+ resolution: {integrity: sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==}
+ engines: {node: '>= 14'}
+ dependencies:
+ agent-base: 7.1.0
+ debug: 4.3.4
+ socks: 2.7.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
/socks@2.7.1:
resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
@@ -23575,6 +24046,13 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
+ /swap-case@1.1.2:
+ resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==}
+ dependencies:
+ lower-case: 1.1.4
+ upper-case: 1.1.3
+ dev: true
+
/swc-loader@0.1.16(@swc/core@1.3.76)(webpack@5.88.2):
resolution: {integrity: sha512-NKIm8aJjK/z/yfzk+v7YGwJMjBKaLaUs9ZKI2zoaIGKAjtkwjO92ZLI0fiTZuwzRqVLQl/29fBdSgFCBzquR0w==}
peerDependencies:
@@ -23802,11 +24280,29 @@ packages:
/tiny-invariant@1.3.1:
resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
+ /tinycolor2@1.6.0:
+ resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
+ dev: true
+
+ /tinygradient@1.1.5:
+ resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==}
+ dependencies:
+ '@types/tinycolor2': 1.4.3
+ tinycolor2: 1.6.0
+ dev: true
+
/tippy.js@6.3.7:
resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==}
dependencies:
'@popperjs/core': 2.11.8
+ /title-case@2.1.1:
+ resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==}
+ dependencies:
+ no-case: 2.3.2
+ upper-case: 1.1.3
+ dev: true
+
/titleize@3.0.0:
resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
engines: {node: '>=12'}
@@ -23966,6 +24462,37 @@ packages:
typescript: 5.2.2
dev: true
+ /ts-node@10.9.1(@types/node@18.17.12)(typescript@5.2.2):
+ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7 || 5'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.9
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 18.17.12
+ acorn: 8.10.0
+ acorn-walk: 8.2.0
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.2.2
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ dev: true
+
/ts-pattern@4.2.2:
resolution: {integrity: sha512-qzJMo2pbkUJWusRH5o8xR+xogn6RmvViyUgwBFTtRENLse470clCGjHDf6haWGZ1AOmk8XkEohUoBW8Uut6Scg==}
dev: false
@@ -24525,7 +25052,6 @@ packages:
/universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
- dev: false
/universalify@2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
@@ -24559,6 +25085,13 @@ packages:
escalade: 3.1.1
picocolors: 1.0.0
+ /update-check@1.5.4:
+ resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==}
+ dependencies:
+ registry-auth-token: 3.3.2
+ registry-url: 3.1.0
+ dev: true
+
/update-notifier@6.0.2:
resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==}
engines: {node: '>=14.16'}
@@ -24578,6 +25111,16 @@ packages:
semver-diff: 4.0.0
xdg-basedir: 5.1.0
+ /upper-case-first@1.1.2:
+ resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==}
+ dependencies:
+ upper-case: 1.1.3
+ dev: true
+
+ /upper-case@1.1.3:
+ resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
+ dev: true
+
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
dependencies:
@@ -24758,6 +25301,10 @@ packages:
kleur: 4.1.5
sade: 1.8.1
+ /v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ dev: true
+
/v8-to-istanbul@9.1.0:
resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==}
engines: {node: '>=10.12.0'}
@@ -24784,7 +25331,6 @@ packages:
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
dependencies:
builtins: 5.0.1
- dev: false
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
@@ -25421,6 +25967,11 @@ packages:
fd-slicer: 1.1.0
dev: true
+ /yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+ dev: true
+
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
From 652596a94670b4560f69240cb0ad96f0adef08a9 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 1 Sep 2023 12:08:29 -0400
Subject: [PATCH 027/131] audit log triggers & enable
---
.../migration.sql | 128 ++++++++++++++++++
.../migration.sql | 88 ++++++++++++
2 files changed, 216 insertions(+)
create mode 100644 packages/db/prisma/migrations/20230831221453_audit_log_fns/migration.sql
create mode 100644 packages/db/prisma/migrations/20230901160641_enable_audit_logging_on_tables/migration.sql
diff --git a/packages/db/prisma/migrations/20230831221453_audit_log_fns/migration.sql b/packages/db/prisma/migrations/20230831221453_audit_log_fns/migration.sql
new file mode 100644
index 0000000000..eb399f4d2f
--- /dev/null
+++ b/packages/db/prisma/migrations/20230831221453_audit_log_fns/migration.sql
@@ -0,0 +1,128 @@
+-- Get Primary Keys
+CREATE OR REPLACE FUNCTION get_primary_key_columns(entity_oid oid)
+ RETURNS text[] STABLE
+ SECURITY DEFINER
+ LANGUAGE plpgsql
+ AS $FUNC$
+DECLARE
+ pkeys text[];
+BEGIN
+ SELECT
+ COALESCE(ARRAY_AGG(pa.attname::text ORDER BY pa.attnum),
+ ARRAY[]::text[]) column_names INTO pkeys
+ FROM
+ pg_index pi
+ JOIN pg_attribute pa ON pi.indrelid = pa.attrelid
+ AND pa.attnum = ANY (pi.indkey)
+ WHERE
+ indrelid = $1
+ AND indisprimary;
+ RETURN pkeys;
+END;
+$FUNC$;
+
+-- Get actorId
+CREATE OR REPLACE FUNCTION get_actor_id()
+ RETURNS text
+ LANGUAGE plpgsql
+ AS $FUNC$
+DECLARE
+ system_email text := 'inreach_svc@inreach.org';
+ actor_id text;
+BEGIN
+ IF (CURRENT_SETTING('app.actor_id', TRUE)::text IS NULL) THEN
+ EXECUTE FORMAT('SELECT id FROM "User" WHERE email = %L', system_email) INTO actor_id;
+ ELSE
+ actor_id := CURRENT_SETTING('app.actor_id', TRUE)::text;
+ END IF;
+ RETURN actor_id;
+END;
+$FUNC$;
+
+-- Create Audit Log function
+CREATE OR REPLACE FUNCTION create_audit_entry()
+ RETURNS TRIGGER
+ LANGUAGE plpgsql
+ AS $FUNC$
+DECLARE
+ actor_id text := get_actor_id();
+ record_old jsonb = to_jsonb(OLD);
+ record_new jsonb = ROW_TO_JSON(NEW);
+ record_pkey_cols text[] = get_primary_key_columns(TG_RELID);
+ record_pkey text[];
+ using_clause text := '';
+ pkey text;
+BEGIN
+ IF (TG_OP = 'DELETE') THEN
+ FOREACH pkey IN ARRAY record_pkey_cols LOOP
+ record_pkey := ARRAY_APPEND(record_pkey, record_old ->> pkey);
+ END LOOP;
+ ELSE
+ FOREACH pkey IN ARRAY record_pkey_cols LOOP
+ record_pkey := ARRAY_APPEND(record_pkey, record_new ->> pkey);
+ END LOOP;
+ END IF;
+ CASE TG_OP
+ WHEN 'DELETE' THEN
+ INSERT INTO "AuditTrail"("table", table_oid, "recordId", operation, OLD, "actorId")
+ VALUES (TG_TABLE_NAME::text, TG_RELID, record_pkey,
+ 'DELETE', record_old, actor_id);
+ WHEN 'UPDATE' THEN
+ INSERT INTO "AuditTrail"("table", table_oid, "recordId", operation, OLD, NEW, "actorId")
+ VALUES (TG_TABLE_NAME::text, TG_RELID,
+ record_pkey, 'UPDATE',
+ record_old, record_new, actor_id);
+ WHEN 'INSERT' THEN
+ INSERT INTO "AuditTrail"("table", table_oid, "recordId", operation, OLD, NEW, "actorId")
+ VALUES
+ (TG_TABLE_NAME::text,
+ TG_RELID, record_pkey,
+ 'INSERT',
+ record_old, record_new,
+ actor_id);
+ END CASE;
+ RETURN NULL;
+ END;
+$FUNC$;
+
+CREATE OR REPLACE FUNCTION audit_trail_enable(tablename regclass)
+ RETURNS void VOLATILE
+ SECURITY DEFINER
+ LANGUAGE plpgsql
+ AS $FUNC$
+DECLARE
+ statement_row text = '
+ CREATE TRIGGER audit_i_u_d
+ AFTER INSERT OR UPDATE OR DELETE
+ ON ' || tablename || '
+ FOR EACH ROW
+ EXECUTE PROCEDURE create_audit_entry();';
+ pkey_cols text[] = get_primary_key_columns(tablename::oid);
+BEGIN
+ IF pkey_cols = ARRAY[]::text[] THEN
+ RAISE EXCEPTION 'Table % can not be audited because it has no primary key', tablename;
+ END IF;
+ IF NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ pg_trigger
+ WHERE
+ tgrelid = tablename
+ AND tgname = 'audit_i_u_d') THEN
+ EXECUTE statement_row;
+END IF;
+END;
+$FUNC$;
+
+CREATE OR REPLACE FUNCTION audit_trail_disable(tablename regclass)
+ RETURNS void VOLATILE
+ SECURITY DEFINER
+ LANGUAGE plpgsql
+ AS $FUNC$
+DECLARE
+ statement_row text = 'DROP TRIGGER IF EXISTS audit_i_u_d on ' || tablename;
+BEGIN
+ EXECUTE statement_row;
+END;
+$FUNC$;
diff --git a/packages/db/prisma/migrations/20230901160641_enable_audit_logging_on_tables/migration.sql b/packages/db/prisma/migrations/20230901160641_enable_audit_logging_on_tables/migration.sql
new file mode 100644
index 0000000000..6c3c56e8e0
--- /dev/null
+++ b/packages/db/prisma/migrations/20230901160641_enable_audit_logging_on_tables/migration.sql
@@ -0,0 +1,88 @@
+SELECT audit_trail_enable(to_regclass('public."Account"'));
+SELECT audit_trail_enable(to_regclass('public."AssignedRole"'));
+SELECT audit_trail_enable(to_regclass('public."Attribute"'));
+SELECT audit_trail_enable(to_regclass('public."AttributeCategory"'));
+SELECT audit_trail_enable(to_regclass('public."AttributeNesting"'));
+SELECT audit_trail_enable(to_regclass('public."AttributeSupplement"'));
+SELECT audit_trail_enable(to_regclass('public."AttributeSupplementDataSchema"'));
+SELECT audit_trail_enable(to_regclass('public."AttributeToCategory"'));
+SELECT audit_trail_enable(to_regclass('public."Country"'));
+SELECT audit_trail_enable(to_regclass('public."DataMigration"'));
+SELECT audit_trail_enable(to_regclass('public."FieldVisibility"'));
+SELECT audit_trail_enable(to_regclass('public."FreeText"'));
+SELECT audit_trail_enable(to_regclass('public."GeoData"'));
+SELECT audit_trail_enable(to_regclass('public."GovDist"'));
+SELECT audit_trail_enable(to_regclass('public."GovDistType"'));
+SELECT audit_trail_enable(to_regclass('public."InternalNote"'));
+SELECT audit_trail_enable(to_regclass('public."Language"'));
+SELECT audit_trail_enable(to_regclass('public."ListSharedWith"'));
+SELECT audit_trail_enable(to_regclass('public."LocationAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."LocationPermission"'));
+SELECT audit_trail_enable(to_regclass('public."Organization"'));
+SELECT audit_trail_enable(to_regclass('public."OrganizationAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."OrganizationEmail"'));
+SELECT audit_trail_enable(to_regclass('public."OrganizationPermission"'));
+SELECT audit_trail_enable(to_regclass('public."OrganizationPhone"'));
+SELECT audit_trail_enable(to_regclass('public."OrgEmail"'));
+SELECT audit_trail_enable(to_regclass('public."OrgHours"'));
+SELECT audit_trail_enable(to_regclass('public."OrgLocation"'));
+SELECT audit_trail_enable(to_regclass('public."OrgLocationEmail"'));
+SELECT audit_trail_enable(to_regclass('public."OrgLocationPhone"'));
+SELECT audit_trail_enable(to_regclass('public."OrgLocationService"'));
+SELECT audit_trail_enable(to_regclass('public."OrgPhone"'));
+SELECT audit_trail_enable(to_regclass('public."OrgPhoneLanguage"'));
+SELECT audit_trail_enable(to_regclass('public."OrgPhoto"'));
+SELECT audit_trail_enable(to_regclass('public."OrgReview"'));
+SELECT audit_trail_enable(to_regclass('public."OrgService"'));
+SELECT audit_trail_enable(to_regclass('public."OrgServiceEmail"'));
+SELECT audit_trail_enable(to_regclass('public."OrgServicePhone"'));
+SELECT audit_trail_enable(to_regclass('public."OrgServiceTag"'));
+SELECT audit_trail_enable(to_regclass('public."OrgSocialMedia"'));
+SELECT audit_trail_enable(to_regclass('public."OrgWebsite"'));
+SELECT audit_trail_enable(to_regclass('public."OrgWebsiteLanguage"'));
+SELECT audit_trail_enable(to_regclass('public."OutsideAPI"'));
+SELECT audit_trail_enable(to_regclass('public."OutsideAPIService"'));
+SELECT audit_trail_enable(to_regclass('public."Permission"'));
+SELECT audit_trail_enable(to_regclass('public."PhoneType"'));
+SELECT audit_trail_enable(to_regclass('public."RolePermission"'));
+SELECT audit_trail_enable(to_regclass('public."SavedOrganization"'));
+SELECT audit_trail_enable(to_regclass('public."SavedService"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceAccessAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceArea"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceAreaCountry"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceAreaDist"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceCategory"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceCategoryDefaultAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceTag"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceTagCountry"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceTagDefaultAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."ServiceTagNesting"'));
+SELECT audit_trail_enable(to_regclass('public."Session"'));
+SELECT audit_trail_enable(to_regclass('public."SlugRedirect"'));
+SELECT audit_trail_enable(to_regclass('public."SocialMediaLink"'));
+SELECT audit_trail_enable(to_regclass('public."SocialMediaService"'));
+SELECT audit_trail_enable(to_regclass('public."Source"'));
+SELECT audit_trail_enable(to_regclass('public."Suggestion"'));
+SELECT audit_trail_enable(to_regclass('public."SurveyCommunity"'));
+SELECT audit_trail_enable(to_regclass('public."SurveyEthnicity"'));
+SELECT audit_trail_enable(to_regclass('public."SurveySOG"'));
+SELECT audit_trail_enable(to_regclass('public."TranslatedReview"'));
+SELECT audit_trail_enable(to_regclass('public."TranslationKey"'));
+SELECT audit_trail_enable(to_regclass('public."TranslationNamespace"'));
+SELECT audit_trail_enable(to_regclass('public."User"'));
+SELECT audit_trail_enable(to_regclass('public."UserAttribute"'));
+SELECT audit_trail_enable(to_regclass('public."UserCommunity"'));
+SELECT audit_trail_enable(to_regclass('public."UserCommunityLink"'));
+SELECT audit_trail_enable(to_regclass('public."UserEthnicity"'));
+SELECT audit_trail_enable(to_regclass('public."UserImmigration"'));
+SELECT audit_trail_enable(to_regclass('public."UserMail"'));
+SELECT audit_trail_enable(to_regclass('public."UserPermission"'));
+SELECT audit_trail_enable(to_regclass('public."UserRole"'));
+SELECT audit_trail_enable(to_regclass('public."UserSavedList"'));
+SELECT audit_trail_enable(to_regclass('public."UserSOGIdentity"'));
+SELECT audit_trail_enable(to_regclass('public."UserSOGLink"'));
+SELECT audit_trail_enable(to_regclass('public."UserSurvey"'));
+SELECT audit_trail_enable(to_regclass('public."UserTitle"'));
+SELECT audit_trail_enable(to_regclass('public."UserToOrganization"'));
+SELECT audit_trail_enable(to_regclass('public."UserType"'));
\ No newline at end of file
From ecc39a6418e741f05e16de8d76bc26289235897a Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 1 Sep 2023 12:09:37 -0400
Subject: [PATCH 028/131] exclude AuditTrail from id prefixing
---
packages/db/lib/idGen.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/packages/db/lib/idGen.ts b/packages/db/lib/idGen.ts
index a6ccc5e701..a612b1d5b3 100644
--- a/packages/db/lib/idGen.ts
+++ b/packages/db/lib/idGen.ts
@@ -134,4 +134,5 @@ const excludedTables = [
'AttributesByCategory',
'user_refresh_token',
'user_access_token',
+ 'AuditTrail',
] as const // satisfies Prisma.ModelName[]
From f3f5bf25f64b1f637e1b048cd7c57c2da86b9f15 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 1 Sep 2023 16:26:45 -0400
Subject: [PATCH 029/131] create handler generator
---
packages/api/package.json | 2 +
packages/api/turbo/generators/config.ts | 75 ++++++++++
.../templates/handlers/handler.ts.hbs | 19 +++
.../templates/handlers/schema.ts.hbs | 5 +
pnpm-lock.yaml | 134 ++++++++++++++++++
5 files changed, 235 insertions(+)
create mode 100644 packages/api/turbo/generators/config.ts
create mode 100644 packages/api/turbo/generators/templates/handlers/handler.ts.hbs
create mode 100644 packages/api/turbo/generators/templates/handlers/schema.ts.hbs
diff --git a/packages/api/package.json b/packages/api/package.json
index b19f4afac9..00056e0866 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -55,6 +55,7 @@
"zod": "3.22.2"
},
"devDependencies": {
+ "@turbo/gen": "1.10.13",
"@types/eslint": "8.44.2",
"@types/google.maps": "3.54.0",
"@types/luxon": "3.3.1",
@@ -64,6 +65,7 @@
"@weareinreach/eslint-config": "0.100.0",
"dotenv-cli": "7.3.0",
"eslint": "8.48.0",
+ "inquirer-search-list": "1.2.6",
"just-capitalize": "3.2.0",
"just-pascal-case": "3.2.0",
"listr2": "6.6.1",
diff --git a/packages/api/turbo/generators/config.ts b/packages/api/turbo/generators/config.ts
new file mode 100644
index 0000000000..db0c631719
--- /dev/null
+++ b/packages/api/turbo/generators/config.ts
@@ -0,0 +1,75 @@
+import { type PlopTypes } from '@turbo/gen'
+//@ts-expect-error types aren't loading...?
+import searchList from 'inquirer-search-list'
+
+import fs from 'fs'
+import path from 'path'
+
+const getRouters = () => {
+ const dirContents = fs.readdirSync(path.resolve(__dirname, '../../router'), { withFileTypes: true })
+ const routers = dirContents.filter((d) => d.isDirectory()).map((d) => d.name)
+ return routers
+}
+export default function generator(plop: PlopTypes.NodePlopAPI): void {
+ plop.setPrompt('searchList', searchList)
+ // create a generator
+ plop.setGenerator('trpc-handler', {
+ description: 'tRPC API Handler',
+ prompts: [
+ {
+ type: 'searchList',
+ // @ts-expect-error This is fine...
+ choices: getRouters(),
+ message: 'Choose a router',
+ name: 'routerDir',
+ validate: (val) => {
+ const choices = getRouters()
+ return choices.includes(val)
+ },
+ },
+ {
+ type: 'input',
+ name: 'name',
+ message: 'API Handler method name',
+ validate: (val) => {
+ const regex = /^[a-z]+$/i
+ return regex.test(val)
+ },
+ },
+ {
+ type: 'list',
+ name: 'operation',
+ message: 'API Handler operation',
+ choices: [
+ { name: 'Query', value: 'query', key: 'q' },
+ { name: 'Mutation', value: 'mutation', key: 'm' },
+ ],
+ },
+ {
+ type: 'confirm',
+ name: 'createSchema',
+ message: 'Does this handler require an input schema?',
+ default: true,
+ },
+ ],
+ actions: (data) => {
+ if (!data) throw new Error('No data')
+ const basePath = `router/{{routerDir}}/{{operation}}.{{name}}`
+ const actions: PlopTypes.Actions = []
+
+ actions.push({
+ type: 'add',
+ path: `${basePath}.handler.ts`,
+ templateFile: 'templates/handlers/handler.ts.hbs',
+ })
+ if (data.createSchema) {
+ actions.push({
+ type: 'add',
+ path: `${basePath}.schema.ts`,
+ templateFile: 'templates/handlers/schema.ts.hbs',
+ })
+ }
+ return actions
+ },
+ })
+}
diff --git a/packages/api/turbo/generators/templates/handlers/handler.ts.hbs b/packages/api/turbo/generators/templates/handlers/handler.ts.hbs
new file mode 100644
index 0000000000..17299d45b3
--- /dev/null
+++ b/packages/api/turbo/generators/templates/handlers/handler.ts.hbs
@@ -0,0 +1,19 @@
+import { prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { type TRPCHandlerParams } from '~api/types/handler'
+{{#if createSchema}}
+import { type T{{pascalCase name}}Schema } from './{{operation}}.{{name}}.schema'
+{{/if}}
+
+{{#if createSchema}}
+export const {{name}} = async ({ctx, input}: TRPCHandlerParams) => {
+{{else}}
+export const {{name}} = async ({ctx}: TRPCHandlerParams) => {
+{{/if}}
+ try {
+
+
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/turbo/generators/templates/handlers/schema.ts.hbs b/packages/api/turbo/generators/templates/handlers/schema.ts.hbs
new file mode 100644
index 0000000000..e1e822f542
--- /dev/null
+++ b/packages/api/turbo/generators/templates/handlers/schema.ts.hbs
@@ -0,0 +1,5 @@
+import { z } from 'zod'
+import { prefixedId } from '~api/schemas/idPrefix'
+
+export const Z{{pascalCase name}}Schema = z.literal('change me')
+export type T{{pascalCase name}}Schema = z.infer
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 549570656f..194122806e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -745,6 +745,9 @@ importers:
specifier: 3.22.2
version: 3.22.2
devDependencies:
+ '@turbo/gen':
+ specifier: 1.10.13
+ version: 1.10.13(@types/node@18.17.12)(typescript@5.2.2)
'@types/eslint':
specifier: 8.44.2
version: 8.44.2
@@ -772,6 +775,9 @@ importers:
eslint:
specifier: 8.48.0
version: 8.48.0
+ inquirer-search-list:
+ specifier: 1.2.6
+ version: 1.2.6
just-capitalize:
specifier: 3.2.0
version: 3.2.0
@@ -11903,6 +11909,11 @@ packages:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
+ /ansi-escapes@3.2.0:
+ resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==}
+ engines: {node: '>=4'}
+ dev: true
+
/ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -11928,6 +11939,11 @@ packages:
hasBin: true
dev: true
+ /ansi-regex@3.0.1:
+ resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
+ engines: {node: '>=4'}
+ dev: true
+
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -13033,6 +13049,10 @@ packages:
/character-reference-invalid@2.0.1:
resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+ /chardet@0.4.2:
+ resolution: {integrity: sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==}
+ dev: true
+
/chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
@@ -13147,6 +13167,13 @@ packages:
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
engines: {node: '>=10'}
+ /cli-cursor@2.1.0:
+ resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
+ engines: {node: '>=4'}
+ dependencies:
+ restore-cursor: 2.0.0
+ dev: true
+
/cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
@@ -13186,6 +13213,10 @@ packages:
slice-ansi: 5.0.0
string-width: 5.1.2
+ /cli-width@2.2.1:
+ resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==}
+ dev: true
+
/cli-width@3.0.0:
resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
engines: {node: '>= 10'}
@@ -15342,6 +15373,15 @@ packages:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
dev: false
+ /external-editor@2.2.0:
+ resolution: {integrity: sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==}
+ engines: {node: '>=0.12'}
+ dependencies:
+ chardet: 0.4.2
+ iconv-lite: 0.4.24
+ tmp: 0.0.33
+ dev: true
+
/external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
@@ -15426,6 +15466,13 @@ packages:
resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==}
dev: true
+ /figures@2.0.0:
+ resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==}
+ engines: {node: '>=4'}
+ dependencies:
+ escape-string-regexp: 1.0.5
+ dev: true
+
/figures@3.2.0:
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
engines: {node: '>=8'}
@@ -15813,6 +15860,11 @@ packages:
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ /fuzzy@0.1.3:
+ resolution: {integrity: sha512-/gZffu4ykarLrCiP3Ygsa86UAo1E5vEVlvTrpkKywXSbP9Xhln3oSp9QSV57gEq3JFFpGJ4GZ+5zdEp3FcUh4w==}
+ engines: {node: '>= 0.6.0'}
+ dev: true
+
/fuzzysort@2.0.4:
resolution: {integrity: sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==}
dev: true
@@ -16851,6 +16903,34 @@ packages:
rxjs: 7.8.1
dev: true
+ /inquirer-search-list@1.2.6:
+ resolution: {integrity: sha512-C4pKSW7FOYnkAloH8rB4FiM91H1v08QFZZJh6KRt//bMfdDBIhgdX8wjHvrVH2bu5oIo6wYqGpzSBxkeClPxew==}
+ dependencies:
+ chalk: 2.4.2
+ figures: 2.0.0
+ fuzzy: 0.1.3
+ inquirer: 3.3.0
+ dev: true
+
+ /inquirer@3.3.0:
+ resolution: {integrity: sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==}
+ dependencies:
+ ansi-escapes: 3.2.0
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-width: 2.2.1
+ external-editor: 2.2.0
+ figures: 2.0.0
+ lodash: 4.17.21
+ mute-stream: 0.0.7
+ run-async: 2.4.1
+ rx-lite: 4.0.8
+ rx-lite-aggregates: 4.0.8
+ string-width: 2.1.1
+ strip-ansi: 4.0.0
+ through: 2.3.8
+ dev: true
+
/inquirer@7.3.3:
resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==}
engines: {node: '>=8.0.0'}
@@ -17085,6 +17165,11 @@ packages:
call-bind: 1.0.2
dev: true
+ /is-fullwidth-code-point@2.0.0:
+ resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+ engines: {node: '>=4'}
+ dev: true
+
/is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
@@ -19611,6 +19696,11 @@ packages:
engines: {node: '>=4.0.0'}
hasBin: true
+ /mimic-fn@1.2.0:
+ resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
+ engines: {node: '>=4'}
+ dev: true
+
/mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -19880,6 +19970,10 @@ packages:
duplexer2: 0.1.4
object-assign: 4.1.1
+ /mute-stream@0.0.7:
+ resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==}
+ dev: true
+
/mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
dev: true
@@ -20569,6 +20663,13 @@ packages:
dependencies:
wrappy: 1.0.2
+ /onetime@2.0.1:
+ resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ mimic-fn: 1.2.0
+ dev: true
+
/onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
@@ -22881,6 +22982,14 @@ packages:
dependencies:
lowercase-keys: 3.0.0
+ /restore-cursor@2.0.0:
+ resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
+ engines: {node: '>=4'}
+ dependencies:
+ onetime: 2.0.1
+ signal-exit: 3.0.7
+ dev: true
+
/restore-cursor@3.1.0:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
@@ -23027,6 +23136,16 @@ packages:
dependencies:
queue-microtask: 1.2.3
+ /rx-lite-aggregates@4.0.8:
+ resolution: {integrity: sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==}
+ dependencies:
+ rx-lite: 4.0.8
+ dev: true
+
+ /rx-lite@4.0.8:
+ resolution: {integrity: sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==}
+ dev: true
+
/rxjs@6.6.7:
resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==}
engines: {npm: '>=2.0.0'}
@@ -23818,6 +23937,14 @@ packages:
resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==}
dev: false
+ /string-width@2.1.1:
+ resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
+ engines: {node: '>=4'}
+ dependencies:
+ is-fullwidth-code-point: 2.0.0
+ strip-ansi: 4.0.0
+ dev: true
+
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -23888,6 +24015,13 @@ packages:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
+ /strip-ansi@4.0.0:
+ resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-regex: 3.0.1
+ dev: true
+
/strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
From 199f5f19dca863bb9d300e5cc75568a1d36d2c99 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 1 Sep 2023 17:30:42 -0400
Subject: [PATCH 030/131] audit trail indexing
---
.../migration.sql | 15 +++++++++++++++
packages/db/prisma/schema.prisma | 4 ++--
2 files changed, 17 insertions(+), 2 deletions(-)
create mode 100644 packages/db/prisma/migrations/20230901212814_audit_trail_index/migration.sql
diff --git a/packages/db/prisma/migrations/20230901212814_audit_trail_index/migration.sql b/packages/db/prisma/migrations/20230901212814_audit_trail_index/migration.sql
new file mode 100644
index 0000000000..9d37f02d29
--- /dev/null
+++ b/packages/db/prisma/migrations/20230901212814_audit_trail_index/migration.sql
@@ -0,0 +1,15 @@
+-- DropIndex
+DROP INDEX "AuditTrail_recordId_idx";
+
+-- DropIndex
+DROP INDEX "AuditTrail_timestamp_idx";
+
+-- AlterTable
+ALTER TABLE "AuditTrail"
+ ALTER COLUMN "timestamp" SET DATA TYPE TIMESTAMPTZ;
+
+-- CreateIndex
+CREATE INDEX "AuditTrail_recordId_idx" ON "AuditTrail" USING GIN("recordId");
+
+-- CreateIndex
+CREATE INDEX "AuditTrail_timestamp_idx" ON "AuditTrail" USING BRIN("timestamp");
diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma
index cb014c3d96..a45e0a4db6 100644
--- a/packages/db/prisma/schema.prisma
+++ b/packages/db/prisma/schema.prisma
@@ -1805,10 +1805,10 @@ model AuditTrail {
operation AuditTrailOperation
old Json?
new Json?
- timestamp DateTime @default(now())
+ timestamp DateTime @default(now()) @db.Timestamptz
actorId String
- @@index([recordId])
+ @@index([recordId], type: Gin)
@@index([actorId])
@@index([table_oid])
@@index([timestamp], type: Brin)
From e61a1231ab0768f4609e1c3ef5e1c60cd08f1b46 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 1 Sep 2023 17:31:49 -0400
Subject: [PATCH 031/131] add actorId context client extension
---
packages/db/client/extensions/auditContext.ts | 26 +++++++++++++++++++
packages/db/index.ts | 4 ++-
packages/db/lib/audit.ts | 25 ++++++++++++++++++
3 files changed, 54 insertions(+), 1 deletion(-)
create mode 100644 packages/db/client/extensions/auditContext.ts
create mode 100644 packages/db/lib/audit.ts
diff --git a/packages/db/client/extensions/auditContext.ts b/packages/db/client/extensions/auditContext.ts
new file mode 100644
index 0000000000..0b434c0c7f
--- /dev/null
+++ b/packages/db/client/extensions/auditContext.ts
@@ -0,0 +1,26 @@
+import { Prisma, prisma } from '~db/client'
+import { isIdFor } from '~db/lib/idGen'
+
+function auditedExtension(actorId: string) {
+ return Prisma.defineExtension((prisma) =>
+ prisma.$extends({
+ query: {
+ $allModels: {
+ async $allOperations({ args, query }) {
+ if (!isIdFor('user', actorId)) {
+ throw new Error('Invalid userId')
+ }
+ const [, result] = await prisma.$transaction([
+ prisma.$executeRaw`SELECT set_config('app.actor_id', ${actorId}, TRUE)`,
+ query(args),
+ ])
+ return result
+ },
+ },
+ },
+ })
+ )
+}
+export const getAuditedClient = (actorId: string) => {
+ return prisma.$extends(auditedExtension(actorId))
+}
diff --git a/packages/db/index.ts b/packages/db/index.ts
index 106cb4bf50..d8f376a950 100644
--- a/packages/db/index.ts
+++ b/packages/db/index.ts
@@ -1,7 +1,9 @@
export * from './client'
+export { getAuditedClient } from './client/extensions/auditContext'
export * from './zod_util'
-export { slug } from './lib/slugGen'
+export { setAuditId } from './lib/audit'
+export { slug, generateUniqueSlug } from './lib/slugGen'
export { createPoint, createPointOrNull, createGeoFields } from './lib/createPoint'
export { generateFreeText, generateNestedFreeText } from './lib/generateFreeText'
export { generateId, getIdPrefixRegex, isIdFor } from './lib/idGen'
diff --git a/packages/db/lib/audit.ts b/packages/db/lib/audit.ts
new file mode 100644
index 0000000000..240b7f3ca1
--- /dev/null
+++ b/packages/db/lib/audit.ts
@@ -0,0 +1,25 @@
+/* eslint-disable @typescript-eslint/ban-types */
+import { prisma, type Prisma, type PrismaClient } from '~db/client'
+
+import { isIdFor } from './idGen'
+
+export const setAuditId = async (actorId: string, client?: TransactionClient) => {
+ if (!isIdFor('user', actorId)) {
+ throw new Error('Invalid userId')
+ }
+
+ const db = client || prisma
+
+ await db.$executeRaw`SELECT set_config('app.actor_id', ${actorId}, true);`
+}
+
+type TransactionClient = Omit<
+ PrismaClient,
+ '$connect' | '$disconnect' | '$on' | '$transaction' | '$use' | '$extends'
+>
+type DefaultArgs = {
+ result: {}
+ model: {}
+ query: {}
+ client: {}
+}
From 062b9989f5fcf95f3445edcbe72b49836db5afc3 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 1 Sep 2023 17:32:28 -0400
Subject: [PATCH 032/131] create updateBasic handler
---
packages/api/router/organization/index.ts | 12 ++++++-
.../mutation.updateBasic.handler.ts | 34 +++++++++++++++++++
.../mutation.updateBasic.schema.ts | 11 ++++++
packages/api/router/organization/schemas.ts | 1 +
4 files changed, 57 insertions(+), 1 deletion(-)
create mode 100644 packages/api/router/organization/mutation.updateBasic.handler.ts
create mode 100644 packages/api/router/organization/mutation.updateBasic.schema.ts
diff --git a/packages/api/router/organization/index.ts b/packages/api/router/organization/index.ts
index 51a31f5e3f..48cbbc1b57 100644
--- a/packages/api/router/organization/index.ts
+++ b/packages/api/router/organization/index.ts
@@ -35,6 +35,7 @@ type OrganizationHandlerCache = {
createNewQuick: typeof import('./mutation.createNewQuick.handler').createNewQuick
createNewSuggestion: typeof import('./mutation.createNewSuggestion.handler').createNewSuggestion
attachAttribute: typeof import('./mutation.attachAttribute.handler').attachAttribute
+ updateBasic: typeof import('./mutation.updateBasic.handler').updateBasic
// #endregion
}
@@ -221,6 +222,15 @@ export const orgRouter = defineRouter({
if (!HandlerCache.attachAttribute) throw new Error('Failed to load handler')
return HandlerCache.attachAttribute({ ctx, input })
}),
-
+ updateBasic: permissionedProcedure('createNewOrgQuick')
+ .input(schema.ZUpdateBasicSchema)
+ .mutation(async ({ ctx, input }) => {
+ if (!HandlerCache.updateBasic)
+ HandlerCache.updateBasic = await import('./mutation.updateBasic.handler').then(
+ (mod) => mod.updateBasic
+ )
+ if (!HandlerCache.updateBasic) throw new Error('Failed to load handler')
+ return HandlerCache.updateBasic({ ctx, input })
+ }),
// #endregion
})
diff --git a/packages/api/router/organization/mutation.updateBasic.handler.ts b/packages/api/router/organization/mutation.updateBasic.handler.ts
new file mode 100644
index 0000000000..0df2ffce4e
--- /dev/null
+++ b/packages/api/router/organization/mutation.updateBasic.handler.ts
@@ -0,0 +1,34 @@
+import { generateId, generateUniqueSlug, getAuditedClient, type Prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type TUpdateBasicSchema } from './mutation.updateBasic.schema'
+
+export const updateBasic = async ({ ctx, input }: TRPCHandlerParams) => {
+ try {
+ const prisma = getAuditedClient(ctx.actorId)
+ const data: Prisma.OrganizationUpdateInput = {}
+
+ if (input.name) {
+ const existing = await prisma.organization.findUniqueOrThrow({
+ where: { id: input.id },
+ select: { slug: true },
+ })
+ const newSlug = await generateUniqueSlug({ name: input.name, id: input.id })
+ data.name = input.name
+ data.slug = newSlug
+ data.oldSlugs = { create: { from: existing.slug, to: newSlug, id: generateId('slugRedirect') } }
+ }
+ if (input.description) {
+ data.description = { update: { tsKey: { update: { text: input.description } } } }
+ }
+
+ const update = await prisma.organization.update({
+ where: { id: input.id },
+ data,
+ })
+ return update
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/router/organization/mutation.updateBasic.schema.ts b/packages/api/router/organization/mutation.updateBasic.schema.ts
new file mode 100644
index 0000000000..9e06891231
--- /dev/null
+++ b/packages/api/router/organization/mutation.updateBasic.schema.ts
@@ -0,0 +1,11 @@
+import { z } from 'zod'
+
+import { prefixedId } from '~api/schemas/idPrefix'
+
+export const ZUpdateBasicSchema = z.object({
+ id: prefixedId('organization'),
+ name: z.string().optional(),
+ description: z.string().optional(),
+})
+
+export type TUpdateBasicSchema = z.infer
diff --git a/packages/api/router/organization/schemas.ts b/packages/api/router/organization/schemas.ts
index 41181d25f7..5747981d00 100644
--- a/packages/api/router/organization/schemas.ts
+++ b/packages/api/router/organization/schemas.ts
@@ -2,6 +2,7 @@
export * from './mutation.attachAttribute.schema'
export * from './mutation.createNewQuick.schema'
export * from './mutation.createNewSuggestion.schema'
+export * from './mutation.updateBasic.schema'
export * from './query.checkForExisting.schema'
export * from './query.forLocationPage.schema'
export * from './query.forOrganizationTable.schema'
From 48d285168e16653afeb7832fa264fcc89bab5de7 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 11:44:01 -0400
Subject: [PATCH 033/131] fix lockfile
---
packages/ui/icon/iconList.ts | 2 +-
pnpm-lock.yaml | 18 +++++++++---------
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/packages/ui/icon/iconList.ts b/packages/ui/icon/iconList.ts
index 9d755c9f29..2ccff4acf1 100644
--- a/packages/ui/icon/iconList.ts
+++ b/packages/ui/icon/iconList.ts
@@ -1,3 +1,3 @@
// generated file - do not modify directly
// prettier-ignore
-export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","fluent-mdl2:remove-from-trash","mdi:content-save","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
+export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:add-large","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:business-processes","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-for-mobile","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-dual-y-axis","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-large","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unreal","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-enterprisedb","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:global-loan-and-trial","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-ai-on-z","carbon:ibm-aiops-insights","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-bare-metal-server","carbon:ibm-cloud-bare-metal-servers-vpc","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hpc","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-virtual-server-classic","carbon:ibm-cloud-virtual-server-vpc","carbon:ibm-cloud-vpc","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-cloudant","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-db2-warehouse","carbon:ibm-event-automation","carbon:ibm-event-endpoint-mgmt","carbon:ibm-event-processing","carbon:ibm-event-streams","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-vs-private-cloud","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-saas-console","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-turbonomic","carbon:ibm-vpn-for-vpc","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-watsonx-assistant","carbon:ibm-watsonx-code-assistant","carbon:ibm-watsonx-code-assistant-for-z","carbon:ibm-watsonx-orchestrate","carbon:ibm-wazi-deploy","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-gitlab","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:model-tuned","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:prompt-session","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-edit","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:subtract-large","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:sustainability","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-long-paragraph","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-short-paragraph","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:tuning","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vegetation-encroachment","carbon:vegetation-height","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:watsonx","carbon:watsonx-ai","carbon:watsonx-data","carbon:watsonx-governance","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","fluent-mdl2:remove-from-trash","mdi:content-save","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ffd58349d5..1e6d55facd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -747,7 +747,7 @@ importers:
devDependencies:
'@turbo/gen':
specifier: 1.10.13
- version: 1.10.13(@types/node@18.17.12)(typescript@5.2.2)
+ version: 1.10.13(@types/node@18.17.14)(typescript@5.2.2)
'@types/eslint':
specifier: 8.44.2
version: 8.44.2
@@ -1013,7 +1013,7 @@ importers:
version: 2.2.0
'@turbo/gen':
specifier: 1.10.13
- version: 1.10.13(@types/node@18.17.12)(typescript@5.2.2)
+ version: 1.10.13(@types/node@18.17.14)(typescript@5.2.2)
'@turf/buffer':
specifier: 6.5.0
version: 6.5.0
@@ -10338,7 +10338,7 @@ packages:
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
dev: true
- /@turbo/gen@1.10.13(@types/node@18.17.12)(typescript@5.2.2):
+ /@turbo/gen@1.10.13(@types/node@18.17.14)(typescript@5.2.2):
resolution: {integrity: sha512-fwGVjeun2i0RIdq/20d2wpatPw9vE4Mbk60uB8rk8NENDXn2JLfbsh00mZ5KAEX5ZQUibh6tD+B7xROV8Eb7dQ==}
hasBin: true
dependencies:
@@ -10350,7 +10350,7 @@ packages:
minimatch: 9.0.3
node-plop: 0.26.3
proxy-agent: 6.3.0
- ts-node: 10.9.1(@types/node@18.17.12)(typescript@5.2.2)
+ ts-node: 10.9.1(@types/node@18.17.14)(typescript@5.2.2)
update-check: 1.5.4
validate-npm-package-name: 5.0.0
transitivePeerDependencies:
@@ -10655,7 +10655,7 @@ packages:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 18.17.12
+ '@types/node': 18.17.14
dev: true
/@types/google.maps@3.54.0:
@@ -16209,14 +16209,14 @@ packages:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
dev: true
-
+
/header-case@1.0.1:
resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==}
dependencies:
no-case: 2.3.2
upper-case: 1.1.3
dev: true
-
+
/headers-polyfill@3.2.1:
resolution: {integrity: sha512-jpY9fNMWPWwkqRN9CpSRNqL9svpiuSmg4CsbPl4s43KltIDIVHlPv75UOXVgc/PTP6BzHSUvd9UMdxSW1I+ETQ==}
dependencies:
@@ -24403,7 +24403,7 @@ packages:
typescript: 5.2.2
dev: true
- /ts-node@10.9.1(@types/node@18.17.12)(typescript@5.2.2):
+ /ts-node@10.9.1(@types/node@18.17.14)(typescript@5.2.2):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@@ -24422,7 +24422,7 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 18.17.12
+ '@types/node': 18.17.14
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
From 319f90f5ea6fb60e301309fee524e8aa098825cd Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 12:38:48 -0400
Subject: [PATCH 034/131] remove unused eslint directives
---
packages/api/crowdin/client.ts | 1 -
packages/env/index.ts | 58 +++++++++++++++-------------------
2 files changed, 25 insertions(+), 34 deletions(-)
diff --git a/packages/api/crowdin/client.ts b/packages/api/crowdin/client.ts
index 32f1024b79..f47eded52f 100644
--- a/packages/api/crowdin/client.ts
+++ b/packages/api/crowdin/client.ts
@@ -1,5 +1,4 @@
/* eslint-disable no-var */
-/* eslint-disable turbo/no-undeclared-env-vars */
/* eslint-disable node/no-process-env */
import Crowdin from '@crowdin/crowdin-api-client'
import OtaClient from '@crowdin/ota-client'
diff --git a/packages/env/index.ts b/packages/env/index.ts
index 8eb436c02d..a884a1e3f1 100644
--- a/packages/env/index.ts
+++ b/packages/env/index.ts
@@ -44,54 +44,46 @@ export const env = createEnv({
NEXT_PUBLIC_VERCEL_ENV: z.enum(['production', 'development', 'preview']).optional(),
},
runtimeEnv: {
- NODE_ENV: process.env.NODE_ENV,
+ // SERVER ONLY
+ CI: process.env.CI,
+ COGNITO_ACCESS_KEY: process.env.COGNITO_ACCESS_KEY,
+ COGNITO_CLIENT_ID: process.env.COGNITO_CLIENT_ID,
+ COGNITO_CLIENT_SECRET: process.env.COGNITO_CLIENT_SECRET,
+ COGNITO_SECRET: process.env.COGNITO_SECRET,
+ CRON_KEY: process.env.CRON_KEY,
+ CROWDIN_TOKEN: process.env.CROWDIN_TOKEN,
DATABASE_URL: process.env.DATABASE_URL,
DB_DIRECT_URL: process.env.DB_DIRECT_URL,
- KV_URL: process.env.KV_URL,
- KV_REST_API_URL: process.env.KV_REST_API_URL,
- KV_REST_API_TOKEN: process.env.KV_REST_API_TOKEN,
- KV_REST_API_READ_ONLY_TOKEN: process.env.KV_REST_API_READ_ONLY_TOKEN,
- EDGE_CONFIG: process.env.EDGE_CONFIG,
EDGE_CONFIG_TOKEN: process.env.EDGE_CONFIG_TOKEN,
+ EDGE_CONFIG: process.env.EDGE_CONFIG,
FEATURE_FLAG_CONFIG: process.env.FEATURE_FLAG_CONFIG,
+ GOOGLE_PLACES_API_KEY: process.env.GOOGLE_PLACES_API_KEY,
+ KV_REST_API_READ_ONLY_TOKEN: process.env.KV_REST_API_READ_ONLY_TOKEN,
+ KV_REST_API_TOKEN: process.env.KV_REST_API_TOKEN,
+ KV_REST_API_URL: process.env.KV_REST_API_URL,
+ KV_URL: process.env.KV_URL,
+ NEXT_RUNTIME: process.env.NEXT_RUNTIME,
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
NEXTAUTH_URL: process.env.NEXTAUTH_URL,
- COGNITO_ACCESS_KEY: process.env.COGNITO_ACCESS_KEY,
- COGNITO_SECRET: process.env.COGNITO_SECRET,
- COGNITO_CLIENT_ID: process.env.COGNITO_CLIENT_ID,
- COGNITO_CLIENT_SECRET: process.env.COGNITO_CLIENT_SECRET,
- GOOGLE_PLACES_API_KEY: process.env.GOOGLE_PLACES_API_KEY,
- NEXT_PUBLIC_GOOGLE_MAPS_API: process.env.NEXT_PUBLIC_GOOGLE_MAPS_API,
- CROWDIN_TOKEN: process.env.CROWDIN_TOKEN,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- PORT: process.env.PORT,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
+ NODE_ENV: process.env.NODE_ENV,
OTEL_SERVER: process.env.OTEL_SERVER,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- CRON_KEY: process.env.CRON_KEY,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- NEXT_RUNTIME: process.env.NEXT_RUNTIME,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- VERCEL: process.env.VERCEL,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- CI: process.env.CI,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- VERCEL_URL: process.env.VERCEL_URL,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
+ PORT: process.env.PORT,
VERCEL_ENV: process.env.VERCEL_ENV,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
- NEXT_PUBLIC_VERCEL_URL: process.env.NEXT_PUBLIC_VERCEL_URL,
- // eslint-disable-next-line turbo/no-undeclared-env-vars
+ VERCEL_URL: process.env.VERCEL_URL,
+ VERCEL: process.env.VERCEL,
+ // CLIENT ONLY
+ NEXT_PUBLIC_GOOGLE_MAPS_API: process.env.NEXT_PUBLIC_GOOGLE_MAPS_API,
NEXT_PUBLIC_VERCEL_ENV: process.env.NEXT_PUBLIC_VERCEL_ENV,
+ NEXT_PUBLIC_VERCEL_URL: process.env.NEXT_PUBLIC_VERCEL_URL,
},
skipValidation:
- // eslint-disable-next-line turbo/no-undeclared-env-vars
process.env.NODE_ENV === 'development' ||
- // eslint-disable-next-line turbo/no-undeclared-env-vars
process.env.SKIP_ENV_VALIDATION === 'true' ||
- // eslint-disable-next-line turbo/no-undeclared-env-vars
Boolean(process.env.CI) ||
isChromatic(),
})
export const getEnv = (envVar: T): (typeof env)[T] => env[envVar]
+
+export const isDev = process.env.NODE_ENV === 'development'
+export const isVercelProd = process.env.VERCEL_ENV === 'production'
From 12ecc19627efef174b9f4652dc722bd3d5e23178 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 12:41:17 -0400
Subject: [PATCH 035/131] add crowdin update
---
.../mutation.updateBasic.handler.ts | 47 ++++++++++++++++---
1 file changed, 40 insertions(+), 7 deletions(-)
diff --git a/packages/api/router/organization/mutation.updateBasic.handler.ts b/packages/api/router/organization/mutation.updateBasic.handler.ts
index 0df2ffce4e..f58313b74a 100644
--- a/packages/api/router/organization/mutation.updateBasic.handler.ts
+++ b/packages/api/router/organization/mutation.updateBasic.handler.ts
@@ -1,32 +1,65 @@
-import { generateId, generateUniqueSlug, getAuditedClient, type Prisma } from '@weareinreach/db'
+import {
+ generateFreeText,
+ generateId,
+ generateUniqueSlug,
+ getAuditedClient,
+ type Prisma,
+} from '@weareinreach/db'
+import { isVercelProd } from '@weareinreach/env'
+import { createLoggerInstance } from '@weareinreach/util/logger'
+import { getStringIdByKey } from '~api/crowdin'
+import { crowdinApi, crowdinVars } from '~api/crowdin/client'
import { handleError } from '~api/lib/errorHandler'
import { type TRPCHandlerParams } from '~api/types/handler'
import { type TUpdateBasicSchema } from './mutation.updateBasic.schema'
+const logger = createLoggerInstance('api - organization.updateBasic')
export const updateBasic = async ({ ctx, input }: TRPCHandlerParams) => {
try {
const prisma = getAuditedClient(ctx.actorId)
const data: Prisma.OrganizationUpdateInput = {}
+ const existing = await prisma.organization.findUniqueOrThrow({
+ where: { id: input.id },
+ select: { slug: true, description: { select: { tsKey: { select: { crowdinId: true, key: true } } } } },
+ })
if (input.name) {
- const existing = await prisma.organization.findUniqueOrThrow({
- where: { id: input.id },
- select: { slug: true },
- })
const newSlug = await generateUniqueSlug({ name: input.name, id: input.id })
data.name = input.name
data.slug = newSlug
data.oldSlugs = { create: { from: existing.slug, to: newSlug, id: generateId('slugRedirect') } }
}
if (input.description) {
- data.description = { update: { tsKey: { update: { text: input.description } } } }
+ // TODO: [IN-920] Handle new string creation in Crowdin
+ const newText = generateFreeText({ orgId: input.id, type: 'orgDesc', text: input.description })
+ data.description = {
+ upsert: {
+ update: { tsKey: { update: { text: input.description } } },
+ create: { id: newText.freeText.id, tsKey: { create: newText.translationKey } },
+ },
+ }
}
-
const update = await prisma.organization.update({
where: { id: input.id },
data,
})
+ if (update && input.description && existing.description) {
+ const stringId =
+ existing.description.tsKey.crowdinId ||
+ (await getStringIdByKey(existing.description?.tsKey.key, true))
+ if (stringId) {
+ if (isVercelProd) {
+ await crowdinApi.sourceStringsApi.editString(crowdinVars.projectId, stringId, [
+ { op: 'replace', path: '/text', value: input.description },
+ ])
+ } else {
+ logger.info(
+ `\n==========\nSkipping Crowdin Update - Not production environment.\nCrowdin String ID: ${stringId}. Updated Description: ${input.description}\n==========`
+ )
+ }
+ }
+ }
return update
} catch (error) {
handleError(error)
From 5884b3c7975cf1cbbadae5b9be2378dd6729fdf7 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 12:54:37 -0400
Subject: [PATCH 036/131] remove console.log
---
packages/ui/.storybook/main.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts
index 83d76b3d7a..25823cd9a8 100644
--- a/packages/ui/.storybook/main.ts
+++ b/packages/ui/.storybook/main.ts
@@ -15,7 +15,6 @@ const isDev = process.env.NODE_ENV === 'development'
const getAbsolutePath = (value: string) => {
const abPath = dirname(require.resolve(join(value, 'package.json')))
- console.log(abPath)
return abPath
}
From 5c04988e9b854b8245c0e6dae2ec5d8c3ecf3d3c Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 16:35:11 -0400
Subject: [PATCH 037/131] add eslint-config
---
packages/env/package.json | 3 ++-
pnpm-lock.yaml | 3 +++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/packages/env/package.json b/packages/env/package.json
index 33caca08de..d239ac76a9 100644
--- a/packages/env/package.json
+++ b/packages/env/package.json
@@ -16,6 +16,7 @@
"zod": "3.22.2"
},
"devDependencies": {
- "@weareinreach/config": "workspace:*"
+ "@weareinreach/config": "workspace:*",
+ "@weareinreach/eslint-config": "workspace:*"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1e6d55facd..8821d60d13 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1210,6 +1210,9 @@ importers:
'@weareinreach/config':
specifier: workspace:*
version: link:../config
+ '@weareinreach/eslint-config':
+ specifier: workspace:*
+ version: link:../eslint-config
packages/eslint-config:
devDependencies:
From ed7d52fe4dc1a9bd9f207cdf27b249c5bddaf627 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 16:35:40 -0400
Subject: [PATCH 038/131] add forEditDrawer handler
---
packages/api/router/orgWebsite/index.ts | 11 +++++++++
.../orgWebsite/query.forEditDrawer.handler.ts | 23 +++++++++++++++++++
.../orgWebsite/query.forEditDrawer.schema.ts | 6 +++++
packages/api/router/orgWebsite/schemas.ts | 1 +
packages/ui/mockData/orgWebsite.ts | 19 +++++++++++++++
5 files changed, 60 insertions(+)
create mode 100644 packages/api/router/orgWebsite/query.forEditDrawer.handler.ts
create mode 100644 packages/api/router/orgWebsite/query.forEditDrawer.schema.ts
diff --git a/packages/api/router/orgWebsite/index.ts b/packages/api/router/orgWebsite/index.ts
index c180c06f1a..c52c430c58 100644
--- a/packages/api/router/orgWebsite/index.ts
+++ b/packages/api/router/orgWebsite/index.ts
@@ -7,6 +7,7 @@ type OrgWebsiteHandlerCache = {
create: typeof import('./mutation.create.handler').create
update: typeof import('./mutation.update.handler').update
forContactInfo: typeof import('./query.forContactInfo.handler').forContactInfo
+ forEditDrawer: typeof import('./query.forEditDrawer.handler').forEditDrawer
}
export const orgWebsiteRouter = defineRouter({
create: permissionedProcedure('createOrgWebsite')
@@ -33,4 +34,14 @@ export const orgWebsiteRouter = defineRouter({
if (!HandlerCache.forContactInfo) throw new Error('Failed to load handler')
return HandlerCache.forContactInfo({ ctx, input })
}),
+ forEditDrawer: permissionedProcedure('updateOrgWebsite')
+ .input(schema.ZForEditDrawerSchema)
+ .query(async ({ ctx, input }) => {
+ if (!HandlerCache.forEditDrawer)
+ HandlerCache.forEditDrawer = await import('./query.forEditDrawer.handler').then(
+ (mod) => mod.forEditDrawer
+ )
+ if (!HandlerCache.forEditDrawer) throw new Error('Failed to load handler')
+ return HandlerCache.forEditDrawer({ ctx, input })
+ }),
})
diff --git a/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts b/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts
new file mode 100644
index 0000000000..b70997b933
--- /dev/null
+++ b/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts
@@ -0,0 +1,23 @@
+import { prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type TForEditDrawerSchema } from './query.forEditDrawer.schema'
+
+export const forEditDrawer = async ({ input }: TRPCHandlerParams) => {
+ try {
+ const result = await prisma.orgWebsite.findUniqueOrThrow({
+ where: { id: input.id },
+ include: {
+ description: { include: { tsKey: true } },
+ },
+ })
+ const reformatted = {
+ ...result,
+ description: result.description?.tsKey?.text,
+ }
+ return reformatted
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/router/orgWebsite/query.forEditDrawer.schema.ts b/packages/api/router/orgWebsite/query.forEditDrawer.schema.ts
new file mode 100644
index 0000000000..f62a286958
--- /dev/null
+++ b/packages/api/router/orgWebsite/query.forEditDrawer.schema.ts
@@ -0,0 +1,6 @@
+import { z } from 'zod'
+
+import { prefixedId } from '~api/schemas/idPrefix'
+
+export const ZForEditDrawerSchema = z.object({ id: prefixedId('orgWebsite') })
+export type TForEditDrawerSchema = z.infer
diff --git a/packages/api/router/orgWebsite/schemas.ts b/packages/api/router/orgWebsite/schemas.ts
index 57e4fa8f25..2653bdb05e 100644
--- a/packages/api/router/orgWebsite/schemas.ts
+++ b/packages/api/router/orgWebsite/schemas.ts
@@ -2,4 +2,5 @@
export * from './mutation.create.schema'
export * from './mutation.update.schema'
export * from './query.forContactInfo.schema'
+export * from './query.forEditDrawer.schema'
// codegen:end
diff --git a/packages/ui/mockData/orgWebsite.ts b/packages/ui/mockData/orgWebsite.ts
index 7ae79314c5..6d7414f568 100644
--- a/packages/ui/mockData/orgWebsite.ts
+++ b/packages/ui/mockData/orgWebsite.ts
@@ -10,6 +10,20 @@ export const orgWebsiteData = {
description: null,
},
],
+ forEditDrawer: {
+ id: 'oweb_01H29ENF8JTJ3FNJ5BQXDH4PMA',
+ url: 'https://recoverycafelexington.org/',
+ descriptionId: null,
+ isPrimary: false,
+ deleted: false,
+ published: true,
+ organizationId: 'orgn_01H29CX1KRXD89404CG1D4TY6S',
+ orgLocationId: null,
+ orgLocationOnly: false,
+ createdAt: new Date('2023-03-22T21:47:01.905Z'),
+ updatedAt: new Date('2023-05-12T23:38:51.738Z'),
+ description: undefined,
+ },
} satisfies MockDataObject<'orgWebsite'>
export const orgWebsite = {
@@ -21,4 +35,9 @@ export const orgWebsite = {
? orgWebsiteData.forContactInfo.filter((record) => record.orgLocationOnly === locationOnly)
: orgWebsiteData.forContactInfo,
}),
+ forEditDrawer: getTRPCMock({
+ path: ['orgWebsite', 'forEditDrawer'],
+ type: 'query',
+ response: orgWebsiteData.forEditDrawer,
+ }),
} satisfies MockHandlerObject<'orgWebsite'>
From 6ab8e364ef72bec8869a0e59d39709d2cce6ad80 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 16:36:21 -0400
Subject: [PATCH 039/131] use audited client
---
.../orgWebsite/mutation.update.handler.ts | 25 +++++--------------
1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/packages/api/router/orgWebsite/mutation.update.handler.ts b/packages/api/router/orgWebsite/mutation.update.handler.ts
index bfa43e3f12..a12f54f8a4 100644
--- a/packages/api/router/orgWebsite/mutation.update.handler.ts
+++ b/packages/api/router/orgWebsite/mutation.update.handler.ts
@@ -1,27 +1,14 @@
-import { prisma } from '@weareinreach/db'
-import { CreateAuditLog } from '~api/schemas/create/auditLog'
+import { getAuditedClient } from '@weareinreach/db'
import { type TRPCHandlerParams } from '~api/types/handler'
import { type TUpdateSchema } from './mutation.update.schema'
export const update = async ({ ctx, input }: TRPCHandlerParams) => {
const { where, data } = input
- const updatedRecord = await prisma.$transaction(async (tx) => {
- const current = await tx.orgWebsite.findUniqueOrThrow({ where })
- const auditLogs = CreateAuditLog({
- actorId: ctx.session.user.id,
- operation: 'UPDATE',
- from: current,
- to: data,
- })
- const updated = await tx.orgWebsite.update({
- where,
- data: {
- ...data,
- auditLogs,
- },
- })
- return updated
+ const prisma = getAuditedClient(ctx.actorId)
+ const updated = await prisma.orgWebsite.update({
+ where,
+ data,
})
- return updatedRecord
+ return updated
}
From 3c25e862587ba14b52b736863b60e1e899ffc3de Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Tue, 5 Sep 2023 16:36:50 -0400
Subject: [PATCH 040/131] create WebsiteDrawer
---
.../data-portal/WebsiteDrawer.stories.tsx | 36 +++++++
.../components/data-portal/WebsiteDrawer.tsx | 93 +++++++++++++++++++
2 files changed, 129 insertions(+)
create mode 100644 packages/ui/components/data-portal/WebsiteDrawer.stories.tsx
create mode 100644 packages/ui/components/data-portal/WebsiteDrawer.tsx
diff --git a/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx b/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx
new file mode 100644
index 0000000000..9e7a1ee3e3
--- /dev/null
+++ b/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx
@@ -0,0 +1,36 @@
+import { type Meta, type StoryObj } from '@storybook/react'
+
+import { Button } from '~ui/components/core/Button'
+import { organization } from '~ui/mockData/organization'
+import { orgWebsite } from '~ui/mockData/orgWebsite'
+
+import { WebsiteDrawer } from './WebsiteDrawer'
+
+export default {
+ title: 'Data Portal/Drawers/Website',
+ component: WebsiteDrawer,
+ parameters: {
+ layout: 'fullscreen',
+ rqDevtools: true,
+ nextjs: {
+ router: {
+ pathname: '/org/[slug]/edit',
+ asPath: '/org/mock-org-slug',
+ query: {
+ slug: 'mock-org-slug',
+ },
+ },
+ },
+ msw: [organization.getIdFromSlug, orgWebsite.forEditDrawer],
+ },
+ args: {
+ component: Button,
+ children: 'Open Drawer',
+ variant: 'inlineInvertedUtil1',
+ },
+} satisfies Meta
+
+type StoryDef = StoryObj
+
+export const Default = {} satisfies StoryDef
+// export const WithoutData = {} satisfies StoryDef
diff --git a/packages/ui/components/data-portal/WebsiteDrawer.tsx b/packages/ui/components/data-portal/WebsiteDrawer.tsx
new file mode 100644
index 0000000000..3ee5e5bbdb
--- /dev/null
+++ b/packages/ui/components/data-portal/WebsiteDrawer.tsx
@@ -0,0 +1,93 @@
+import { zodResolver } from '@hookform/resolvers/zod'
+import {
+ Box,
+ createPolymorphicComponent,
+ createStyles,
+ Drawer,
+ Group,
+ rem,
+ Stack,
+ Title,
+} from '@mantine/core'
+import { useDisclosure } from '@mantine/hooks'
+import { forwardRef } from 'react'
+import { useForm } from 'react-hook-form'
+import { Checkbox, TextInput } from 'react-hook-form-mantine'
+import { z } from 'zod'
+
+import { Breadcrumb } from '~ui/components/core/Breadcrumb'
+import { Button } from '~ui/components/core/Button'
+import { trpc as api } from '~ui/lib/trpcClient'
+
+const useStyles = createStyles((theme) => ({
+ drawerContent: {
+ borderRadius: `${rem(32)} 0 0 0`,
+ minWidth: '40vw',
+ },
+}))
+
+const FormSchema = z.object({
+ url: z.string().url(),
+ description: z.string().optional(),
+ published: z.boolean(),
+ deleted: z.boolean(),
+})
+type FormSchema = z.infer
+const _WebsiteDrawer = forwardRef(({ id, ...props }, ref) => {
+ const { data, isFetching } = api.orgWebsite.forEditDrawer.useQuery({ id })
+ const [opened, handler] = useDisclosure(true)
+ const { classes } = useStyles()
+ const { control, handleSubmit } = useForm({
+ resolver: zodResolver(FormSchema),
+ values: data,
+ defaultValues: data,
+ })
+ const apiUtils = api.useContext()
+ const siteUpdate = api.orgWebsite.update.useMutation({
+ onSettled: () => apiUtils.orgWebsite.forContactInfo.invalidate(),
+ })
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ >
+ )
+})
+_WebsiteDrawer.displayName = 'WebsiteDrawer'
+
+export const WebsiteDrawer = createPolymorphicComponent<'button', WebsiteDrawerProps>(_WebsiteDrawer)
+
+interface WebsiteDrawerProps {
+ id: string
+}
From 610c20145d8796630497592a5fd3fc787e9aef2e Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 6 Sep 2023 09:33:28 -0400
Subject: [PATCH 041/131] fix lockfile
---
pnpm-lock.yaml | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8821d60d13..9c7238f1e7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1251,7 +1251,7 @@ importers:
version: 1.1.4(eslint@8.48.0)
eslint-import-resolver-typescript:
specifier: 3.6.0
- version: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.0-2)(eslint@8.48.0)
+ version: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.1)(eslint@8.48.0)
eslint-plugin-codegen:
specifier: 0.17.0
version: 0.17.0
@@ -1260,7 +1260,7 @@ importers:
version: 6.0.3
eslint-plugin-import:
specifier: npm:eslint-plugin-i@latest
- version: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
+ version: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
eslint-plugin-node:
specifier: npm:eslint-plugin-n@latest
version: /eslint-plugin-n@16.0.2(eslint@8.48.0)
@@ -14553,8 +14553,8 @@ packages:
'@typescript-eslint/parser': 6.6.0(eslint@8.48.0)(typescript@5.2.2)
eslint: 8.48.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.0-2)(eslint@8.48.0)
- eslint-plugin-import: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
+ eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.1)(eslint@8.48.0)
+ eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
eslint-plugin-jsx-a11y: 6.7.1(eslint@8.48.0)
eslint-plugin-react: 7.33.2(eslint@8.48.0)
eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.48.0)
@@ -14609,7 +14609,7 @@ packages:
- supports-color
dev: true
- /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.0-2)(eslint@8.48.0):
+ /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.1)(eslint@8.48.0):
resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -14620,7 +14620,7 @@ packages:
enhanced-resolve: 5.15.0
eslint: 8.48.0
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
- eslint-plugin-import: /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
+ eslint-plugin-import: /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0)
fast-glob: 3.3.1
get-tsconfig: 4.7.0
is-core-module: 2.13.0
@@ -14657,7 +14657,7 @@ packages:
debug: 3.2.7
eslint: 8.48.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.0-2)(eslint@8.48.0)
+ eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-i@2.28.1)(eslint@8.48.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -14701,8 +14701,8 @@ packages:
requireindex: 1.1.0
dev: true
- /eslint-plugin-i@2.28.0-2(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0):
- resolution: {integrity: sha512-z48kG4qmE4TmiLcxbmvxMT5ycwvPkXaWW0XpU1L768uZaTbiDbxsHMEdV24JHlOR1xDsPpKW39BfP/pRdYIwFA==}
+ /eslint-plugin-i@2.28.1(@typescript-eslint/parser@6.6.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.48.0):
+ resolution: {integrity: sha512-a4oVt0j3ixNhGhvV4XF6NS7OWRFK2rrJ0Q5C4S2dSRb8FxZi31J0uUd5WJLL58wnVJ/OiQ1BxiXnFA4dWQO1Cg==}
engines: {node: '>=12'}
peerDependencies:
eslint: ^7.2.0 || ^8
From ffcedd36199030f6d3b2daaf907e36f036b4d95d Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 6 Sep 2023 10:37:25 -0400
Subject: [PATCH 042/131] update iconList
---
packages/ui/icon/iconList.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/ui/icon/iconList.ts b/packages/ui/icon/iconList.ts
index e1ec634baf..2ccff4acf1 100644
--- a/packages/ui/icon/iconList.ts
+++ b/packages/ui/icon/iconList.ts
@@ -1,3 +1,3 @@
// generated file - do not modify directly
// prettier-ignore
-export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:add-large","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:business-processes","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-for-mobile","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-dual-y-axis","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-large","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unreal","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-enterprisedb","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:global-loan-and-trial","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-ai-on-z","carbon:ibm-aiops-insights","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-bare-metal-server","carbon:ibm-cloud-bare-metal-servers-vpc","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hpc","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-virtual-server-classic","carbon:ibm-cloud-virtual-server-vpc","carbon:ibm-cloud-vpc","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-cloudant","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-db2-warehouse","carbon:ibm-event-automation","carbon:ibm-event-endpoint-mgmt","carbon:ibm-event-processing","carbon:ibm-event-streams","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-vs-private-cloud","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-saas-console","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-turbonomic","carbon:ibm-vpn-for-vpc","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-watsonx-assistant","carbon:ibm-watsonx-code-assistant","carbon:ibm-watsonx-code-assistant-for-z","carbon:ibm-watsonx-orchestrate","carbon:ibm-wazi-deploy","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-gitlab","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:model-tuned","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:prompt-session","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-edit","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:subtract-large","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:sustainability","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-long-paragraph","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-short-paragraph","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:tuning","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vegetation-encroachment","carbon:vegetation-height","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:watsonx","carbon:watsonx-ai","carbon:watsonx-data","carbon:watsonx-governance","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","carbon:app-switcher","carbon:arrows","carbon:back-to-top","carbon:checkbox-undeterminate","carbon:cloud-lightning","carbon:cloud-rain","carbon:cloud-snow","carbon:letter-aa-large","carbon:sunny","simple-icons:tiktok","ph:map-pin-fill","mdi:map-marker"] as const
+export const iconList = ["carbon:3d-cursor","carbon:3d-cursor-alt","carbon:3d-curve-auto-colon","carbon:3d-curve-auto-vessels","carbon:3d-curve-manual","carbon:3d-ica","carbon:3d-mpr-toggle","carbon:3d-print-mesh","carbon:3d-software","carbon:3rd-party-connected","carbon:4k","carbon:4k-filled","carbon:accessibility","carbon:accessibility-alt","carbon:accessibility-color","carbon:accessibility-color-filled","carbon:account","carbon:accumulation-ice","carbon:accumulation-precipitation","carbon:accumulation-rain","carbon:accumulation-snow","carbon:activity","carbon:add","carbon:add-alt","carbon:add-comment","carbon:add-filled","carbon:add-large","carbon:agriculture-analytics","carbon:ai-results","carbon:ai-results-high","carbon:ai-results-low","carbon:ai-results-medium","carbon:ai-results-urgent","carbon:ai-results-very-high","carbon:ai-status","carbon:ai-status-complete","carbon:ai-status-failed","carbon:ai-status-in-progress","carbon:ai-status-queued","carbon:ai-status-rejected","carbon:airline-digital-gate","carbon:airline-manage-gates","carbon:airline-passenger-care","carbon:airline-rapid-board","carbon:airplay","carbon:airplay-filled","carbon:airport-01","carbon:airport-02","carbon:airport-location","carbon:alarm","carbon:alarm-add","carbon:alarm-subtract","carbon:align-box-bottom-center","carbon:align-box-bottom-left","carbon:align-box-bottom-right","carbon:align-box-middle-center","carbon:align-box-middle-left","carbon:align-box-middle-right","carbon:align-box-top-center","carbon:align-box-top-left","carbon:align-box-top-right","carbon:align-horizontal-center","carbon:align-horizontal-left","carbon:align-horizontal-right","carbon:align-vertical-bottom","carbon:align-vertical-center","carbon:align-vertical-top","carbon:analytics","carbon:analytics-custom","carbon:analytics-reference","carbon:angle","carbon:annotation-visibility","carbon:aperture","carbon:api","carbon:api-1","carbon:app","carbon:app-connectivity","carbon:app-switcher","carbon:apple","carbon:apple-dash","carbon:application","carbon:application-mobile","carbon:application-virtual","carbon:application-web","carbon:apps","carbon:archive","carbon:area","carbon:area-custom","carbon:arrival","carbon:arrow-annotation","carbon:arrow-down","carbon:arrow-down-left","carbon:arrow-down-right","carbon:arrow-left","carbon:arrow-right","carbon:arrow-shift-down","carbon:arrow-up","carbon:arrow-up-left","carbon:arrow-up-right","carbon:arrows","carbon:arrows-horizontal","carbon:arrows-vertical","carbon:asleep","carbon:asleep-filled","carbon:assembly","carbon:assembly-cluster","carbon:assembly-reference","carbon:asset","carbon:asset-confirm","carbon:asset-digital-twin","carbon:asset-view","carbon:asterisk","carbon:at","carbon:attachment","carbon:audio-console","carbon:augmented-reality","carbon:auto-scroll","carbon:automatic","carbon:autoscaling","carbon:awake","carbon:back-to-top","carbon:badge","carbon:baggage-claim","carbon:bar","carbon:barcode","carbon:bare-metal-server","carbon:bare-metal-server-01","carbon:bare-metal-server-02","carbon:barrier","carbon:basketball","carbon:bastion-host","carbon:bat","carbon:batch-job","carbon:batch-job-step","carbon:battery-charging","carbon:battery-empty","carbon:battery-full","carbon:battery-half","carbon:battery-low","carbon:battery-quarter","carbon:bee","carbon:bee-bat","carbon:beta","carbon:bicycle","carbon:binoculars","carbon:bloch-sphere","carbon:block-storage","carbon:block-storage-alt","carbon:blockchain","carbon:blog","carbon:bluetooth","carbon:bluetooth-off","carbon:book","carbon:bookmark","carbon:bookmark-add","carbon:bookmark-filled","carbon:boolean","carbon:boot","carbon:boot-volume","carbon:boot-volume-alt","carbon:border-bottom","carbon:border-full","carbon:border-left","carbon:border-none","carbon:border-right","carbon:border-top","carbon:bot","carbon:bottles-01","carbon:bottles-01-dash","carbon:bottles-02","carbon:bottles-02-dash","carbon:bottles-container","carbon:box","carbon:box-extra-large","carbon:box-large","carbon:box-medium","carbon:box-plot","carbon:box-small","carbon:branch","carbon:breaking-change","carbon:brightness-contrast","carbon:bring-forward","carbon:bring-to-front","carbon:brush-freehand","carbon:brush-polygon","carbon:build-tool","carbon:building","carbon:building-insights-1","carbon:building-insights-2","carbon:building-insights-3","carbon:bullhorn","carbon:buoy","carbon:bus","carbon:business-processes","carbon:button-centered","carbon:button-flush-left","carbon:cabin-care","carbon:cabin-care-alert","carbon:cabin-care-alt","carbon:cad","carbon:cafe","carbon:calculation","carbon:calculation-alt","carbon:calculator","carbon:calculator-check","carbon:calendar","carbon:calendar-add","carbon:calendar-add-alt","carbon:calendar-heat-map","carbon:calendar-settings","carbon:calendar-tools","carbon:calibrate","carbon:camera","carbon:camera-action","carbon:campsite","carbon:car","carbon:car-front","carbon:carbon","carbon:carbon-accounting","carbon:carbon-for-ibm-dotcom","carbon:carbon-for-ibm-product","carbon:carbon-for-mobile","carbon:carbon-ui-builder","carbon:caret-down","carbon:caret-left","carbon:caret-right","carbon:caret-sort","carbon:caret-sort-down","carbon:caret-sort-up","carbon:caret-up","carbon:carousel-horizontal","carbon:carousel-vertical","carbon:catalog","carbon:catalog-publish","carbon:categories","carbon:category","carbon:category-add","carbon:category-and","carbon:category-new","carbon:category-new-each","carbon:ccx","carbon:cd-archive","carbon:cd-create-archive","carbon:cd-create-exchange","carbon:cda","carbon:cell-tower","carbon:center-circle","carbon:center-square","carbon:center-to-fit","carbon:certificate","carbon:certificate-check","carbon:change-catalog","carbon:character-decimal","carbon:character-fraction","carbon:character-integer","carbon:character-lower-case","carbon:character-negative-number","carbon:character-patterns","carbon:character-sentence-case","carbon:character-upper-case","carbon:character-whole-number","carbon:charging-station","carbon:charging-station-filled","carbon:chart-3d","carbon:chart-area","carbon:chart-area-smooth","carbon:chart-area-stepper","carbon:chart-average","carbon:chart-bar","carbon:chart-bar-floating","carbon:chart-bar-overlay","carbon:chart-bar-stacked","carbon:chart-bar-target","carbon:chart-bubble","carbon:chart-bubble-packed","carbon:chart-bullet","carbon:chart-candlestick","carbon:chart-cluster-bar","carbon:chart-column","carbon:chart-column-floating","carbon:chart-column-target","carbon:chart-combo","carbon:chart-combo-stacked","carbon:chart-custom","carbon:chart-dual-y-axis","carbon:chart-error-bar","carbon:chart-error-bar-alt","carbon:chart-evaluation","carbon:chart-high-low","carbon:chart-histogram","carbon:chart-line","carbon:chart-line-data","carbon:chart-line-smooth","carbon:chart-logistic-regression","carbon:chart-marimekko","carbon:chart-maximum","carbon:chart-median","carbon:chart-minimum","carbon:chart-multi-line","carbon:chart-multitype","carbon:chart-network","carbon:chart-parallel","carbon:chart-pie","carbon:chart-point","carbon:chart-population","carbon:chart-radar","carbon:chart-radial","carbon:chart-relationship","carbon:chart-ring","carbon:chart-river","carbon:chart-rose","carbon:chart-scatter","carbon:chart-spiral","carbon:chart-stacked","carbon:chart-stepper","carbon:chart-sunburst","carbon:chart-t-sne","carbon:chart-treemap","carbon:chart-venn-diagram","carbon:chart-violin-plot","carbon:chart-waterfall","carbon:chart-win-loss","carbon:chat","carbon:chat-bot","carbon:chat-launch","carbon:chat-off","carbon:chat-operational","carbon:checkbox","carbon:checkbox-checked","carbon:checkbox-checked-filled","carbon:checkbox-indeterminate","carbon:checkbox-indeterminate-filled","carbon:checkbox-undeterminate","carbon:checkbox-undeterminate-filled","carbon:checkmark","carbon:checkmark-filled","carbon:checkmark-filled-error","carbon:checkmark-filled-warning","carbon:checkmark-outline","carbon:checkmark-outline-error","carbon:checkmark-outline-warning","carbon:chemistry","carbon:chemistry-reference","carbon:chevron-down","carbon:chevron-left","carbon:chevron-mini","carbon:chevron-right","carbon:chevron-sort","carbon:chevron-sort-down","carbon:chevron-sort-up","carbon:chevron-up","carbon:chip","carbon:choices","carbon:choose-item","carbon:choropleth-map","carbon:cics-cmas","carbon:cics-db2-connection","carbon:cics-explorer","carbon:cics-program","carbon:cics-region","carbon:cics-region-alt","carbon:cics-region-routing","carbon:cics-region-target","carbon:cics-sit","carbon:cics-sit-overrides","carbon:cics-system-group","carbon:cics-transaction-server-zos","carbon:cics-wui-region","carbon:cicsplex","carbon:circle-dash","carbon:circle-filled","carbon:circle-measurement","carbon:circle-packing","carbon:circle-solid","carbon:circuit-composer","carbon:classification","carbon:classifier-language","carbon:clean","carbon:close","carbon:close-filled","carbon:close-large","carbon:close-outline","carbon:closed-caption","carbon:closed-caption-alt","carbon:closed-caption-filled","carbon:cloud","carbon:cloud-alerting","carbon:cloud-app","carbon:cloud-auditing","carbon:cloud-ceiling","carbon:cloud-data-ops","carbon:cloud-download","carbon:cloud-foundry-1","carbon:cloud-foundry-2","carbon:cloud-lightning","carbon:cloud-logging","carbon:cloud-monitoring","carbon:cloud-offline","carbon:cloud-rain","carbon:cloud-registry","carbon:cloud-satellite","carbon:cloud-satellite-config","carbon:cloud-satellite-link","carbon:cloud-satellite-services","carbon:cloud-service-management","carbon:cloud-services","carbon:cloud-snow","carbon:cloud-upload","carbon:cloudy","carbon:cobb-angle","carbon:code","carbon:code-hide","carbon:code-reference","carbon:code-signing-service","carbon:cognitive","carbon:collaborate","carbon:collapse-all","carbon:collapse-categories","carbon:color-palette","carbon:color-switch","carbon:column","carbon:column-delete","carbon:column-dependency","carbon:column-insert","carbon:commit","carbon:communication-unified","carbon:compare","carbon:compass","carbon:composer-edit","carbon:concept","carbon:condition-point","carbon:condition-wait-point","carbon:connect","carbon:connect-recursive","carbon:connect-reference","carbon:connect-source","carbon:connect-target","carbon:connection-receive","carbon:connection-send","carbon:connection-signal","carbon:connection-signal-off","carbon:connection-two-way","carbon:construction","carbon:container-registry","carbon:container-services","carbon:container-software","carbon:content-delivery-network","carbon:content-view","carbon:continue","carbon:continue-filled","carbon:continuous-deployment","carbon:continuous-integration","carbon:contour-draw","carbon:contour-edit","carbon:contour-finding","carbon:contrast","carbon:convert-to-cloud","carbon:cookie","carbon:copy","carbon:copy-file","carbon:copy-link","carbon:corn","carbon:corner","carbon:coronavirus","carbon:cost","carbon:cost-total","carbon:cough","carbon:course","carbon:covariate","carbon:credentials","carbon:crop","carbon:crop-growth","carbon:crop-health","carbon:cross-reference","carbon:cross-tab","carbon:crossroads","carbon:crowd-report","carbon:crowd-report-filled","carbon:csv","carbon:cu1","carbon:cu3","carbon:cube","carbon:cube-view","carbon:currency","carbon:currency-baht","carbon:currency-dollar","carbon:currency-euro","carbon:currency-lira","carbon:currency-pound","carbon:currency-ruble","carbon:currency-rupee","carbon:currency-shekel","carbon:currency-won","carbon:currency-yen","carbon:cursor-1","carbon:cursor-2","carbon:customer-service","carbon:cut","carbon:cut-in-half","carbon:cut-out","carbon:cy","carbon:cyclist","carbon:cz","carbon:dashboard","carbon:dashboard-reference","carbon:data-1","carbon:data-2","carbon:data-accessor","carbon:data-backup","carbon:data-base","carbon:data-base-alt","carbon:data-bin","carbon:data-blob","carbon:data-categorical","carbon:data-center","carbon:data-check","carbon:data-class","carbon:data-collection","carbon:data-connected","carbon:data-definition","carbon:data-diode","carbon:data-enrichment","carbon:data-enrichment-add","carbon:data-error","carbon:data-format","carbon:data-player","carbon:data-quality-definition","carbon:data-reference","carbon:data-refinery","carbon:data-refinery-reference","carbon:data-regular","carbon:data-set","carbon:data-share","carbon:data-structured","carbon:data-table","carbon:data-table-reference","carbon:data-unreal","carbon:data-unstructured","carbon:data-view","carbon:data-view-alt","carbon:data-vis-1","carbon:data-vis-2","carbon:data-vis-3","carbon:data-vis-4","carbon:data-volume","carbon:data-volume-alt","carbon:database-datastax","carbon:database-elastic","carbon:database-enterprise-db2","carbon:database-enterprisedb","carbon:database-etcd","carbon:database-mongodb","carbon:database-postgresql","carbon:database-rabbit","carbon:database-redis","carbon:datastore","carbon:db2-buffer-pool","carbon:db2-data-sharing-group","carbon:db2-database","carbon:debug","carbon:decision-tree","carbon:delete","carbon:delivery","carbon:delivery-add","carbon:delivery-parcel","carbon:delivery-truck","carbon:denominate","carbon:departure","carbon:deploy","carbon:deploy-rules","carbon:deployment-pattern","carbon:deployment-policy","carbon:deployment-unit-data","carbon:deployment-unit-execution","carbon:deployment-unit-installation","carbon:deployment-unit-presentation","carbon:deployment-unit-technical-data","carbon:deployment-unit-technical-execution","carbon:deployment-unit-technical-installation","carbon:deployment-unit-technical-presentation","carbon:desk-adjustable","carbon:development","carbon:devices","carbon:dew-point","carbon:dew-point-filled","carbon:diagram","carbon:diagram-reference","carbon:dicom-6000","carbon:dicom-overlay","carbon:direct-link","carbon:direction-bear-right-01","carbon:direction-bear-right-01-filled","carbon:direction-bear-right-02","carbon:direction-bear-right-02-filled","carbon:direction-curve","carbon:direction-curve-filled","carbon:direction-fork","carbon:direction-fork-filled","carbon:direction-loop-left","carbon:direction-loop-left-filled","carbon:direction-loop-right","carbon:direction-loop-right-filled","carbon:direction-merge","carbon:direction-merge-filled","carbon:direction-right-01","carbon:direction-right-01-filled","carbon:direction-right-02","carbon:direction-right-02-filled","carbon:direction-rotary-first-right","carbon:direction-rotary-first-right-filled","carbon:direction-rotary-right","carbon:direction-rotary-right-filled","carbon:direction-rotary-straight","carbon:direction-rotary-straight-filled","carbon:direction-sharp-turn","carbon:direction-sharp-turn-filled","carbon:direction-straight","carbon:direction-straight-filled","carbon:direction-straight-right","carbon:direction-straight-right-filled","carbon:direction-u-turn","carbon:direction-u-turn-filled","carbon:directory-domain","carbon:distribute-horizontal-center","carbon:distribute-horizontal-left","carbon:distribute-horizontal-right","carbon:distribute-vertical-bottom","carbon:distribute-vertical-center","carbon:distribute-vertical-top","carbon:dna","carbon:dns-services","carbon:doc","carbon:document","carbon:document-add","carbon:document-attachment","carbon:document-audio","carbon:document-blank","carbon:document-download","carbon:document-epdf","carbon:document-export","carbon:document-horizontal","carbon:document-import","carbon:document-multiple-01","carbon:document-multiple-02","carbon:document-pdf","carbon:document-preliminary","carbon:document-protected","carbon:document-security","carbon:document-sentiment","carbon:document-signed","carbon:document-sketch","carbon:document-subtract","carbon:document-tasks","carbon:document-unknown","carbon:document-unprotected","carbon:document-vertical","carbon:document-video","carbon:document-view","carbon:document-word-processor","carbon:document-word-processor-reference","carbon:dog-walker","carbon:dot-mark","carbon:double-integer","carbon:down-to-bottom","carbon:download","carbon:download-study","carbon:drag-horizontal","carbon:drag-vertical","carbon:draggable","carbon:draw","carbon:drill-back","carbon:drill-down","carbon:drill-through","carbon:drink-01","carbon:drink-02","carbon:driver-analysis","carbon:drone","carbon:drone-delivery","carbon:drone-front","carbon:drone-video","carbon:drop-photo","carbon:drop-photo-filled","carbon:drought","carbon:dvr","carbon:earth","carbon:earth-americas","carbon:earth-americas-filled","carbon:earth-europe-africa","carbon:earth-europe-africa-filled","carbon:earth-filled","carbon:earth-southeast-asia","carbon:earth-southeast-asia-filled","carbon:earthquake","carbon:edge-cluster","carbon:edge-device","carbon:edge-enhancement","carbon:edge-enhancement-01","carbon:edge-enhancement-02","carbon:edge-enhancement-03","carbon:edge-node","carbon:edge-node-alt","carbon:edge-service","carbon:edit","carbon:edit-filter","carbon:edit-off","carbon:edt-loop","carbon:education","carbon:email","carbon:email-new","carbon:encryption","carbon:energy-renewable","carbon:enterprise","carbon:equalizer","carbon:erase","carbon:erase-3d","carbon:error","carbon:error-filled","carbon:error-outline","carbon:event","carbon:event-schedule","carbon:events","carbon:events-alt","carbon:exam-mode","carbon:executable-program","carbon:exit","carbon:expand-all","carbon:expand-categories","carbon:explore","carbon:export","carbon:eyedropper","carbon:face-activated","carbon:face-activated-add","carbon:face-activated-filled","carbon:face-add","carbon:face-cool","carbon:face-dissatisfied","carbon:face-dissatisfied-filled","carbon:face-dizzy","carbon:face-dizzy-filled","carbon:face-mask","carbon:face-neutral","carbon:face-neutral-filled","carbon:face-pending","carbon:face-pending-filled","carbon:face-satisfied","carbon:face-satisfied-filled","carbon:face-wink","carbon:face-wink-filled","carbon:factor","carbon:fade","carbon:favorite","carbon:favorite-filled","carbon:favorite-half","carbon:fetch-upload","carbon:fetch-upload-cloud","carbon:file-storage","carbon:filter","carbon:filter-edit","carbon:filter-remove","carbon:filter-reset","carbon:finance","carbon:fingerprint-recognition","carbon:fire","carbon:firewall","carbon:firewall-classic","carbon:fish","carbon:fish-multiple","carbon:fit-to-height","carbon:fit-to-screen","carbon:fit-to-width","carbon:flag","carbon:flag-filled","carbon:flagging-taxi","carbon:flash","carbon:flash-filled","carbon:flash-off","carbon:flash-off-filled","carbon:flight-international","carbon:flight-roster","carbon:flight-schedule","carbon:floating-ip","carbon:flood","carbon:flood-warning","carbon:floorplan","carbon:flow","carbon:flow-connection","carbon:flow-data","carbon:flow-logs-vpc","carbon:flow-modeler","carbon:flow-modeler-reference","carbon:flow-stream","carbon:flow-stream-reference","carbon:fog","carbon:folder","carbon:folder-add","carbon:folder-details","carbon:folder-details-reference","carbon:folder-move-to","carbon:folder-off","carbon:folder-open","carbon:folder-parent","carbon:folder-shared","carbon:folders","carbon:forecast-hail","carbon:forecast-hail-30","carbon:forecast-lightning","carbon:forecast-lightning-30","carbon:fork","carbon:forum","carbon:forward-10","carbon:forward-30","carbon:forward-5","carbon:fragile","carbon:friendship","carbon:fruit-bowl","carbon:function","carbon:function-math","carbon:fusion-blender","carbon:game-console","carbon:game-wireless","carbon:gamification","carbon:gas-station","carbon:gas-station-filled","carbon:gateway","carbon:gateway-api","carbon:gateway-mail","carbon:gateway-public","carbon:gateway-security","carbon:gateway-user-access","carbon:gateway-vpn","carbon:gender-female","carbon:gender-male","carbon:generate-pdf","carbon:gif","carbon:gift","carbon:global-loan-and-trial","carbon:globe","carbon:gradient","carbon:graphical-data-flow","carbon:grid","carbon:group","carbon:group-access","carbon:group-account","carbon:group-objects","carbon:group-objects-new","carbon:group-objects-save","carbon:group-presentation","carbon:group-resource","carbon:group-security","carbon:growth","carbon:gui","carbon:gui-management","carbon:h","carbon:hail","carbon:hanging-protocol","carbon:harbor","carbon:hardware-security-module","carbon:hashtag","carbon:haze","carbon:haze-night","carbon:hd","carbon:hd-filled","carbon:hdr","carbon:headphones","carbon:headset","carbon:health-cross","carbon:hearing","carbon:heat-map","carbon:heat-map-02","carbon:heat-map-03","carbon:heat-map-stocks","carbon:helicopter","carbon:help","carbon:help-desk","carbon:help-filled","carbon:hinton-plot","carbon:hl7-attributes","carbon:hole-filling","carbon:hole-filling-cursor","carbon:home","carbon:horizontal-view","carbon:hospital","carbon:hospital-bed","carbon:hotel","carbon:hourglass","carbon:html","carbon:html-reference","carbon:http","carbon:humidity","carbon:humidity-alt","carbon:hurricane","carbon:hybrid-networking","carbon:hybrid-networking-alt","carbon:ibm-ai-on-z","carbon:ibm-aiops-insights","carbon:ibm-bluepay","carbon:ibm-cloud","carbon:ibm-cloud-app-id","carbon:ibm-cloud-bare-metal-server","carbon:ibm-cloud-bare-metal-servers-vpc","carbon:ibm-cloud-citrix-daas","carbon:ibm-cloud-continuous-delivery","carbon:ibm-cloud-dedicated-host","carbon:ibm-cloud-direct-link-1-connect","carbon:ibm-cloud-direct-link-1-dedicated","carbon:ibm-cloud-direct-link-1-dedicated-hosting","carbon:ibm-cloud-direct-link-1-exchange","carbon:ibm-cloud-direct-link-2-connect","carbon:ibm-cloud-direct-link-2-dedicated","carbon:ibm-cloud-direct-link-2-dedicated-hosting","carbon:ibm-cloud-event-notification","carbon:ibm-cloud-event-streams","carbon:ibm-cloud-for-education","carbon:ibm-cloud-hpc","carbon:ibm-cloud-hsm","carbon:ibm-cloud-hyper-protect-crypto-services","carbon:ibm-cloud-hyper-protect-dbaas","carbon:ibm-cloud-hyper-protect-vs","carbon:ibm-cloud-internet-services","carbon:ibm-cloud-ipsec-vpn","carbon:ibm-cloud-key-protect","carbon:ibm-cloud-kubernetes-service","carbon:ibm-cloud-logging","carbon:ibm-cloud-mass-data-migration","carbon:ibm-cloud-pak-applications","carbon:ibm-cloud-pak-business-automation","carbon:ibm-cloud-pak-data","carbon:ibm-cloud-pak-integration","carbon:ibm-cloud-pak-manta-automated-data-lineage","carbon:ibm-cloud-pak-multicloud-mgmt","carbon:ibm-cloud-pak-netezza","carbon:ibm-cloud-pak-network-automation","carbon:ibm-cloud-pak-security","carbon:ibm-cloud-pak-system","carbon:ibm-cloud-pak-watson-aiops","carbon:ibm-cloud-pal","carbon:ibm-cloud-privileged-access-gateway","carbon:ibm-cloud-projects","carbon:ibm-cloud-resiliency","carbon:ibm-cloud-secrets-manager","carbon:ibm-cloud-security-compliance-center","carbon:ibm-cloud-security-compliance-center-workload-protection","carbon:ibm-cloud-subnets","carbon:ibm-cloud-sysdig-secure","carbon:ibm-cloud-transit-gateway","carbon:ibm-cloud-virtual-server-classic","carbon:ibm-cloud-virtual-server-vpc","carbon:ibm-cloud-vpc","carbon:ibm-cloud-vpc-endpoints","carbon:ibm-cloudant","carbon:ibm-content-services","carbon:ibm-data-replication","carbon:ibm-datastage","carbon:ibm-db2","carbon:ibm-db2-alt","carbon:ibm-db2-warehouse","carbon:ibm-event-automation","carbon:ibm-event-endpoint-mgmt","carbon:ibm-event-processing","carbon:ibm-event-streams","carbon:ibm-match-360","carbon:ibm-mq","carbon:ibm-open-enterprise-languages","carbon:ibm-openshift-container-platform-on-vpc-for-regulated-industries","carbon:ibm-power-vs","carbon:ibm-power-vs-private-cloud","carbon:ibm-power-with-vpc","carbon:ibm-private-path-services","carbon:ibm-process-mining","carbon:ibm-saas-console","carbon:ibm-sap-on-power","carbon:ibm-secure-infrastructure-on-vpc-for-regulated-industries","carbon:ibm-security","carbon:ibm-security-services","carbon:ibm-telehealth","carbon:ibm-tenet","carbon:ibm-toolchain","carbon:ibm-turbonomic","carbon:ibm-vpn-for-vpc","carbon:ibm-vsi-on-vpc-for-regulated-industries","carbon:ibm-watson-assistant","carbon:ibm-watson-discovery","carbon:ibm-watson-knowledge-catalog","carbon:ibm-watson-knowledge-studio","carbon:ibm-watson-language-translator","carbon:ibm-watson-machine-learning","carbon:ibm-watson-natural-language-classifier","carbon:ibm-watson-natural-language-understanding","carbon:ibm-watson-openscale","carbon:ibm-watson-orders","carbon:ibm-watson-query","carbon:ibm-watson-speech-to-text","carbon:ibm-watson-studio","carbon:ibm-watson-text-to-speech","carbon:ibm-watson-tone-analyzer","carbon:ibm-watsonx-assistant","carbon:ibm-watsonx-code-assistant","carbon:ibm-watsonx-code-assistant-for-z","carbon:ibm-watsonx-orchestrate","carbon:ibm-wazi-deploy","carbon:ibm-z-cloud-mod-stack","carbon:ibm-z-cloud-provisioning","carbon:ibm-z-environments-dev-sec-ops","carbon:ibm-z-os","carbon:ibm-z-os-ai-control-interface","carbon:ibm-z-os-containers","carbon:ibm-z-os-package-manager","carbon:ica-2d","carbon:ice-accretion","carbon:ice-vision","carbon:id","carbon:id-management","carbon:idea","carbon:identification","carbon:image","carbon:image-copy","carbon:image-medical","carbon:image-reference","carbon:image-search","carbon:image-search-alt","carbon:image-service","carbon:import-export","carbon:improve-relevance","carbon:in-progress","carbon:in-progress-error","carbon:in-progress-warning","carbon:incomplete","carbon:incomplete-cancel","carbon:incomplete-error","carbon:incomplete-warning","carbon:increase-level","carbon:industry","carbon:information","carbon:information-disabled","carbon:information-filled","carbon:information-square","carbon:information-square-filled","carbon:infrastructure-classic","carbon:insert","carbon:insert-page","carbon:insert-syntax","carbon:inspection","carbon:instance-bx","carbon:instance-classic","carbon:instance-cx","carbon:instance-mx","carbon:instance-virtual","carbon:integration","carbon:intent-request-active","carbon:intent-request-create","carbon:intent-request-heal","carbon:intent-request-inactive","carbon:intent-request-scale-in","carbon:intent-request-scale-out","carbon:intent-request-uninstall","carbon:intent-request-upgrade","carbon:interactions","carbon:interactive-segmentation-cursor","carbon:intersect","carbon:intrusion-prevention","carbon:inventory-management","carbon:iot-connect","carbon:iot-platform","carbon:iso","carbon:iso-filled","carbon:iso-outline","carbon:join-full","carbon:join-inner","carbon:join-left","carbon:join-outer","carbon:join-right","carbon:jpg","carbon:json","carbon:json-reference","carbon:jump-link","carbon:keep-dry","carbon:keyboard","carbon:keyboard-off","carbon:kubernetes","carbon:label","carbon:language","carbon:laptop","carbon:lasso","carbon:lasso-polygon","carbon:launch","carbon:launch-study-1","carbon:launch-study-2","carbon:launch-study-3","carbon:layers","carbon:legend","carbon:letter-aa","carbon:letter-aa-large","carbon:letter-bb","carbon:letter-cc","carbon:letter-dd","carbon:letter-ee","carbon:letter-ff","carbon:letter-gg","carbon:letter-hh","carbon:letter-ii","carbon:letter-jj","carbon:letter-kk","carbon:letter-ll","carbon:letter-mm","carbon:letter-nn","carbon:letter-oo","carbon:letter-pp","carbon:letter-qq","carbon:letter-rr","carbon:letter-ss","carbon:letter-tt","carbon:letter-uu","carbon:letter-vv","carbon:letter-ww","carbon:letter-xx","carbon:letter-yy","carbon:letter-zz","carbon:license","carbon:license-draft","carbon:license-global","carbon:license-maintenance","carbon:license-maintenance-draft","carbon:license-third-party","carbon:license-third-party-draft","carbon:lifesaver","carbon:light","carbon:light-filled","carbon:lightning","carbon:link","carbon:linux","carbon:linux-alt","carbon:list","carbon:list-boxes","carbon:list-bulleted","carbon:list-checked","carbon:list-checked-mirror","carbon:list-dropdown","carbon:list-numbered","carbon:list-numbered-mirror","carbon:load-balancer-application","carbon:load-balancer-classic","carbon:load-balancer-global","carbon:load-balancer-listener","carbon:load-balancer-local","carbon:load-balancer-network","carbon:load-balancer-pool","carbon:load-balancer-vpc","carbon:location","carbon:location-company","carbon:location-company-filled","carbon:location-current","carbon:location-filled","carbon:location-hazard","carbon:location-hazard-filled","carbon:location-heart","carbon:location-heart-filled","carbon:location-person","carbon:location-person-filled","carbon:location-save","carbon:location-star","carbon:location-star-filled","carbon:locked","carbon:logical-partition","carbon:login","carbon:logo-angular","carbon:logo-ansible-community","carbon:logo-delicious","carbon:logo-digg","carbon:logo-discord","carbon:logo-facebook","carbon:logo-figma","carbon:logo-flickr","carbon:logo-github","carbon:logo-gitlab","carbon:logo-glassdoor","carbon:logo-google","carbon:logo-instagram","carbon:logo-invision","carbon:logo-jupyter","carbon:logo-keybase","carbon:logo-kubernetes","carbon:logo-linkedin","carbon:logo-livestream","carbon:logo-mastodon","carbon:logo-medium","carbon:logo-npm","carbon:logo-openshift","carbon:logo-pinterest","carbon:logo-python","carbon:logo-quora","carbon:logo-r-script","carbon:logo-react","carbon:logo-red-hat-ansible","carbon:logo-sketch","carbon:logo-skype","carbon:logo-slack","carbon:logo-snapchat","carbon:logo-stumbleupon","carbon:logo-svelte","carbon:logo-tumblr","carbon:logo-twitter","carbon:logo-vmware","carbon:logo-vmware-alt","carbon:logo-vue","carbon:logo-wechat","carbon:logo-xing","carbon:logo-yelp","carbon:logo-youtube","carbon:logout","carbon:loop","carbon:mac-command","carbon:mac-option","carbon:mac-shift","carbon:machine-learning","carbon:machine-learning-model","carbon:magic-wand","carbon:magic-wand-filled","carbon:magnify","carbon:mail-all","carbon:mail-reply","carbon:mammogram","carbon:mammogram-stacked","carbon:manage-protection","carbon:managed-solutions","carbon:map","carbon:map-boundary","carbon:map-boundary-vegetation","carbon:map-center","carbon:map-identify","carbon:marine-warning","carbon:math-curve","carbon:matrix","carbon:maximize","carbon:media-cast","carbon:media-library","carbon:media-library-filled","carbon:medication","carbon:medication-alert","carbon:medication-reminder","carbon:menu","carbon:message-queue","carbon:meter","carbon:meter-alt","carbon:microphone","carbon:microphone-filled","carbon:microphone-off","carbon:microphone-off-filled","carbon:microscope","carbon:microservices-1","carbon:microservices-2","carbon:migrate","carbon:migrate-alt","carbon:milestone","carbon:military-camp","carbon:minimize","carbon:misuse","carbon:misuse-alt","carbon:misuse-outline","carbon:mixed-rain-hail","carbon:mobile","carbon:mobile-add","carbon:mobile-audio","carbon:mobile-check","carbon:mobile-download","carbon:mobile-landscape","carbon:mobility-services","carbon:model","carbon:model-alt","carbon:model-builder","carbon:model-builder-reference","carbon:model-reference","carbon:model-tuned","carbon:money","carbon:monster","carbon:monument","carbon:moon","carbon:moonrise","carbon:moonset","carbon:mostly-cloudy","carbon:mostly-cloudy-night","carbon:mountain","carbon:mov","carbon:move","carbon:movement","carbon:mp3","carbon:mp4","carbon:mpeg","carbon:mpg2","carbon:music","carbon:music-add","carbon:music-remove","carbon:name-space","carbon:navaid-civil","carbon:navaid-dme","carbon:navaid-helipad","carbon:navaid-military","carbon:navaid-military-civil","carbon:navaid-ndb","carbon:navaid-ndb-dme","carbon:navaid-private","carbon:navaid-seaplane","carbon:navaid-tacan","carbon:navaid-vhfor","carbon:navaid-vor","carbon:navaid-vordme","carbon:navaid-vortac","carbon:need","carbon:network-1","carbon:network-2","carbon:network-3","carbon:network-3-reference","carbon:network-4","carbon:network-4-reference","carbon:network-admin-control","carbon:network-enterprise","carbon:network-overlay","carbon:network-public","carbon:new-tab","carbon:next-filled","carbon:next-outline","carbon:no-image","carbon:no-ticket","carbon:nominal","carbon:nominate","carbon:non-certified","carbon:noodle-bowl","carbon:not-available","carbon:not-sent","carbon:not-sent-filled","carbon:notebook","carbon:notebook-reference","carbon:notification","carbon:notification-filled","carbon:notification-new","carbon:notification-off","carbon:notification-off-filled","carbon:number-0","carbon:number-1","carbon:number-2","carbon:number-3","carbon:number-4","carbon:number-5","carbon:number-6","carbon:number-7","carbon:number-8","carbon:number-9","carbon:number-small-0","carbon:number-small-1","carbon:number-small-2","carbon:number-small-3","carbon:number-small-4","carbon:number-small-5","carbon:number-small-6","carbon:number-small-7","carbon:number-small-8","carbon:number-small-9","carbon:object-storage","carbon:object-storage-alt","carbon:observed-hail","carbon:observed-lightning","carbon:omega","carbon:opacity","carbon:open-panel-bottom","carbon:open-panel-filled-bottom","carbon:open-panel-filled-left","carbon:open-panel-filled-right","carbon:open-panel-filled-top","carbon:open-panel-left","carbon:open-panel-right","carbon:open-panel-top","carbon:operation","carbon:operation-gauge","carbon:operation-if","carbon:operations-field","carbon:operations-record","carbon:order-details","carbon:ordinal","carbon:outage","carbon:outlook-severe","carbon:overflow-menu-horizontal","carbon:overflow-menu-vertical","carbon:overlay","carbon:package","carbon:package-text-analysis","carbon:page-break","carbon:page-first","carbon:page-last","carbon:page-number","carbon:page-scroll","carbon:paint-brush","carbon:paint-brush-alt","carbon:palm-tree","carbon:pan-horizontal","carbon:pan-vertical","carbon:panel-expansion","carbon:paragraph","carbon:parameter","carbon:parent-child","carbon:partition-auto","carbon:partition-collection","carbon:partition-repartition","carbon:partition-same","carbon:partition-specific","carbon:partly-cloudy","carbon:partly-cloudy-night","carbon:partnership","carbon:passenger-drinks","carbon:passenger-plus","carbon:password","carbon:paste","carbon:pause","carbon:pause-filled","carbon:pause-future","carbon:pause-outline","carbon:pause-outline-filled","carbon:pause-past","carbon:pcn-e-node","carbon:pcn-military","carbon:pcn-p-node","carbon:pcn-z-node","carbon:pdf","carbon:pdf-reference","carbon:pedestrian","carbon:pedestrian-child","carbon:pedestrian-family","carbon:pen","carbon:pen-fountain","carbon:pending","carbon:pending-filled","carbon:percentage","carbon:percentage-filled","carbon:person","carbon:person-favorite","carbon:pest","carbon:pet-image-b","carbon:pet-image-o","carbon:phone","carbon:phone-application","carbon:phone-block","carbon:phone-block-filled","carbon:phone-filled","carbon:phone-incoming","carbon:phone-incoming-filled","carbon:phone-ip","carbon:phone-off","carbon:phone-off-filled","carbon:phone-outgoing","carbon:phone-outgoing-filled","carbon:phone-settings","carbon:phone-voice","carbon:phone-voice-filled","carbon:phrase-sentiment","carbon:picnic-area","carbon:piggy-bank","carbon:piggy-bank-slot","carbon:pills","carbon:pills-add","carbon:pills-subtract","carbon:pin","carbon:pin-filled","carbon:plan","carbon:plane","carbon:plane-private","carbon:plane-sea","carbon:play","carbon:play-filled","carbon:play-filled-alt","carbon:play-outline","carbon:play-outline-filled","carbon:playlist","carbon:plug","carbon:plug-filled","carbon:png","carbon:point-of-presence","carbon:pointer-text","carbon:police","carbon:policy","carbon:popup","carbon:port-input","carbon:port-output","carbon:portfolio","carbon:power","carbon:ppt","carbon:presentation-file","carbon:pressure","carbon:pressure-filled","carbon:previous-filled","carbon:previous-outline","carbon:printer","carbon:product","carbon:progress-bar","carbon:progress-bar-round","carbon:promote","carbon:prompt-session","carbon:property-relationship","carbon:purchase","carbon:qc-launch","carbon:qq-plot","carbon:qr-code","carbon:quadrant-plot","carbon:query","carbon:query-queue","carbon:queued","carbon:quotes","carbon:radar","carbon:radar-enhanced","carbon:radar-weather","carbon:radio","carbon:radio-button","carbon:radio-button-checked","carbon:radio-combat","carbon:radio-push-to-talk","carbon:rain","carbon:rain-drizzle","carbon:rain-drop","carbon:rain-heavy","carbon:rain-scattered","carbon:rain-scattered-night","carbon:raw","carbon:receipt","carbon:recently-viewed","carbon:recommend","carbon:recording","carbon:recording-filled","carbon:recording-filled-alt","carbon:recycle","carbon:redo","carbon:ref-evapotranspiration","carbon:reference-architecture","carbon:reflect-horizontal","carbon:reflect-vertical","carbon:region-analysis-area","carbon:region-analysis-volume","carbon:registration","carbon:reminder","carbon:reminder-medical","carbon:renew","carbon:repeat","carbon:repeat-one","carbon:replicate","carbon:reply","carbon:reply-all","carbon:repo-artifact","carbon:repo-source-code","carbon:report","carbon:report-data","carbon:request-quote","carbon:research-bloch-sphere","carbon:research-hinton-plot","carbon:research-matrix","carbon:reset","carbon:reset-alt","carbon:restart","carbon:restaurant","carbon:restaurant-fine","carbon:result","carbon:result-draft","carbon:result-new","carbon:result-old","carbon:retry-failed","carbon:return","carbon:review","carbon:rewind-10","carbon:rewind-30","carbon:rewind-5","carbon:road","carbon:road-weather","carbon:roadmap","carbon:rocket","carbon:rotate","carbon:rotate-180","carbon:rotate-360","carbon:rotate-clockwise","carbon:rotate-clockwise-alt","carbon:rotate-clockwise-alt-filled","carbon:rotate-clockwise-filled","carbon:rotate-counterclockwise","carbon:rotate-counterclockwise-alt","carbon:rotate-counterclockwise-alt-filled","carbon:rotate-counterclockwise-filled","carbon:router","carbon:router-voice","carbon:router-wifi","carbon:row","carbon:row-collapse","carbon:row-delete","carbon:row-expand","carbon:row-insert","carbon:rss","carbon:rule","carbon:rule-cancelled","carbon:rule-data-quality","carbon:rule-draft","carbon:rule-filled","carbon:rule-locked","carbon:rule-partial","carbon:rule-test","carbon:ruler","carbon:ruler-alt","carbon:run","carbon:run-mirror","carbon:s","carbon:s-alt","carbon:sailboat-coastal","carbon:sailboat-offshore","carbon:sankey-diagram","carbon:sankey-diagram-alt","carbon:satellite","carbon:satellite-radar","carbon:satellite-weather","carbon:save","carbon:save-annotation","carbon:save-image","carbon:save-model","carbon:save-series","carbon:scale","carbon:scales","carbon:scales-tipped","carbon:scalpel","carbon:scalpel-cursor","carbon:scalpel-lasso","carbon:scalpel-select","carbon:scan","carbon:scan-alt","carbon:scan-disabled","carbon:scatter-matrix","carbon:schematics","carbon:scis-control-tower","carbon:scis-transparent-supply","carbon:scooter","carbon:scooter-front","carbon:screen","carbon:screen-map","carbon:screen-map-set","carbon:screen-off","carbon:script","carbon:script-reference","carbon:sdk","carbon:search","carbon:search-advanced","carbon:search-locate","carbon:search-locate-mirror","carbon:security","carbon:security-services","carbon:select-01","carbon:select-02","carbon:select-window","carbon:send","carbon:send-alt","carbon:send-alt-filled","carbon:send-backward","carbon:send-filled","carbon:send-to-back","carbon:server-dns","carbon:server-proxy","carbon:server-time","carbon:service-desk","carbon:service-id","carbon:session-border-control","carbon:settings","carbon:settings-adjust","carbon:settings-check","carbon:settings-edit","carbon:settings-services","carbon:settings-view","carbon:shape-except","carbon:shape-exclude","carbon:shape-intersect","carbon:shape-join","carbon:shape-unite","carbon:share","carbon:share-knowledge","carbon:shopping-bag","carbon:shopping-cart","carbon:shopping-cart-arrow-down","carbon:shopping-cart-arrow-up","carbon:shopping-cart-clear","carbon:shopping-cart-error","carbon:shopping-cart-minus","carbon:shopping-cart-plus","carbon:shopping-catalog","carbon:show-data-cards","carbon:shrink-screen","carbon:shrink-screen-filled","carbon:shuffle","carbon:shuttle","carbon:side-panel-close","carbon:side-panel-close-filled","carbon:side-panel-open","carbon:side-panel-open-filled","carbon:sight","carbon:sigma","carbon:signal-strength","carbon:sim-card","carbon:skill-level","carbon:skill-level-advanced","carbon:skill-level-basic","carbon:skill-level-intermediate","carbon:skip-back","carbon:skip-back-filled","carbon:skip-back-outline","carbon:skip-back-outline-filled","carbon:skip-back-outline-solid","carbon:skip-back-solid-filled","carbon:skip-forward","carbon:skip-forward-filled","carbon:skip-forward-outline","carbon:skip-forward-outline-filled","carbon:skip-forward-outline-solid","carbon:skip-forward-solid-filled","carbon:sleet","carbon:slisor","carbon:slm","carbon:smell","carbon:smoke","carbon:smoothing","carbon:smoothing-cursor","carbon:snooze","carbon:snow","carbon:snow-blizzard","carbon:snow-density","carbon:snow-heavy","carbon:snow-scattered","carbon:snow-scattered-night","carbon:snowflake","carbon:soccer","carbon:software-resource","carbon:software-resource-cluster","carbon:software-resource-resource","carbon:soil-moisture","carbon:soil-moisture-field","carbon:soil-moisture-global","carbon:soil-temperature","carbon:soil-temperature-field","carbon:soil-temperature-global","carbon:solar-panel","carbon:sort-ascending","carbon:sort-descending","carbon:sort-remove","carbon:spell-check","carbon:spine-label","carbon:split","carbon:split-discard","carbon:split-screen","carbon:spray-paint","carbon:sprout","carbon:sql","carbon:stack-limitation","carbon:stacked-move","carbon:stacked-scrolling-1","carbon:stacked-scrolling-2","carbon:stamp","carbon:star","carbon:star-filled","carbon:star-half","carbon:star-review","carbon:status-acknowledge","carbon:status-change","carbon:status-partial-fail","carbon:status-resolved","carbon:stay-inside","carbon:stem-leaf-plot","carbon:stethoscope","carbon:stop","carbon:stop-filled","carbon:stop-filled-alt","carbon:stop-outline","carbon:stop-outline-filled","carbon:stop-sign","carbon:stop-sign-filled","carbon:storage-pool","carbon:storage-request","carbon:store","carbon:storm-tracker","carbon:strawberry","carbon:stress-breath-editor","carbon:string-integer","carbon:string-text","carbon:study-next","carbon:study-previous","carbon:study-read","carbon:study-skip","carbon:study-transfer","carbon:study-unread","carbon:study-view","carbon:sub-volume","carbon:subflow","carbon:subflow-local","carbon:subnet-acl-rules","carbon:subtract","carbon:subtract-alt","carbon:subtract-large","carbon:summary-kpi","carbon:summary-kpi-mirror","carbon:sun","carbon:sunny","carbon:sunrise","carbon:sunset","carbon:support-vector-machine","carbon:sustainability","carbon:svg","carbon:swim","carbon:switch-layer-2","carbon:switch-layer-3","carbon:switcher","carbon:sys-provision","carbon:t","carbon:t-alt","carbon:table","carbon:table-alias","carbon:table-built","carbon:table-of-contents","carbon:table-shortcut","carbon:table-split","carbon:tablet","carbon:tablet-landscape","carbon:tag","carbon:tag-edit","carbon:tag-export","carbon:tag-group","carbon:tag-import","carbon:tag-none","carbon:tank","carbon:task","carbon:task-add","carbon:task-approved","carbon:task-asset-view","carbon:task-complete","carbon:task-location","carbon:task-remove","carbon:task-settings","carbon:task-star","carbon:task-tools","carbon:task-view","carbon:taste","carbon:taxi","carbon:tcp-ip-service","carbon:temperature","carbon:temperature-celsius","carbon:temperature-celsius-alt","carbon:temperature-fahrenheit","carbon:temperature-fahrenheit-alt","carbon:temperature-feels-like","carbon:temperature-frigid","carbon:temperature-hot","carbon:temperature-inversion","carbon:temperature-max","carbon:temperature-min","carbon:temperature-water","carbon:template","carbon:tennis","carbon:tennis-ball","carbon:term","carbon:terminal","carbon:terminal-3270","carbon:test-tool","carbon:text-align-center","carbon:text-align-justify","carbon:text-align-left","carbon:text-align-mixed","carbon:text-align-right","carbon:text-all-caps","carbon:text-annotation-toggle","carbon:text-bold","carbon:text-clear-format","carbon:text-color","carbon:text-creation","carbon:text-fill","carbon:text-font","carbon:text-footnote","carbon:text-highlight","carbon:text-indent","carbon:text-indent-less","carbon:text-indent-more","carbon:text-italic","carbon:text-kerning","carbon:text-leading","carbon:text-line-spacing","carbon:text-link","carbon:text-link-analysis","carbon:text-long-paragraph","carbon:text-mining","carbon:text-mining-applier","carbon:text-new-line","carbon:text-scale","carbon:text-selection","carbon:text-short-paragraph","carbon:text-small-caps","carbon:text-strikethrough","carbon:text-subscript","carbon:text-superscript","carbon:text-tracking","carbon:text-underline","carbon:text-vertical-alignment","carbon:text-wrap","carbon:theater","carbon:this-side-up","carbon:threshold","carbon:thumbnail-1","carbon:thumbnail-2","carbon:thumbnail-preview","carbon:thumbs-down","carbon:thumbs-down-filled","carbon:thumbs-up","carbon:thumbs-up-filled","carbon:thunderstorm","carbon:thunderstorm-scattered","carbon:thunderstorm-scattered-night","carbon:thunderstorm-severe","carbon:thunderstorm-strong","carbon:ticket","carbon:tides","carbon:tif","carbon:time","carbon:time-plot","carbon:timer","carbon:tool-box","carbon:tool-kit","carbon:tools","carbon:tools-alt","carbon:tornado","carbon:tornado-warning","carbon:touch-1","carbon:touch-1-down","carbon:touch-1-down-filled","carbon:touch-1-filled","carbon:touch-2","carbon:touch-2-filled","carbon:touch-interaction","carbon:traffic-cone","carbon:traffic-event","carbon:traffic-flow","carbon:traffic-flow-incident","carbon:traffic-incident","carbon:traffic-weather-incident","carbon:train","carbon:train-heart","carbon:train-profile","carbon:train-speed","carbon:train-ticket","carbon:train-time","carbon:tram","carbon:transform-binary","carbon:transform-instructions","carbon:transform-language","carbon:transgender","carbon:translate","carbon:transmission-lte","carbon:transpose","carbon:trash-can","carbon:tree","carbon:tree-fall-risk","carbon:tree-view","carbon:tree-view-alt","carbon:trophy","carbon:trophy-filled","carbon:tropical-storm","carbon:tropical-storm-model-tracks","carbon:tropical-storm-tracks","carbon:tropical-warning","carbon:tsq","carbon:tsunami","carbon:tsv","carbon:tuning","carbon:two-factor-authentication","carbon:two-person-lift","carbon:txt","carbon:txt-reference","carbon:type-pattern","carbon:types","carbon:u1","carbon:u2","carbon:u3","carbon:umbrella","carbon:undefined","carbon:undefined-filled","carbon:undo","carbon:ungroup-objects","carbon:unknown","carbon:unknown-filled","carbon:unlink","carbon:unlocked","carbon:unsaved","carbon:up-to-top","carbon:update-now","carbon:upgrade","carbon:upload","carbon:usb","carbon:user","carbon:user-access","carbon:user-activity","carbon:user-admin","carbon:user-avatar","carbon:user-avatar-filled","carbon:user-avatar-filled-alt","carbon:user-certification","carbon:user-data","carbon:user-favorite","carbon:user-favorite-alt","carbon:user-favorite-alt-filled","carbon:user-filled","carbon:user-follow","carbon:user-identification","carbon:user-military","carbon:user-multiple","carbon:user-online","carbon:user-profile","carbon:user-profile-alt","carbon:user-role","carbon:user-service-desk","carbon:user-settings","carbon:user-simulation","carbon:user-speaker","carbon:user-sponsor","carbon:user-x-ray","carbon:uv-index","carbon:uv-index-alt","carbon:uv-index-filled","carbon:value-variable","carbon:van","carbon:vegetation-asset","carbon:vegetation-encroachment","carbon:vegetation-height","carbon:vehicle-api","carbon:vehicle-connected","carbon:vehicle-insights","carbon:vehicle-services","carbon:version","carbon:version-major","carbon:version-minor","carbon:version-patch","carbon:vertical-view","carbon:video","carbon:video-add","carbon:video-chat","carbon:video-filled","carbon:video-off","carbon:video-off-filled","carbon:view","carbon:view-filled","carbon:view-mode-1","carbon:view-mode-2","carbon:view-next","carbon:view-off","carbon:view-off-filled","carbon:virtual-column","carbon:virtual-column-key","carbon:virtual-desktop","carbon:virtual-machine","carbon:virtual-private-cloud","carbon:virtual-private-cloud-alt","carbon:visual-recognition","carbon:vlan","carbon:vlan-ibm","carbon:vmdk-disk","carbon:voice-activate","carbon:voicemail","carbon:volume-block-storage","carbon:volume-down","carbon:volume-down-alt","carbon:volume-down-filled","carbon:volume-down-filled-alt","carbon:volume-file-storage","carbon:volume-mute","carbon:volume-mute-filled","carbon:volume-object-storage","carbon:volume-up","carbon:volume-up-alt","carbon:volume-up-filled","carbon:volume-up-filled-alt","carbon:vpn","carbon:vpn-connection","carbon:vpn-policy","carbon:wallet","carbon:warning","carbon:warning-alt","carbon:warning-alt-filled","carbon:warning-alt-inverted","carbon:warning-alt-inverted-filled","carbon:warning-filled","carbon:warning-hex","carbon:warning-hex-filled","carbon:warning-other","carbon:warning-square","carbon:warning-square-filled","carbon:watch","carbon:watson","carbon:watson-machine-learning","carbon:watsonx","carbon:watsonx-ai","carbon:watsonx-data","carbon:watsonx-governance","carbon:wave-direction","carbon:wave-height","carbon:wave-period","carbon:weather-front-cold","carbon:weather-front-stationary","carbon:weather-front-warm","carbon:weather-station","carbon:webhook","carbon:websheet","carbon:wheat","carbon:white-paper","carbon:wifi","carbon:wifi-bridge","carbon:wifi-bridge-alt","carbon:wifi-controller","carbon:wifi-not-secure","carbon:wifi-off","carbon:wifi-secure","carbon:wikis","carbon:wind-gusts","carbon:wind-power","carbon:wind-stream","carbon:window-auto","carbon:window-base","carbon:window-black-saturation","carbon:window-overlay","carbon:window-preset","carbon:windy","carbon:windy-dust","carbon:windy-snow","carbon:windy-strong","carbon:winter-warning","carbon:wintry-mix","carbon:wireless-checkout","carbon:wmv","carbon:word-cloud","carbon:workflow-automation","carbon:workspace","carbon:workspace-import","carbon:worship","carbon:worship-christian","carbon:worship-jewish","carbon:worship-muslim","carbon:x","carbon:x-axis","carbon:xls","carbon:xml","carbon:y","carbon:y-axis","carbon:z","carbon:z-axis","carbon:z-lpar","carbon:z-systems","carbon:zip","carbon:zip-reference","carbon:zoom-area","carbon:zoom-fit","carbon:zoom-in","carbon:zoom-in-area","carbon:zoom-out","carbon:zoom-out-area","carbon:zoom-pan","carbon:zoom-reset","carbon:zos","carbon:zos-sysplex","fluent-mdl2:remove-from-trash","mdi:content-save","mdi:map-marker","ph:map-pin-fill","simple-icons:tiktok"] as const
From ed36460cd2e1810c1353f14b594dbeb8b97bbda0 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 6 Sep 2023 12:25:58 -0400
Subject: [PATCH 043/131] save handling, unsaved changes modal
---
.../orgWebsite/query.forEditDrawer.handler.ts | 2 +-
.../data-portal/WebsiteDrawer.stories.tsx | 3 +-
.../components/data-portal/WebsiteDrawer.tsx | 77 +++++++++++++++++--
packages/ui/mockData/orgWebsite.ts | 5 ++
4 files changed, 78 insertions(+), 9 deletions(-)
diff --git a/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts b/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts
index b70997b933..d1f868338d 100644
--- a/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts
+++ b/packages/api/router/orgWebsite/query.forEditDrawer.handler.ts
@@ -7,7 +7,7 @@ import { type TForEditDrawerSchema } from './query.forEditDrawer.schema'
export const forEditDrawer = async ({ input }: TRPCHandlerParams) => {
try {
const result = await prisma.orgWebsite.findUniqueOrThrow({
- where: { id: input.id },
+ where: input,
include: {
description: { include: { tsKey: true } },
},
diff --git a/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx b/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx
index 9e7a1ee3e3..f2d309440b 100644
--- a/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx
+++ b/packages/ui/components/data-portal/WebsiteDrawer.stories.tsx
@@ -21,12 +21,13 @@ export default {
},
},
},
- msw: [organization.getIdFromSlug, orgWebsite.forEditDrawer],
+ msw: [organization.getIdFromSlug, orgWebsite.forEditDrawer, orgWebsite.update],
},
args: {
component: Button,
children: 'Open Drawer',
variant: 'inlineInvertedUtil1',
+ id: 'oweb_01H29ENF8JTJ3FNJ5BQXDH4PMA',
},
} satisfies Meta
diff --git a/packages/ui/components/data-portal/WebsiteDrawer.tsx b/packages/ui/components/data-portal/WebsiteDrawer.tsx
index 3ee5e5bbdb..4951e952cd 100644
--- a/packages/ui/components/data-portal/WebsiteDrawer.tsx
+++ b/packages/ui/components/data-portal/WebsiteDrawer.tsx
@@ -5,8 +5,11 @@ import {
createStyles,
Drawer,
Group,
+ LoadingOverlay,
+ Modal,
rem,
Stack,
+ Text,
Title,
} from '@mantine/core'
import { useDisclosure } from '@mantine/hooks'
@@ -17,6 +20,7 @@ import { z } from 'zod'
import { Breadcrumb } from '~ui/components/core/Breadcrumb'
import { Button } from '~ui/components/core/Button'
+import { Icon } from '~ui/icon'
import { trpc as api } from '~ui/lib/trpcClient'
const useStyles = createStyles((theme) => ({
@@ -35,34 +39,58 @@ const FormSchema = z.object({
type FormSchema = z.infer
const _WebsiteDrawer = forwardRef(({ id, ...props }, ref) => {
const { data, isFetching } = api.orgWebsite.forEditDrawer.useQuery({ id })
- const [opened, handler] = useDisclosure(true)
+ const [drawerOpened, drawerHandler] = useDisclosure(true)
+ const [modalOpened, modalHandler] = useDisclosure(false)
const { classes } = useStyles()
- const { control, handleSubmit } = useForm({
+ const { control, handleSubmit, formState, reset, getValues } = useForm({
resolver: zodResolver(FormSchema),
values: data,
defaultValues: data,
})
const apiUtils = api.useContext()
const siteUpdate = api.orgWebsite.update.useMutation({
- onSettled: () => apiUtils.orgWebsite.forContactInfo.invalidate(),
+ onSettled: (data) => {
+ apiUtils.orgWebsite.forContactInfo.invalidate()
+ reset(data)
+ },
})
+ const isSaved = siteUpdate.isSuccess && !formState.isDirty
+ const handleClose = () => {
+ if (formState.isDirty) {
+ return modalHandler.open()
+ } else {
+ return drawerHandler.close()
+ }
+ }
return (
<>
-
+
-
+
>
)
diff --git a/packages/ui/mockData/orgWebsite.ts b/packages/ui/mockData/orgWebsite.ts
index 6d7414f568..2de7a53244 100644
--- a/packages/ui/mockData/orgWebsite.ts
+++ b/packages/ui/mockData/orgWebsite.ts
@@ -40,4 +40,9 @@ export const orgWebsite = {
type: 'query',
response: orgWebsiteData.forEditDrawer,
}),
+ update: getTRPCMock({
+ path: ['orgWebsite', 'update'],
+ type: 'mutation',
+ response: (input) => ({ ...orgWebsiteData.forEditDrawer, ...input.data }),
+ }),
} satisfies MockHandlerObject<'orgWebsite'>
From 38942ca90127c1f9d97369f97acfa9ba711d358f Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Wed, 6 Sep 2023 18:34:42 -0400
Subject: [PATCH 044/131] start phone drawer
---
packages/api/router/orgPhone/index.ts | 11 ++
.../orgPhone/query.forEditDrawer.handler.ts | 23 +++
.../orgPhone/query.forEditDrawer.schema.ts | 6 +
packages/api/router/orgPhone/schemas.ts | 1 +
.../data-portal/PhoneDrawer.stories.tsx | 37 ++++
.../ui/components/data-portal/PhoneDrawer.tsx | 156 ++++++++++++++++
.../data-portal/PhoneNumberEntry.stories.tsx | 30 +++-
.../data-portal/PhoneNumberEntryHookForm.tsx | 168 ++++++++++++++++++
packages/ui/mockData/orgPhone.ts | 24 +++
9 files changed, 453 insertions(+), 3 deletions(-)
create mode 100644 packages/api/router/orgPhone/query.forEditDrawer.handler.ts
create mode 100644 packages/api/router/orgPhone/query.forEditDrawer.schema.ts
create mode 100644 packages/ui/components/data-portal/PhoneDrawer.stories.tsx
create mode 100644 packages/ui/components/data-portal/PhoneDrawer.tsx
create mode 100644 packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
diff --git a/packages/api/router/orgPhone/index.ts b/packages/api/router/orgPhone/index.ts
index 15f8542360..9f7f8820cb 100644
--- a/packages/api/router/orgPhone/index.ts
+++ b/packages/api/router/orgPhone/index.ts
@@ -9,6 +9,7 @@ type OrgPhoneHandlerCache = {
upsertMany: typeof import('./mutation.upsertMany.handler').upsertMany
get: typeof import('./query.get.handler').get
forContactInfo: typeof import('./query.forContactInfo.handler').forContactInfo
+ forEditDrawer: typeof import('./query.forEditDrawer.handler').forEditDrawer
}
export const orgPhoneRouter = defineRouter({
create: permissionedProcedure('createNewPhone')
@@ -50,4 +51,14 @@ export const orgPhoneRouter = defineRouter({
if (!HandlerCache.forContactInfo) throw new Error('Failed to load handler')
return HandlerCache.forContactInfo({ ctx, input })
}),
+ forEditDrawer: permissionedProcedure('updatePhone')
+ .input(schema.ZForEditDrawerSchema)
+ .query(async ({ ctx, input }) => {
+ if (!HandlerCache.forEditDrawer)
+ HandlerCache.forEditDrawer = await import('./query.forEditDrawer.handler').then(
+ (mod) => mod.forEditDrawer
+ )
+ if (!HandlerCache.forEditDrawer) throw new Error('Failed to load handler')
+ return HandlerCache.forEditDrawer({ ctx, input })
+ }),
})
diff --git a/packages/api/router/orgPhone/query.forEditDrawer.handler.ts b/packages/api/router/orgPhone/query.forEditDrawer.handler.ts
new file mode 100644
index 0000000000..71321d2267
--- /dev/null
+++ b/packages/api/router/orgPhone/query.forEditDrawer.handler.ts
@@ -0,0 +1,23 @@
+import { prisma } from '@weareinreach/db'
+import { handleError } from '~api/lib/errorHandler'
+import { type TRPCHandlerParams } from '~api/types/handler'
+
+import { type TForEditDrawerSchema } from './query.forEditDrawer.schema'
+
+export const forEditDrawer = async ({ input }: TRPCHandlerParams) => {
+ try {
+ const result = await prisma.orgPhone.findUniqueOrThrow({
+ where: input,
+ include: {
+ description: { include: { tsKey: true } },
+ },
+ })
+ const reformatted = {
+ ...result,
+ description: result.description?.tsKey?.text,
+ }
+ return reformatted
+ } catch (error) {
+ handleError(error)
+ }
+}
diff --git a/packages/api/router/orgPhone/query.forEditDrawer.schema.ts b/packages/api/router/orgPhone/query.forEditDrawer.schema.ts
new file mode 100644
index 0000000000..778f0f3668
--- /dev/null
+++ b/packages/api/router/orgPhone/query.forEditDrawer.schema.ts
@@ -0,0 +1,6 @@
+import { z } from 'zod'
+
+import { prefixedId } from '~api/schemas/idPrefix'
+
+export const ZForEditDrawerSchema = z.object({ id: prefixedId('orgPhone') })
+export type TForEditDrawerSchema = z.infer
diff --git a/packages/api/router/orgPhone/schemas.ts b/packages/api/router/orgPhone/schemas.ts
index 39890d6f7b..384349aeca 100644
--- a/packages/api/router/orgPhone/schemas.ts
+++ b/packages/api/router/orgPhone/schemas.ts
@@ -3,5 +3,6 @@ export * from './mutation.create.schema'
export * from './mutation.update.schema'
export * from './mutation.upsertMany.schema'
export * from './query.forContactInfo.schema'
+export * from './query.forEditDrawer.schema'
export * from './query.get.schema'
// codegen:end
diff --git a/packages/ui/components/data-portal/PhoneDrawer.stories.tsx b/packages/ui/components/data-portal/PhoneDrawer.stories.tsx
new file mode 100644
index 0000000000..f8cba16e09
--- /dev/null
+++ b/packages/ui/components/data-portal/PhoneDrawer.stories.tsx
@@ -0,0 +1,37 @@
+import { type Meta, type StoryObj } from '@storybook/react'
+
+import { Button } from '~ui/components/core/Button'
+import { organization } from '~ui/mockData/organization'
+import { orgWebsite } from '~ui/mockData/orgWebsite'
+
+import { PhoneDrawer } from './PhoneDrawer'
+
+export default {
+ title: 'Data Portal/Drawers/Phone',
+ component: PhoneDrawer,
+ parameters: {
+ layout: 'fullscreen',
+ rqDevtools: true,
+ nextjs: {
+ router: {
+ pathname: '/org/[slug]/edit',
+ asPath: '/org/mock-org-slug',
+ query: {
+ slug: 'mock-org-slug',
+ },
+ },
+ },
+ msw: [organization.getIdFromSlug, orgWebsite.forEditDrawer, orgWebsite.update],
+ },
+ args: {
+ component: Button,
+ children: 'Open Drawer',
+ variant: 'inlineInvertedUtil1',
+ id: 'oweb_01H29ENF8JTJ3FNJ5BQXDH4PMA',
+ },
+} satisfies Meta
+
+type StoryDef = StoryObj
+
+export const Default = {} satisfies StoryDef
+// export const WithoutData = {} satisfies StoryDef
diff --git a/packages/ui/components/data-portal/PhoneDrawer.tsx b/packages/ui/components/data-portal/PhoneDrawer.tsx
new file mode 100644
index 0000000000..055591bdba
--- /dev/null
+++ b/packages/ui/components/data-portal/PhoneDrawer.tsx
@@ -0,0 +1,156 @@
+import { zodResolver } from '@hookform/resolvers/zod'
+import {
+ Box,
+ createPolymorphicComponent,
+ createStyles,
+ Drawer,
+ Group,
+ LoadingOverlay,
+ Modal,
+ rem,
+ Stack,
+ Text,
+ Title,
+} from '@mantine/core'
+import { useDisclosure } from '@mantine/hooks'
+import { forwardRef } from 'react'
+import { useForm } from 'react-hook-form'
+import { Checkbox, TextInput } from 'react-hook-form-mantine'
+import { z } from 'zod'
+
+import { Breadcrumb } from '~ui/components/core/Breadcrumb'
+import { Button } from '~ui/components/core/Button'
+import { Icon } from '~ui/icon'
+import { trpc as api } from '~ui/lib/trpcClient'
+
+const useStyles = createStyles((theme) => ({
+ drawerContent: {
+ borderRadius: `${rem(32)} 0 0 0`,
+ minWidth: '40vw',
+ },
+}))
+
+const FormSchema = z.object({
+ url: z.string().url(),
+ description: z.string().optional(),
+ published: z.boolean(),
+ deleted: z.boolean(),
+})
+type FormSchema = z.infer
+const _PhoneDrawer = forwardRef(({ id, ...props }, ref) => {
+ const { data, isFetching } = api.orgWebsite.forEditDrawer.useQuery({ id })
+ const [drawerOpened, drawerHandler] = useDisclosure(true)
+ const [modalOpened, modalHandler] = useDisclosure(false)
+ const { classes } = useStyles()
+ const { control, handleSubmit, formState, reset, getValues } = useForm({
+ resolver: zodResolver(FormSchema),
+ values: data,
+ defaultValues: data,
+ })
+ const apiUtils = api.useContext()
+ const siteUpdate = api.orgWebsite.update.useMutation({
+ onSettled: (data) => {
+ apiUtils.orgWebsite.forContactInfo.invalidate()
+ reset(data)
+ },
+ })
+ const isSaved = siteUpdate.isSuccess && !formState.isDirty
+ const handleClose = () => {
+ if (formState.isDirty) {
+ return modalHandler.open()
+ } else {
+ return drawerHandler.close()
+ }
+ }
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+ >
+ )
+})
+_PhoneDrawer.displayName = 'PhoneDrawer'
+
+export const PhoneDrawer = createPolymorphicComponent<'button', PhoneDrawerProps>(_PhoneDrawer)
+
+interface PhoneDrawerProps {
+ id: string
+}
diff --git a/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx b/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
index b905f90179..5d3643c2ed 100644
--- a/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
+++ b/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
@@ -1,4 +1,5 @@
import { type Meta, type StoryFn, type StoryObj } from '@storybook/react'
+import { FormProvider, useForm as useHookForm } from 'react-hook-form'
import { fieldOpt } from '~ui/mockData/fieldOpt'
import {
@@ -9,6 +10,7 @@ import {
} from '~ui/modals/dataPortal/PhoneEmail/context'
import { PhoneNumberEntry } from './PhoneNumberEntry'
+import { PhoneNumberEntry as PhoneNumberEntryHookForm } from './PhoneNumberEntryHookForm'
const FormContextDecorator = (Story: StoryFn) => {
const form = useForm(formHookParams)
@@ -18,12 +20,25 @@ const FormContextDecorator = (Story: StoryFn) => {
)
}
+const HookFormContextDecorator = (Story: StoryFn) => {
+ const form = useHookForm()
+ return (
+
+
+
+ )
+}
export default {
title: 'Data Portal/Fields/Phone Number Entry',
component: PhoneNumberEntry,
parameters: {
msw: [fieldOpt.countries],
},
+} satisfies Meta
+
+type StoryDef = StoryObj
+
+export const Default = {
decorators: [FormContextDecorator],
render: function Render() {
const form = useFormContext()
@@ -38,8 +53,17 @@ export default {
/>
)
},
-} satisfies Meta
+} satisfies StoryDef
-type StoryDef = StoryObj
+export const WithReactHookForm = {
+ decorators: [HookFormContextDecorator],
+ args: {
+ countrySelectProps: { name: 'countryId' },
+ phoneEntryProps: { name: 'number' },
+ },
+ render: function Render(args) {
+ return
+ },
+} satisfies StoryObj
-export const Default = {} satisfies StoryDef
+type HookFormParams = { countryId: string; number: string }
diff --git a/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx b/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
new file mode 100644
index 0000000000..1870c5ec4c
--- /dev/null
+++ b/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
@@ -0,0 +1,168 @@
+import { createStyles, Group, rem, Text } from '@mantine/core'
+import { AsYouType, type CountryCode } from 'libphonenumber-js'
+import { type ComponentPropsWithoutRef, forwardRef, useEffect, useState } from 'react'
+import { type FieldValues, useFormContext, useWatch } from 'react-hook-form'
+import { Select, type SelectProps, TextInput, type TextInputProps } from 'react-hook-form-mantine'
+import PhoneInput, { parsePhoneNumber, type Props as PhoneInputProps } from 'react-phone-number-input/input'
+import { type SetOptional } from 'type-fest'
+
+import { type ApiOutput } from '@weareinreach/api'
+import { isCountryCode } from '~ui/hooks/usePhoneNumber'
+import { trpc as api } from '~ui/lib/trpcClient'
+
+const DEFAULT_COUNTRY = 'US'
+
+const PhoneCountrySelectItem = forwardRef(
+ ({ data, value, label, ...props }, ref) => {
+ const { name } = data
+ return (
+
+ {`${label} ${name}`}
+
+ )
+ }
+)
+PhoneCountrySelectItem.displayName = 'PhoneCountrySelectItem'
+
+const useCountrySelectStyles = createStyles((theme) => ({
+ dropdown: {
+ width: 'fit-content !important',
+ left: 'unset !important',
+ // right: 0,
+ },
+ root: {
+ width: rem(48),
+ },
+ input: {
+ border: 'none',
+ padding: 0,
+ height: '2rem',
+ },
+ rightSection: {
+ paddingRight: 0,
+ },
+}))
+const usePhoneEntryStyles = createStyles((theme) => ({
+ rightSection: {
+ padding: `0 ${rem(4)}`,
+ margin: `${rem(2)} 0`,
+ borderLeft: `1px solid ${theme.other.colors.primary.lightGray}`,
+ },
+}))
+
+export const PhoneNumberEntry = ({
+ countrySelectProps,
+ phoneEntryProps: allPhoneEntryProps,
+}: PhoneNumberEntryProps) => {
+ const form = useFormContext()
+ // const selectedCountry = useWatch({control: countrySelectProps.control, name: countrySelectProps.name})
+ const selectedCountry = form.watch(countrySelectProps.name)
+ // const [selectedCountry, setSelectedCountry] = useState()
+ const { classes: countrySelectClasses } = useCountrySelectStyles()
+ const { classes: phoneEntryClasses } = usePhoneEntryStyles()
+ const {
+ setError: setPhoneError,
+ value: phoneValue,
+ onChange: onPhoneChange,
+ ...phoneEntryProps
+ } = allPhoneEntryProps
+
+ const topCountries = ['US', 'CA', 'MX']
+
+ const { data: countryList } = api.fieldOpt.countries.useQuery(
+ { where: { activeForOrgs: true } },
+ {
+ initialData: [],
+ select: (data) =>
+ data
+ .map(({ id, flag, name, cca2 }) => ({
+ value: id,
+ label: `${flag}`,
+ data: { name, cca2 },
+ group: topCountries.includes(cca2) ? 'Common' : 'Others',
+ }))
+ .sort((a, b) => {
+ if (topCountries.includes(a.data.cca2) && !topCountries.includes(b.data.cca2)) {
+ return -1
+ } else if (topCountries.includes(b.data.cca2) && !topCountries.includes(a.data.cca2)) {
+ return 1
+ } else return a.data.cca2.localeCompare(b.data.cca2)
+ }),
+ }
+ )
+ const phoneFormatter = new AsYouType(selectedCountry)
+ // useEffect(() => {
+ // const { data } = countryList.find(({ value }) => value === countrySelectProps.value) ?? {}
+ // if (data?.cca2 && isCountryCode(data.cca2)) setSelectedCountry(data.cca2)
+ // else if (data === undefined) setSelectedCountry(undefined)
+ // // eslint-disable-next-line react-hooks/exhaustive-deps
+ // }, [countrySelectProps.value])
+
+ useEffect(() => {
+ if (phoneValue) {
+ phoneFormatter.input(phoneValue)
+ const phoneCountry = phoneFormatter.getNumber()?.country
+ if (phoneCountry && phoneCountry !== selectedCountry) {
+ const countryId = countryList.find(({ data }) => data.cca2 === phoneCountry)?.value
+ if (countryId) {
+ form.setValue(countrySelectProps.name, countryId)
+ if (countrySelectProps.onChange && typeof countrySelectProps.onChange === 'function') {
+ countrySelectProps.onChange(countryId)
+ }
+ } else if (typeof setPhoneError === 'function') {
+ setPhoneError(`Country not active: ${phoneCountry}`)
+ }
+ }
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [phoneValue])
+
+ const countrySelection = (
+
+ )
+
+ return (
+ (onPhoneChange && typeof onPhoneChange === 'function' ? onPhoneChange(e) : undefined)}
+ {...form.register(phoneEntryProps.name)}
+ {...phoneEntryProps}
+ />
+ )
+}
+
+export interface PhoneNumberEntryProps {
+ countrySelectProps: Omit, 'data' | 'itemComponent' | 'classNames' | 'clearable'>
+ phoneEntryProps: Omit<
+ SetOptional<
+ PhoneInputProps, 'rightSection' | 'rightSectionWidth' | 'classNames'>>,
+ 'onChange'
+ >,
+ 'country' | 'defaultCountry' | 'itemComponent'
+ > & {
+ setError?: (err: string) => void
+ 'data-autofocus'?: boolean
+ }
+ hookForm?: boolean
+}
+
+type CountryList = ApiOutput['fieldOpt']['countries']
+interface PhoneCountrySelectItem extends ComponentPropsWithoutRef<'div'>, PhoneCountryItem {}
+interface PhoneCountryItem {
+ label: string
+ value: string
+ data: Pick
+}
diff --git a/packages/ui/mockData/orgPhone.ts b/packages/ui/mockData/orgPhone.ts
index d6ae2f4eaa..9349c086e6 100644
--- a/packages/ui/mockData/orgPhone.ts
+++ b/packages/ui/mockData/orgPhone.ts
@@ -283,6 +283,25 @@ export const orgPhoneData = {
},
},
],
+ forEditDrawer: {
+ id: 'ophn_01GVH3WK8HSVYQE7J4W9ASS9V8',
+ legacyId: '62d054f7c028d00016b5a067',
+ legacyDesc: 'Jose Fragoso (Youth Refugee Program)',
+ number: '7709360969',
+ ext: '152',
+ primary: false,
+ published: true,
+ deleted: false,
+ migrationReview: true,
+ countryId: 'ctry_01GW2HHDK9M26M80SG63T21SVH',
+ phoneTypeId: null,
+ descriptionId: 'ftxt_01G7SHWZE32XTMB5QSK1C3YCTR',
+ locationOnly: false,
+ serviceOnly: true,
+ createdAt: new Date('2022-07-12T15:54:30.723Z'),
+ updatedAt: new Date('2023-05-21T03:54:05.484Z'),
+ description: 'Jose Fragoso (Youth Refugee Program)',
+ },
} satisfies MockDataObject<'orgPhone'>
export const orgPhone = {
@@ -303,4 +322,9 @@ export const orgPhone = {
? orgPhoneData.forContactInfo.filter((record) => record.locationOnly === locationOnly)
: orgPhoneData.forContactInfo,
}),
+ forEditDrawer: getTRPCMock({
+ path: ['orgPhone', 'forEditDrawer'],
+ type: 'query',
+ response: orgPhoneData.forEditDrawer,
+ }),
} satisfies MockHandlerObject<'orgPhone'>
From 7d7724ca12b9f7ee0cec2e19ec1c2cb7e7c59743 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 8 Sep 2023 16:08:02 -0400
Subject: [PATCH 045/131] add dep for hook form errors
---
packages/ui/package.json | 2 ++
pnpm-lock.yaml | 26 ++++++++++++++++++++------
2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/packages/ui/package.json b/packages/ui/package.json
index fc3c294726..35a1e48b00 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -58,6 +58,7 @@
"@faker-js/faker": "8.0.2",
"@geometricpanda/storybook-addon-badges": "2.0.0",
"@hookform/devtools": "4.3.1",
+ "@hookform/error-message": "2.0.1",
"@hookform/resolvers": "3.3.1",
"@iconify-json/carbon": "1.1.21",
"@iconify-json/fluent-mdl2": "1.1.3",
@@ -176,6 +177,7 @@
"peerDependencies": {
"@emotion/react": "^11",
"@emotion/server": "^11",
+ "@hookform/error-message": "2.0.1",
"@hookform/resolvers": "^3.2.0",
"@iconify-json/carbon": "^1.1.20",
"@iconify-json/simple-icons": "^1.1.67",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2422196641..36179e7469 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1391,6 +1391,9 @@ importers:
'@hookform/devtools':
specifier: 4.3.1
version: 4.3.1(@types/react@18.2.21)(react-dom@18.2.0)(react@18.2.0)
+ '@hookform/error-message':
+ specifier: 2.0.1
+ version: 2.0.1(react-dom@18.2.0)(react-hook-form@7.46.1)(react@18.2.0)
'@hookform/resolvers':
specifier: 3.3.1
version: 3.3.1(react-hook-form@7.46.1)
@@ -5037,6 +5040,18 @@ packages:
- '@types/react'
dev: true
+ /@hookform/error-message@2.0.1(react-dom@18.2.0)(react-hook-form@7.46.1)(react@18.2.0):
+ resolution: {integrity: sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==}
+ peerDependencies:
+ react: ^18 || 18
+ react-dom: ^18 || 18
+ react-hook-form: ^7.0.0
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-hook-form: 7.46.1(react@18.2.0)
+ dev: true
+
/@hookform/resolvers@3.3.1(react-hook-form@7.46.1):
resolution: {integrity: sha512-K7KCKRKjymxIB90nHDQ7b9nli474ru99ZbqxiqDAWYsYhOsU3/4qLxW91y+1n04ic13ajjZ66L3aXbNef8PELQ==}
peerDependencies:
@@ -5616,7 +5631,7 @@ packages:
dependencies:
'@mantine/ssr': 6.0.20(@emotion/react@11.11.1)(@emotion/server@11.11.0)(react-dom@18.2.0)(react@18.2.0)
'@mantine/styles': 6.0.20(@emotion/react@11.11.1)(react-dom@18.2.0)(react@18.2.0)
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -10317,7 +10332,7 @@ packages:
'@trpc/client': 10.38.1(@trpc/server@10.38.1)
'@trpc/react-query': 10.38.1(@tanstack/react-query@4.33.0)(@trpc/client@10.38.1)(@trpc/server@10.38.1)(react-dom@18.2.0)(react@18.2.0)
'@trpc/server': 10.38.1
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-ssr-prepass: 1.5.0(react@18.2.0)
@@ -19857,7 +19872,7 @@ packages:
'@panva/hkdf': 1.1.1
cookie: 0.5.0
jose: 4.14.4
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0)
oauth: 0.9.15
openid-client: 5.4.3
preact: 10.17.0
@@ -19881,7 +19896,7 @@ packages:
hoist-non-react-statics: 3.3.2
i18next: 23.4.9
i18next-fs-backend: 2.1.5
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-i18next: 13.2.2(i18next@23.4.9)(react-dom@18.2.0)(react@18.2.0)
@@ -19935,7 +19950,6 @@ packages:
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
- dev: true
/next@13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==}
@@ -19984,7 +19998,7 @@ packages:
next: '*'
dependencies:
chokidar: 3.5.3
- next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
+ next: 13.4.19(@babel/core@7.22.15)(react-dom@18.2.0)(react@18.2.0)
dev: false
/nice-try@1.0.5:
From a097aa01e619fd07d15bf0aa6c1bc683d04d079b Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Fri, 8 Sep 2023 16:09:21 -0400
Subject: [PATCH 046/131] error state handling WIP
---
.../data-portal/PhoneNumberEntry.stories.tsx | 5 +-
.../data-portal/PhoneNumberEntryHookForm.tsx | 134 +++++++++++++-----
2 files changed, 101 insertions(+), 38 deletions(-)
diff --git a/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx b/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
index 5d3643c2ed..c239280b00 100644
--- a/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
+++ b/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
@@ -24,7 +24,9 @@ const HookFormContextDecorator = (Story: StoryFn) => {
const form = useHookForm()
return (
-
+
)
}
@@ -33,6 +35,7 @@ export default {
component: PhoneNumberEntry,
parameters: {
msw: [fieldOpt.countries],
+ rqDevtools: true,
},
} satisfies Meta
diff --git a/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx b/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
index 1870c5ec4c..3a295e655e 100644
--- a/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
+++ b/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
@@ -1,10 +1,19 @@
-import { createStyles, Group, rem, Text } from '@mantine/core'
-import { AsYouType, type CountryCode } from 'libphonenumber-js'
-import { type ComponentPropsWithoutRef, forwardRef, useEffect, useState } from 'react'
-import { type FieldValues, useFormContext, useWatch } from 'react-hook-form'
-import { Select, type SelectProps, TextInput, type TextInputProps } from 'react-hook-form-mantine'
-import PhoneInput, { parsePhoneNumber, type Props as PhoneInputProps } from 'react-phone-number-input/input'
-import { type SetOptional } from 'type-fest'
+import { DevTool } from '@hookform/devtools'
+import { ErrorMessage } from '@hookform/error-message'
+import { createStyles, Group, rem, Text, TextInput, type TextInputProps } from '@mantine/core'
+import { AsYouType } from 'libphonenumber-js'
+import { type ComponentPropsWithoutRef, forwardRef, useEffect, useMemo } from 'react'
+import { type FieldValues, type Path, useFormContext, useFormState } from 'react-hook-form'
+import {
+ Select,
+ type SelectProps,
+ // TextInput,
+ // type TextInputProps,
+} from 'react-hook-form-mantine'
+import PhoneInput, {
+ // parsePhoneNumber,
+ type Props as PhoneInputProps,
+} from 'react-phone-number-input/react-hook-form-input'
import { type ApiOutput } from '@weareinreach/api'
import { isCountryCode } from '~ui/hooks/usePhoneNumber'
@@ -16,8 +25,10 @@ const PhoneCountrySelectItem = forwardRef {
const { name } = data
return (
-
- {`${label} ${name}`}
+
+ {label}
+ {name}
+ {/* {`${label} ${name}`} */}
)
}
@@ -26,7 +37,7 @@ PhoneCountrySelectItem.displayName = 'PhoneCountrySelectItem'
const useCountrySelectStyles = createStyles((theme) => ({
dropdown: {
- width: 'fit-content !important',
+ width: 'max-content !important',
left: 'unset !important',
// right: 0,
},
@@ -57,16 +68,16 @@ export const PhoneNumberEntry = ({
const form = useFormContext()
// const selectedCountry = useWatch({control: countrySelectProps.control, name: countrySelectProps.name})
const selectedCountry = form.watch(countrySelectProps.name)
+ const phoneNumber = form.watch(allPhoneEntryProps.name)
// const [selectedCountry, setSelectedCountry] = useState()
const { classes: countrySelectClasses } = useCountrySelectStyles()
const { classes: phoneEntryClasses } = usePhoneEntryStyles()
const {
setError: setPhoneError,
- value: phoneValue,
- onChange: onPhoneChange,
+ // value: phoneValue,
+ // onChange: onPhoneChange,
...phoneEntryProps
} = allPhoneEntryProps
-
const topCountries = ['US', 'CA', 'MX']
const { data: countryList } = api.fieldOpt.countries.useQuery(
@@ -90,7 +101,13 @@ export const PhoneNumberEntry = ({
}),
}
)
- const phoneFormatter = new AsYouType(selectedCountry)
+ const activeCountry = useMemo(() => {
+ const result = countryList?.find(({ value }) => value === selectedCountry)?.data.cca2
+ if (result && isCountryCode(result)) return result
+ return undefined
+ }, [selectedCountry, countryList])
+
+ const phoneFormatter = new AsYouType(activeCountry)
// useEffect(() => {
// const { data } = countryList.find(({ value }) => value === countrySelectProps.value) ?? {}
// if (data?.cca2 && isCountryCode(data.cca2)) setSelectedCountry(data.cca2)
@@ -99,23 +116,45 @@ export const PhoneNumberEntry = ({
// }, [countrySelectProps.value])
useEffect(() => {
- if (phoneValue) {
- phoneFormatter.input(phoneValue)
+ if (phoneNumber) {
+ phoneFormatter.input(phoneNumber)
const phoneCountry = phoneFormatter.getNumber()?.country
- if (phoneCountry && phoneCountry !== selectedCountry) {
+
+ console.log(
+ `🚀 ~ file: PhoneNumberEntryHookForm.tsx:124 ~ useEffect ~ phoneCountry/selectedCountry:`,
+ phoneCountry,
+ selectedCountry
+ )
+ const formError = form.formState.errors
+ console.log(formError)
+ if ((!phoneCountry && !selectedCountry) || phoneCountry !== selectedCountry) {
const countryId = countryList.find(({ data }) => data.cca2 === phoneCountry)?.value
+
if (countryId) {
+ console.log('setting countryId')
+ // @ts-expect-error -> string is okay.
form.setValue(countrySelectProps.name, countryId)
if (countrySelectProps.onChange && typeof countrySelectProps.onChange === 'function') {
countrySelectProps.onChange(countryId)
}
- } else if (typeof setPhoneError === 'function') {
- setPhoneError(`Country not active: ${phoneCountry}`)
+ } else if (!phoneCountry && formError[phoneEntryProps.name]) {
+ console.log('clearing error')
+ form.resetField(countrySelectProps.name)
+ form.clearErrors(phoneEntryProps.name)
+ // // @ts-expect-error -> null is okay.
+ // form.setValue(countrySelectProps.name, null)
+ } else if (phoneCountry && !countryId) {
+ console.log('setting error')
+ form.setError(
+ phoneEntryProps.name,
+ { message: `Country not active: ${phoneCountry}` },
+ { shouldFocus: true }
+ )
}
}
}
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [phoneValue])
+ }, [phoneNumber])
const countrySelection = (
)
}
@@ -66,18 +57,11 @@ export const PhoneNumberEntry = ({
phoneEntryProps: allPhoneEntryProps,
}: PhoneNumberEntryProps) => {
const form = useFormContext()
- // const selectedCountry = useWatch({control: countrySelectProps.control, name: countrySelectProps.name})
const selectedCountry = form.watch(countrySelectProps.name)
const phoneNumber = form.watch(allPhoneEntryProps.name)
- // const [selectedCountry, setSelectedCountry] = useState()
const { classes: countrySelectClasses } = useCountrySelectStyles()
const { classes: phoneEntryClasses } = usePhoneEntryStyles()
- const {
- setError: setPhoneError,
- // value: phoneValue,
- // onChange: onPhoneChange,
- ...phoneEntryProps
- } = allPhoneEntryProps
+ const { setError: setPhoneError, ...phoneEntryProps } = allPhoneEntryProps
const topCountries = ['US', 'CA', 'MX']
const { data: countryList } = api.fieldOpt.countries.useQuery(
@@ -108,43 +92,25 @@ export const PhoneNumberEntry = ({
}, [selectedCountry, countryList])
const phoneFormatter = new AsYouType(activeCountry)
- // useEffect(() => {
- // const { data } = countryList.find(({ value }) => value === countrySelectProps.value) ?? {}
- // if (data?.cca2 && isCountryCode(data.cca2)) setSelectedCountry(data.cca2)
- // else if (data === undefined) setSelectedCountry(undefined)
- // // eslint-disable-next-line react-hooks/exhaustive-deps
- // }, [countrySelectProps.value])
useEffect(() => {
if (phoneNumber) {
phoneFormatter.input(phoneNumber)
const phoneCountry = phoneFormatter.getNumber()?.country
-
- console.log(
- `🚀 ~ file: PhoneNumberEntryHookForm.tsx:124 ~ useEffect ~ phoneCountry/selectedCountry:`,
- phoneCountry,
- selectedCountry
- )
const formError = form.formState.errors
- console.log(formError)
if ((!phoneCountry && !selectedCountry) || phoneCountry !== selectedCountry) {
const countryId = countryList.find(({ data }) => data.cca2 === phoneCountry)?.value
if (countryId) {
- console.log('setting countryId')
// @ts-expect-error -> string is okay.
form.setValue(countrySelectProps.name, countryId)
if (countrySelectProps.onChange && typeof countrySelectProps.onChange === 'function') {
countrySelectProps.onChange(countryId)
}
} else if (!phoneCountry && formError[phoneEntryProps.name]) {
- console.log('clearing error')
form.resetField(countrySelectProps.name)
form.clearErrors(phoneEntryProps.name)
- // // @ts-expect-error -> null is okay.
- // form.setValue(countrySelectProps.name, null)
} else if (phoneCountry && !countryId) {
- console.log('setting error')
form.setError(
phoneEntryProps.name,
{ message: `Country not active: ${phoneCountry}` },
@@ -176,26 +142,7 @@ export const PhoneNumberEntry = ({
rightSection={countrySelection}
rightSectionWidth={56}
classNames={phoneEntryClasses}
- // value={parsePhoneNumber(String(phoneValue), DEFAULT_COUNTRY)?.number}
- // onChange={(e) =>
- // onPhoneChange && typeof onPhoneChange === 'function' ? onPhoneChange(e) : undefined
- // }
control={form.control}
- // error={form.getFieldState(phoneEntryProps.name).error?.message}
- // rules={{
- // validate: (val) => {
- // if (val) {
- // const formatter = phoneFormatter.input(val)
- // console.log('formatter', formatter)
- // }
- // const derivedCountry = phoneFormatter.getNumber()?.country
- // console.log('val', val)
- // console.log('derivedCountry', derivedCountry)
- // const result = !!countryList.find(({ data }) => data.cca2 === phoneFormatter.getNumber()?.country)
- // console.log('validator result', result)
- // return result
- // },
- // }}
// @ts-expect-error -> name prop is okay.
error={}
{...phoneEntryProps}
From 46d57d0313da508c8ebefe18a00915ef42c1199c Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 25 Sep 2023 14:23:17 -0400
Subject: [PATCH 055/131] move in to folder
---
.../index.stories.tsx} | 0
.../{PhoneNumberEntry.tsx => PhoneNumberEntry/index.tsx} | 0
.../withHookForm.tsx} | 0
3 files changed, 0 insertions(+), 0 deletions(-)
rename packages/ui/components/data-portal/{PhoneNumberEntry.stories.tsx => PhoneNumberEntry/index.stories.tsx} (100%)
rename packages/ui/components/data-portal/{PhoneNumberEntry.tsx => PhoneNumberEntry/index.tsx} (100%)
rename packages/ui/components/data-portal/{PhoneNumberEntryHookForm.tsx => PhoneNumberEntry/withHookForm.tsx} (100%)
diff --git a/packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx b/packages/ui/components/data-portal/PhoneNumberEntry/index.stories.tsx
similarity index 100%
rename from packages/ui/components/data-portal/PhoneNumberEntry.stories.tsx
rename to packages/ui/components/data-portal/PhoneNumberEntry/index.stories.tsx
diff --git a/packages/ui/components/data-portal/PhoneNumberEntry.tsx b/packages/ui/components/data-portal/PhoneNumberEntry/index.tsx
similarity index 100%
rename from packages/ui/components/data-portal/PhoneNumberEntry.tsx
rename to packages/ui/components/data-portal/PhoneNumberEntry/index.tsx
diff --git a/packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx b/packages/ui/components/data-portal/PhoneNumberEntry/withHookForm.tsx
similarity index 100%
rename from packages/ui/components/data-portal/PhoneNumberEntryHookForm.tsx
rename to packages/ui/components/data-portal/PhoneNumberEntry/withHookForm.tsx
From b147b4376897d0d006f9d67e71f937294038ef64 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 25 Sep 2023 19:49:15 -0400
Subject: [PATCH 056/131] dep for json -> csv conversion
---
packages/db/package.json | 2 ++
pnpm-lock.yaml | 16 ++++++++++++++++
2 files changed, 18 insertions(+)
diff --git a/packages/db/package.json b/packages/db/package.json
index 5a0efa3419..be97b911e5 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -69,6 +69,7 @@
"@types/inquirer-autocomplete-prompt": "3.0.0",
"@types/luxon": "3.3.2",
"@types/node": "18.17.19",
+ "@types/papaparse": "5.3.9",
"@types/pg": "8.10.3",
"@types/terraformer__wkt": "2.0.0",
"@weareinreach/config": "workspace:*",
@@ -82,6 +83,7 @@
"kysely-codegen": "0.10.1",
"listr2": "7.0.1",
"luxon": "3.4.3",
+ "papaparse": "5.4.1",
"prettier": "3.0.3",
"pretty-bytes": "6.1.1",
"pretty-ms": "8.0.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c63a63770a..5b2efbb5f6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -988,6 +988,9 @@ importers:
'@types/node':
specifier: 18.17.19
version: 18.17.19
+ '@types/papaparse':
+ specifier: 5.3.9
+ version: 5.3.9
'@types/pg':
specifier: 8.10.3
version: 8.10.3
@@ -1027,6 +1030,9 @@ importers:
luxon:
specifier: 3.4.3
version: 3.4.3
+ papaparse:
+ specifier: 5.4.1
+ version: 5.4.1
prettier:
specifier: 3.0.3
version: 3.0.3
@@ -10237,6 +10243,12 @@ packages:
/@types/object.pick@1.3.2:
resolution: {integrity: sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==}
+ /@types/papaparse@5.3.9:
+ resolution: {integrity: sha512-sZcrKD63qA4/6GyBcVvX6AIp0AkpfyYk00CUQHMBvb4+OVXTZWyXUvidUZaai1wyKUVyJoxO7mgREam/pMRrDw==}
+ dependencies:
+ '@types/node': 18.17.19
+ dev: true
+
/@types/parse-json@4.0.0:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
@@ -19935,6 +19947,10 @@ packages:
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
dev: true
+ /papaparse@5.4.1:
+ resolution: {integrity: sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw==}
+ dev: true
+
/param-case@2.1.1:
resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
dependencies:
From c0ab1caf29c13566716bc47db7d8dc5a5e1f92a8 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 25 Sep 2023 19:49:47 -0400
Subject: [PATCH 057/131] api routes/mock data
---
.../orgPhone/mutation.update.handler.ts | 54 ++++++++++++-------
.../router/orgPhone/mutation.update.schema.ts | 32 +++++------
.../orgPhone/query.forEditDrawer.handler.ts | 18 +++++--
packages/ui/mockData/orgPhone.ts | 34 +++++++-----
4 files changed, 84 insertions(+), 54 deletions(-)
diff --git a/packages/api/router/orgPhone/mutation.update.handler.ts b/packages/api/router/orgPhone/mutation.update.handler.ts
index ec6e18ef0e..41540bd025 100644
--- a/packages/api/router/orgPhone/mutation.update.handler.ts
+++ b/packages/api/router/orgPhone/mutation.update.handler.ts
@@ -1,27 +1,43 @@
-import { prisma } from '@weareinreach/db'
-import { CreateAuditLog } from '~api/schemas/create/auditLog'
+import { generateFreeText, getAuditedClient } from '@weareinreach/db'
import { type TRPCHandlerParams } from '~api/types/handler'
import { type TUpdateSchema } from './mutation.update.schema'
export const update = async ({ ctx, input }: TRPCHandlerParams) => {
- const { where, data } = input
- const updatedRecord = await prisma.$transaction(async (tx) => {
- const current = await tx.orgPhone.findUniqueOrThrow({ where })
- const auditLogs = CreateAuditLog({
- actorId: ctx.session.user.id,
- operation: 'UPDATE',
- from: current,
- to: data,
- })
- const updated = await tx.orgPhone.update({
- where,
- data: {
- ...data,
- auditLogs,
- },
- })
- return updated
+ const prisma = getAuditedClient(ctx.actorId)
+ const { id, orgId, description, countryId, phoneTypeId, ...rest } = input
+
+ const textData = description
+ ? generateFreeText({ orgId, type: 'phoneDesc', text: description, itemId: id })
+ : undefined
+
+ const updatedRecord = await prisma.orgPhone.update({
+ where: { id },
+ data: {
+ ...rest,
+ ...(textData
+ ? {
+ description: {
+ upsert: {
+ create: {
+ id: textData.freeText.id,
+ tsKey: {
+ connectOrCreate: {
+ where: { ns_key: { ns: textData.translationKey.ns, key: textData.translationKey.key } },
+ create: textData.translationKey,
+ },
+ },
+ },
+ update: { tsKey: { update: { text: textData.translationKey.text } } },
+ },
+ },
+ }
+ : description === null
+ ? { description: { delete: true } }
+ : {}),
+ ...(countryId ? { country: { connect: { id: countryId } } } : {}),
+ ...(phoneTypeId ? { phoneType: { connect: { id: phoneTypeId } } } : {}),
+ },
})
return updatedRecord
}
diff --git a/packages/api/router/orgPhone/mutation.update.schema.ts b/packages/api/router/orgPhone/mutation.update.schema.ts
index 42090693c9..6a29fa0ca8 100644
--- a/packages/api/router/orgPhone/mutation.update.schema.ts
+++ b/packages/api/router/orgPhone/mutation.update.schema.ts
@@ -1,23 +1,19 @@
import { z } from 'zod'
-import { Prisma } from '@weareinreach/db'
import { prefixedId } from '~api/schemas/idPrefix'
-export const ZUpdateSchema = z
- .object({
- id: prefixedId('orgPhone'),
- data: z
- .object({
- number: z.string(),
- ext: z.string(),
- primary: z.boolean(),
- published: z.boolean(),
- deleted: z.boolean(),
- countryId: prefixedId('country'),
- phoneTypeId: prefixedId('phoneType'),
- locationOnly: z.boolean(),
- })
- .partial(),
- })
- .transform(({ data, id }) => Prisma.validator()({ where: { id }, data }))
+export const ZUpdateSchema = z.object({
+ id: prefixedId('orgPhone'),
+ orgId: prefixedId('organization'),
+ number: z.string().optional(),
+ ext: z.string().nullish(),
+ primary: z.boolean().optional(),
+ published: z.boolean().optional(),
+ deleted: z.boolean().optional(),
+ countryId: prefixedId('country').optional(),
+ phoneTypeId: prefixedId('phoneType').nullish(),
+ locationOnly: z.boolean().optional(),
+ serviceOnly: z.boolean().optional(),
+ description: z.string().nullish(),
+})
export type TUpdateSchema = z.infer
diff --git a/packages/api/router/orgPhone/query.forEditDrawer.handler.ts b/packages/api/router/orgPhone/query.forEditDrawer.handler.ts
index 71321d2267..643ee9a5e8 100644
--- a/packages/api/router/orgPhone/query.forEditDrawer.handler.ts
+++ b/packages/api/router/orgPhone/query.forEditDrawer.handler.ts
@@ -8,13 +8,25 @@ export const forEditDrawer = async ({ input }: TRPCHandlerParams
@@ -314,6 +315,11 @@ export const orgPhone = {
type: 'mutation',
response: (input) => [],
}),
+ update: getTRPCMock({
+ path: ['orgPhone', 'update'],
+ type: 'mutation',
+ response: (input) => {},
+ }),
forContactInfo: getTRPCMock({
path: ['orgPhone', 'forContactInfo'],
type: 'query',
From 5b40c4fe77dc6036d9ec6cc1ba979f76df578603 Mon Sep 17 00:00:00 2001
From: Joe Karow <58997957+JoeKarow@users.noreply.github.com>
Date: Mon, 25 Sep 2023 19:59:35 -0400
Subject: [PATCH 058/131] move to dir, rework hook form
---
.../ui/components/data-portal/PhoneDrawer.tsx | 44 +++-
.../PhoneNumberEntry/CountrySelectItem.tsx | 24 ++
.../PhoneNumberEntry/index.stories.tsx | 25 ++-
.../data-portal/PhoneNumberEntry/lib.ts | 19 ++
.../data-portal/PhoneNumberEntry/styles.ts | 27 +++
.../PhoneNumberEntry/withHookForm.tsx | 212 ++++++++----------
6 files changed, 222 insertions(+), 129 deletions(-)
create mode 100644 packages/ui/components/data-portal/PhoneNumberEntry/CountrySelectItem.tsx
create mode 100644 packages/ui/components/data-portal/PhoneNumberEntry/lib.ts
create mode 100644 packages/ui/components/data-portal/PhoneNumberEntry/styles.ts
diff --git a/packages/ui/components/data-portal/PhoneDrawer.tsx b/packages/ui/components/data-portal/PhoneDrawer.tsx
index 055591bdba..7168abcd9f 100644
--- a/packages/ui/components/data-portal/PhoneDrawer.tsx
+++ b/packages/ui/components/data-portal/PhoneDrawer.tsx
@@ -20,6 +20,7 @@ import { z } from 'zod'
import { Breadcrumb } from '~ui/components/core/Breadcrumb'
import { Button } from '~ui/components/core/Button'
+import { PhoneNumberEntry } from '~ui/components/data-portal/PhoneNumberEntry/withHookForm'
import { Icon } from '~ui/icon'
import { trpc as api } from '~ui/lib/trpcClient'
@@ -31,14 +32,35 @@ const useStyles = createStyles((theme) => ({
}))
const FormSchema = z.object({
- url: z.string().url(),
- description: z.string().optional(),
+ id: z.string().nullish(),
+ number: z.string(),
+ ext: z.string().nullish(),
+ primary: z.boolean(),
published: z.boolean(),
deleted: z.boolean(),
+ country: z.object({
+ id: z.string(),
+ cca2: z.string(),
+ }),
+ phoneType: z
+ .object({
+ id: z.string(),
+ type: z.string(),
+ })
+ .nullish(),
+ description: z
+ .object({
+ id: z.string(),
+ key: z.string(),
+ text: z.string(),
+ })
+ .nullish(),
+ locationOnly: z.boolean(),
+ serviceOnly: z.boolean(),
})
type FormSchema = z.infer
const _PhoneDrawer = forwardRef(({ id, ...props }, ref) => {
- const { data, isFetching } = api.orgWebsite.forEditDrawer.useQuery({ id })
+ const { data, isFetching } = api.orgPhone.forEditDrawer.useQuery({ id })
const [drawerOpened, drawerHandler] = useDisclosure(true)
const [modalOpened, modalHandler] = useDisclosure(false)
const { classes } = useStyles()
@@ -48,9 +70,9 @@ const _PhoneDrawer = forwardRef(({ id, ...p
defaultValues: data,
})
const apiUtils = api.useContext()
- const siteUpdate = api.orgWebsite.update.useMutation({
+ const siteUpdate = api.orgPhone.update.useMutation({
onSettled: (data) => {
- apiUtils.orgWebsite.forContactInfo.invalidate()
+ apiUtils.orgPhone.forEditDrawer.invalidate()
reset(data)
},
})
@@ -70,7 +92,7 @@ const _PhoneDrawer = forwardRef(({ id, ...p