terrier-engine 4.31.0 → 4.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,7 @@ import Arrays from "tuff-core/arrays"
20
20
  import {FormFields} from "tuff-core/forms"
21
21
  import Fragments from "../../terrier/fragments"
22
22
  import {DiveDeliveryForm} from "./dive-delivery"
23
- import {DivePlotsForm} from "../plots/dive-plots"
23
+ import DivePlotList from "../plots/dive-plot-list"
24
24
 
25
25
  const log = new Logger("DiveEditor")
26
26
 
@@ -42,7 +42,7 @@ export default class DiveEditor extends ContentPart<DiveEditorState> {
42
42
 
43
43
  deliveryForm!: DiveDeliveryForm
44
44
 
45
- plotsForm!: DivePlotsForm
45
+ plotList!: DivePlotList
46
46
 
47
47
  newQueryKey = Messages.untypedKey()
48
48
  duplicateQueryKey = Messages.untypedKey()
@@ -121,7 +121,7 @@ export default class DiveEditor extends ContentPart<DiveEditorState> {
121
121
 
122
122
  this.deliveryForm = this.settingsTabs.upsertTab({key: 'delivery', title: "Delivery", icon: "glyp-email"}, DiveDeliveryForm, this.state)
123
123
 
124
- this.plotsForm = this.settingsTabs.upsertTab({key: 'plots', title: "Plots", icon: "glyp-differential"}, DivePlotsForm, this.state)
124
+ this.plotList = this.settingsTabs.upsertTab({key: 'plots', title: "Plots", icon: "glyp-differential"}, DivePlotList, this.state)
125
125
  }
126
126
 
127
127
  /**
@@ -0,0 +1,92 @@
1
+ import { PartTag } from "tuff-core/parts"
2
+ import {ModalPart} from "../../terrier/modals"
3
+ import {DiveEditorState} from "../dives/dive-editor"
4
+ import {UnpersistedDdDivePlot} from "../gen/models"
5
+ import {TerrierFormFields} from "../../terrier/forms"
6
+ import {DivePlotTrace} from "./dive-plots"
7
+ import Messages from "tuff-core/messages"
8
+ import {Logger} from "tuff-core/logging"
9
+ import DivePlotList from "./dive-plot-list"
10
+ import Db from "../dd-db"
11
+ import DivePlotRenderPart from "./dive-plot-render-part"
12
+
13
+ const log = new Logger("DivePlotList")
14
+
15
+ export type DivePlotEditorState = DiveEditorState & {
16
+ plot: UnpersistedDdDivePlot
17
+ }
18
+
19
+
20
+
21
+ export default class DivePlotEditor extends ModalPart<DivePlotEditorState> {
22
+
23
+ plot!: UnpersistedDdDivePlot
24
+ fields!: TerrierFormFields<UnpersistedDdDivePlot>
25
+ traces: DivePlotTrace[] = []
26
+ renderPart!: DivePlotRenderPart
27
+ saveKey = Messages.untypedKey()
28
+
29
+ async init() {
30
+ this.plot = this.state.plot
31
+
32
+ if (this.plot.id?.length) {
33
+ this.setTitle("Edit Dive Plot")
34
+ }
35
+ else {
36
+ this.setTitle("New Dive Plot")
37
+ }
38
+ this.setIcon("hub-plot")
39
+
40
+ this.fields = new TerrierFormFields<UnpersistedDdDivePlot>(this, this.plot)
41
+
42
+ this.traces = this.plot.traces || []
43
+
44
+ this.renderPart = this.makePart(DivePlotRenderPart, this.state)
45
+
46
+ this.addAction({
47
+ title: "Save",
48
+ icon: "hub-checkmark",
49
+ click: {key: this.saveKey}
50
+ })
51
+
52
+ this.onClick(this.saveKey, _ => {
53
+ log.debug("Saving plot", this.plot)
54
+ this.save()
55
+ })
56
+ }
57
+
58
+ renderContent(parent: PartTag): void {
59
+ parent.div(".tt-flex.column.padded.gap", mainColumn => {
60
+ this.fields.compoundField(mainColumn, field => {
61
+ field.label(".required").text("Title")
62
+ this.fields.textInput(field, 'title')
63
+ })
64
+
65
+ mainColumn.part(this.renderPart)
66
+
67
+ mainColumn.h3(".glyp-items").text("Traces")
68
+
69
+ })
70
+ }
71
+
72
+ async save() {
73
+ const plotData = await this.fields.serialize()
74
+ const plot = {...this.plot, title: plotData.title}
75
+ log.info("Saving plot", plot)
76
+
77
+ const res = await Db().upsert('dd_dive_plot', plot)
78
+ if (res.status == 'success') {
79
+ this.state.plot = res.record
80
+ this.emitMessage(DivePlotList.reloadKey, {})
81
+ this.successToast("Successfully Saved Plot")
82
+ return this.pop()
83
+ }
84
+
85
+ // errors
86
+ log.warn("Error saving plot", res)
87
+ this.alertToast(res.message)
88
+
89
+ }
90
+ }
91
+
92
+
@@ -0,0 +1,107 @@
1
+ import TerrierPart from "../../terrier/parts/terrier-part"
2
+ import {DiveEditorState} from "../dives/dive-editor"
3
+ import {PartTag} from "tuff-core/parts"
4
+ import {DdDivePlot, UnpersistedDdDivePlot} from "../gen/models"
5
+ import DivePlots from "./dive-plots"
6
+ import Fragments from "../../terrier/fragments"
7
+ import Messages from "tuff-core/messages"
8
+ import {Logger} from "tuff-core/logging"
9
+ import DivePlotEditor from "./dive-plot-editor"
10
+ import DivePlotRenderPart, {DivePlotRenderState} from "./dive-plot-render-part"
11
+
12
+ const log = new Logger("DivePlotList")
13
+
14
+ const editKey = Messages.typedKey<{ id: string }>()
15
+
16
+ class DivePlotPreview extends TerrierPart<DivePlotRenderState> {
17
+
18
+ renderPart!: DivePlotRenderPart
19
+
20
+ async init() {
21
+ this.renderPart = this.makePart(DivePlotRenderPart, this.state)
22
+ }
23
+
24
+ get parentClasses(): Array<string> {
25
+ return ['dd-dive-plot-preview']
26
+ }
27
+
28
+ render(parent: PartTag) {
29
+ parent.h3(".plot-title", title => {
30
+ title.i('.shrink.icon-only.glyp-differential')
31
+ title.div('.text-center.stretch').text(this.state.plot.title)
32
+ title.a('.glyp-settings.icon-only')
33
+ .data({tooltip: "Edit this plot"})
34
+ .emitClick(editKey, {id: this.state.plot.id})
35
+ })
36
+ parent.part(this.renderPart)
37
+ }
38
+ }
39
+
40
+ /**
41
+ * A list of plots.
42
+ */
43
+ export default class DivePlotList extends TerrierPart<DiveEditorState> {
44
+
45
+ newKey = Messages.untypedKey()
46
+ static reloadKey = Messages.untypedKey()
47
+
48
+ plots!: DdDivePlot[]
49
+
50
+ get parentClasses(): Array<string> {
51
+ return ['dd-dive-plot-list', 'tt-flex', 'column', 'gap', 'dd-dive-tool', 'tt-typography']
52
+ }
53
+
54
+ async init() {
55
+ await this.reload()
56
+
57
+ this.onClick(this.newKey, _ => {
58
+ log.debug("New Plot")
59
+ const plot: UnpersistedDdDivePlot = {
60
+ title: this.state.dive.name,
61
+ dd_dive_id: this.state.dive.id,
62
+ layout: {},
63
+ traces: []
64
+ }
65
+ this.app.showModal(DivePlotEditor, {...this.state, plot})
66
+ })
67
+
68
+ this.onClick(editKey, m => {
69
+ const id = m.data.id
70
+ log.info(`Editing plot ${id}`)
71
+ const plot: UnpersistedDdDivePlot | undefined = this.plots.filter(p => p.id === id)[0]
72
+ if (plot) {
73
+ this.app.showModal(DivePlotEditor, {...this.state, plot})
74
+ }
75
+ else {
76
+ log.warn(`Couldn't find a plot with id=${id}`)
77
+ }
78
+ })
79
+
80
+ this.listenMessage(DivePlotList.reloadKey, _ => {
81
+ log.info("Reloading...")
82
+ this.reload().then(() => {
83
+ log.info("Reloaded from an external message")
84
+ })
85
+ }, {attach: 'passive'})
86
+
87
+ this.dirty()
88
+ }
89
+
90
+ async reload() {
91
+ log.info("Reloading")
92
+ this.plots = await DivePlots.get(this.state.dive)
93
+
94
+ const plotStates = this.plots.map((plot) => {return {...this.state, plot}})
95
+ this.assignCollection("plots", DivePlotPreview, plotStates)
96
+
97
+ this.dirty()
98
+ }
99
+
100
+ render(parent: PartTag): any {
101
+ this.renderCollection(parent, "plots")
102
+
103
+ Fragments.button(parent, this.theme, "New Plot", "hub-plus", "secondary")
104
+ .emitClick(this.newKey)
105
+ }
106
+
107
+ }
@@ -0,0 +1,23 @@
1
+ import TerrierPart from "../../terrier/parts/terrier-part"
2
+ import {PartTag} from "tuff-core/parts"
3
+ import {DivePlotEditorState} from "./dive-plot-editor"
4
+ import {UnpersistedDdDivePlot} from "../gen/models"
5
+
6
+ export type DivePlotRenderState = DivePlotEditorState & {
7
+ plot: UnpersistedDdDivePlot
8
+ }
9
+
10
+ /**
11
+ * Actually renders a dive plot.
12
+ */
13
+ export default class DivePlotRenderPart extends TerrierPart<DivePlotRenderState> {
14
+
15
+
16
+ get parentClasses(): Array<string> {
17
+ return ['dd-dive-plot-render']
18
+ }
19
+
20
+ render(parent: PartTag) {
21
+ parent.div().text(`${this.state.plot.title} Render`)
22
+ }
23
+ }
@@ -1,10 +1,12 @@
1
- import TerrierFormPart from "../../terrier/parts/terrier-form-part"
2
- import {DiveEditorState} from "../dives/dive-editor"
3
- import {PartTag} from "tuff-core/parts"
1
+
4
2
  import {MarkerStyle, TraceStyle, TraceType, YAxisName} from "tuff-plot/trace"
5
3
  import {PlotLayout} from "tuff-plot/layout"
4
+ import {DdDive, DdDivePlot} from "../gen/models"
5
+ import Db from "../dd-db"
6
6
 
7
-
7
+ /**
8
+ * Similar to the tuff-plot Trace but not strongly typed to the data type since it's dynamically assigned to a query.
9
+ */
8
10
  export type DivePlotTrace = {
9
11
  id: string
10
12
  type: TraceType
@@ -20,10 +22,19 @@ export type DivePlotTrace = {
20
22
  // maybe we'll add more in the future
21
23
  export type DivePlotLayout = PlotLayout
22
24
 
25
+ /**
26
+ * Get all plots for the given dive.
27
+ * @param dive
28
+ */
29
+ async function get(dive: DdDive): Promise<DdDivePlot[]> {
30
+ return await Db().query('dd_dive_plot')
31
+ .where({dd_dive_id: dive.id, _state: 0})
32
+ .orderBy("title ASC")
33
+ .exec()
34
+ }
23
35
 
24
- export class DivePlotsForm extends TerrierFormPart<DiveEditorState> {
25
- render(parent: PartTag): any {
26
- parent.h3(".coming-soon.glyp-developer").text("Coming Soon")
27
- }
28
36
 
29
- }
37
+ const DivePlots = {
38
+ get
39
+ }
40
+ export default DivePlots
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "files": [
5
5
  "*"
6
6
  ],
7
- "version": "4.31.0",
7
+ "version": "4.32.0",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "https://github.com/Terrier-Tech/terrier-engine"
package/terrier/forms.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import {Field, FormFields, FormPartData, InputType, KeyOfType, SelectOptions} from "tuff-core/forms"
2
2
  import {DbErrors} from "./db-client"
3
3
  import {PartTag} from "tuff-core/parts"
4
- import {InputTag, InputTagAttrs, SelectTag, SelectTagAttrs, TextAreaTag, TextAreaTagAttrs} from "tuff-core/html"
4
+ import {DivTag, InputTag, InputTagAttrs, SelectTag, SelectTagAttrs, TextAreaTag, TextAreaTagAttrs} from "tuff-core/html"
5
5
  import TerrierPart from "./parts/terrier-part"
6
6
  import GlypPicker from "./parts/glyp-picker"
7
7
  import Glyps from "./glyps"
@@ -55,7 +55,7 @@ function titleizeOptions(opts: readonly string[], blank?: string): SelectOptions
55
55
  ////////////////////////////////////////////////////////////////////////////////
56
56
 
57
57
  /**
58
- * Override regular `FormFields` methods to include validation errors.
58
+ * Override regular `FormFields` methods to include validation errors and optional compound fields.
59
59
  */
60
60
  export class TerrierFormFields<T extends FormPartData> extends FormFields<T> {
61
61
 
@@ -141,6 +141,20 @@ export class TerrierFormFields<T extends FormPartData> extends FormFields<T> {
141
141
  }
142
142
  }).emitClick(this.pickGlypKey, {key})
143
143
  }
144
+
145
+
146
+ /**
147
+ * Creates a .tt-compound-field tag and passes the field to the nested function.
148
+ * I suppose it's just a slight convenience over having `parent.div(".tt-compound-field"...` everywhere.
149
+ * @param parent
150
+ * @param fun a function that accepts the field as an argument, to actually populate the field
151
+ */
152
+ compoundField(parent: PartTag, fun: (field: DivTag) => any) {
153
+ parent.div(".tt-compound-field", field => {
154
+ fun(field)
155
+ })
156
+ }
157
+
144
158
  }
145
159
 
146
160
 
@@ -1,4 +1,4 @@
1
- // This file was automatically generated on 2024-07-11 09:04:26 -0500, DO NOT EDIT IT MANUALLY!
1
+ // This file was automatically generated on 2024-07-18 14:22:23 -0500, DO NOT EDIT IT MANUALLY!
2
2
 
3
3
  import {ColorName} from "../theme"
4
4
  import {PartTag} from "tuff-core/parts"
@@ -209,6 +209,10 @@ import LevelParkingRaw from '../images/icons/level_parking.svg?raw'
209
209
  // @ts-ignore
210
210
  import LevelParkingSrc from '../images/icons/level_parking.svg'
211
211
  // @ts-ignore
212
+ import LinkRaw from '../images/icons/link.svg?raw'
213
+ // @ts-ignore
214
+ import LinkSrc from '../images/icons/link.svg'
215
+ // @ts-ignore
212
216
  import ListViewRaw from '../images/icons/list_view.svg?raw'
213
217
  // @ts-ignore
214
218
  import ListViewSrc from '../images/icons/list_view.svg'
@@ -241,6 +245,10 @@ import PendingRaw from '../images/icons/pending.svg?raw'
241
245
  // @ts-ignore
242
246
  import PendingSrc from '../images/icons/pending.svg'
243
247
  // @ts-ignore
248
+ import PlotRaw from '../images/icons/plot.svg?raw'
249
+ // @ts-ignore
250
+ import PlotSrc from '../images/icons/plot.svg'
251
+ // @ts-ignore
244
252
  import PlusRaw from '../images/icons/plus.svg?raw'
245
253
  // @ts-ignore
246
254
  import PlusSrc from '../images/icons/plus.svg'
@@ -594,6 +602,10 @@ export const IconDefs: Record<HubIconName,{ raw: string, src: string }> = {
594
602
  raw: LevelParkingRaw,
595
603
  src: LevelParkingSrc,
596
604
  },
605
+ "hub-link": {
606
+ raw: LinkRaw,
607
+ src: LinkSrc,
608
+ },
597
609
  "hub-list_view": {
598
610
  raw: ListViewRaw,
599
611
  src: ListViewSrc,
@@ -626,6 +638,10 @@ export const IconDefs: Record<HubIconName,{ raw: string, src: string }> = {
626
638
  raw: PendingRaw,
627
639
  src: PendingSrc,
628
640
  },
641
+ "hub-plot": {
642
+ raw: PlotRaw,
643
+ src: PlotSrc,
644
+ },
629
645
  "hub-plus": {
630
646
  raw: PlusRaw,
631
647
  src: PlusSrc,
@@ -777,7 +793,7 @@ export const IconDefs: Record<HubIconName,{ raw: string, src: string }> = {
777
793
  }
778
794
 
779
795
  const Names = [
780
- 'hub-active', 'hub-admin', 'hub-archive', 'hub-arrow_down', 'hub-arrow_left', 'hub-arrow_right', 'hub-arrow_up', 'hub-assign', 'hub-attachment', 'hub-back', 'hub-badge', 'hub-board', 'hub-branch', 'hub-bug', 'hub-calculator', 'hub-checkmark', 'hub-close', 'hub-clypboard', 'hub-comment', 'hub-complete', 'hub-dashboard', 'hub-data_pull', 'hub-data_update', 'hub-database', 'hub-day', 'hub-delete', 'hub-documentation', 'hub-edit', 'hub-existing_child', 'hub-existing_parent', 'hub-feature', 'hub-flex', 'hub-forward', 'hub-github', 'hub-history', 'hub-home', 'hub-image', 'hub-inbox', 'hub-info', 'hub-internal', 'hub-issue', 'hub-lane', 'hub-lane_asap', 'hub-lane_days', 'hub-lane_hours', 'hub-lane_weeks', 'hub-lanes_board', 'hub-level_complete', 'hub-level_highway', 'hub-level_on_ramp', 'hub-level_parking', 'hub-list_view', 'hub-metrics', 'hub-minus', 'hub-new_child', 'hub-new_parent', 'hub-night', 'hub-origin', 'hub-pending', 'hub-plus', 'hub-post', 'hub-posts', 'hub-pr_closed', 'hub-pr_merged', 'hub-pr_open', 'hub-prioritized', 'hub-project', 'hub-question', 'hub-reaction', 'hub-read_mail', 'hub-recent', 'hub-refresh', 'hub-related_posts', 'hub-releases', 'hub-request', 'hub-settings', 'hub-split_view', 'hub-status', 'hub-step_deploy', 'hub-step_develop', 'hub-step_investigate', 'hub-step_review', 'hub-step_test', 'hub-steps', 'hub-steps_board', 'hub-subscribe', 'hub-support', 'hub-terrier', 'hub-thumbs_up', 'hub-type', 'hub-unprioritized', 'hub-upload', 'hub-user', 'hub-users', 'hub-website', 'hub-week'
796
+ 'hub-active', 'hub-admin', 'hub-archive', 'hub-arrow_down', 'hub-arrow_left', 'hub-arrow_right', 'hub-arrow_up', 'hub-assign', 'hub-attachment', 'hub-back', 'hub-badge', 'hub-board', 'hub-branch', 'hub-bug', 'hub-calculator', 'hub-checkmark', 'hub-close', 'hub-clypboard', 'hub-comment', 'hub-complete', 'hub-dashboard', 'hub-data_pull', 'hub-data_update', 'hub-database', 'hub-day', 'hub-delete', 'hub-documentation', 'hub-edit', 'hub-existing_child', 'hub-existing_parent', 'hub-feature', 'hub-flex', 'hub-forward', 'hub-github', 'hub-history', 'hub-home', 'hub-image', 'hub-inbox', 'hub-info', 'hub-internal', 'hub-issue', 'hub-lane', 'hub-lane_asap', 'hub-lane_days', 'hub-lane_hours', 'hub-lane_weeks', 'hub-lanes_board', 'hub-level_complete', 'hub-level_highway', 'hub-level_on_ramp', 'hub-level_parking', 'hub-link', 'hub-list_view', 'hub-metrics', 'hub-minus', 'hub-new_child', 'hub-new_parent', 'hub-night', 'hub-origin', 'hub-pending', 'hub-plot', 'hub-plus', 'hub-post', 'hub-posts', 'hub-pr_closed', 'hub-pr_merged', 'hub-pr_open', 'hub-prioritized', 'hub-project', 'hub-question', 'hub-reaction', 'hub-read_mail', 'hub-recent', 'hub-refresh', 'hub-related_posts', 'hub-releases', 'hub-request', 'hub-settings', 'hub-split_view', 'hub-status', 'hub-step_deploy', 'hub-step_develop', 'hub-step_investigate', 'hub-step_review', 'hub-step_test', 'hub-steps', 'hub-steps_board', 'hub-subscribe', 'hub-support', 'hub-terrier', 'hub-thumbs_up', 'hub-type', 'hub-unprioritized', 'hub-upload', 'hub-user', 'hub-users', 'hub-website', 'hub-week'
781
797
  ] as const
782
798
 
783
799
  export type HubIconName = typeof Names[number]
package/terrier/glyps.ts CHANGED
@@ -1,8 +1,8 @@
1
- // This file was automatically generated by glyps:compile on 07/10/24 8:00 AM, DO NOT MANUALLY EDIT!
1
+ // This file was automatically generated by glyps:compile on 07/23/24 2:23 PM, DO NOT MANUALLY EDIT!
2
2
 
3
3
  import Strings from "tuff-core/strings"
4
4
 
5
- const names = ['glyp-abacus', 'glyp-account', 'glyp-accounts_payable', 'glyp-accounts_receivable', 'glyp-action_log', 'glyp-activate', 'glyp-active', 'glyp-activity_high', 'glyp-activity_low', 'glyp-activity_medium', 'glyp-activity_none', 'glyp-address1', 'glyp-adjustment', 'glyp-admin', 'glyp-administration', 'glyp-air_freshener', 'glyp-alert', 'glyp-align_horizontal', 'glyp-align_vertical', 'glyp-anchor', 'glyp-announcement', 'glyp-app_update', 'glyp-append_selection', 'glyp-appointment', 'glyp-appointment_setup', 'glyp-archive', 'glyp-arrow_down', 'glyp-arrow_left', 'glyp-arrow_right', 'glyp-arrow_transfer', 'glyp-arrow_up', 'glyp-ascending', 'glyp-attachment', 'glyp-audit_analyzer', 'glyp-autopay', 'glyp-availability', 'glyp-background_batch', 'glyp-background_job', 'glyp-bait_for_demolition', 'glyp-bar_chart', 'glyp-barcode', 'glyp-bat_exclusion', 'glyp-bed_bug_fumigation', 'glyp-begin_service', 'glyp-belongs_to', 'glyp-billing', 'glyp-billing_office', 'glyp-billing_terms', 'glyp-billto', 'glyp-bioremediation', 'glyp-bird_exclusion', 'glyp-black_light', 'glyp-branch', 'glyp-branch_bats', 'glyp-branch_birds', 'glyp-branch_general', 'glyp-branch_irrigation', 'glyp-branch_landscape', 'glyp-branch_multi_housing', 'glyp-branch_office', 'glyp-branch_orders', 'glyp-branch_residential', 'glyp-branch_sales', 'glyp-branch_termites', 'glyp-branch_weeds', 'glyp-branch_wildlife', 'glyp-build', 'glyp-calculate', 'glyp-calendar', 'glyp-calendar_branch', 'glyp-calendar_map', 'glyp-calendar_rolling', 'glyp-calendar_share', 'glyp-calendar_snap', 'glyp-california', 'glyp-call', 'glyp-callback', 'glyp-camera', 'glyp-cancellation', 'glyp-cancelled', 'glyp-card_american_express', 'glyp-card_discover', 'glyp-card_mastercard', 'glyp-card_visa', 'glyp-catalog', 'glyp-caught', 'glyp-cert', 'glyp-check_all', 'glyp-check_in', 'glyp-check_in_service', 'glyp-checked', 'glyp-checked_empty', 'glyp-checkmark', 'glyp-checkmark_filled', 'glyp-checkout', 'glyp-chemical', 'glyp-chemical_authorization', 'glyp-chemical_backpack_sprayer', 'glyp-chemical_biological_controls', 'glyp-chemical_disinfectant', 'glyp-chemical_fertilizer', 'glyp-chemical_flying_insect_bait', 'glyp-chemical_fumigants', 'glyp-chemical_insect_aerosol', 'glyp-chemical_insect_bait', 'glyp-chemical_insect_dust', 'glyp-chemical_insect_granules', 'glyp-chemical_insect_spray', 'glyp-chemical_label', 'glyp-chemical_mole_bait', 'glyp-chemical_pest_bird_control', 'glyp-chemical_pheromone_products', 'glyp-chemical_power_sprayer', 'glyp-chemical_rodenticide_block', 'glyp-chemical_rodenticide_non_block', 'glyp-chemical_sds', 'glyp-chemical_tree_products', 'glyp-chemical_weed_control', 'glyp-chemical_wildlife_repellents', 'glyp-chemical_wildlife_toxicants', 'glyp-chevron_down', 'glyp-chevron_left', 'glyp-chevron_right', 'glyp-chevron_up', 'glyp-city', 'glyp-click', 'glyp-client_actions', 'glyp-client_pest_sightings', 'glyp-client_required', 'glyp-close', 'glyp-cloud', 'glyp-clypboard', 'glyp-clypedia', 'glyp-clypmart', 'glyp-code', 'glyp-code_details', 'glyp-collections', 'glyp-columns', 'glyp-comment', 'glyp-comment_filled', 'glyp-commission_origin', 'glyp-commissions', 'glyp-company_setup', 'glyp-compass', 'glyp-complete', 'glyp-complete_certificate', 'glyp-complete_enrollment', 'glyp-condition_appliance_machinery', 'glyp-condition_customer', 'glyp-condition_device', 'glyp-condition_door_window', 'glyp-condition_dumpster', 'glyp-condition_entry_point', 'glyp-condition_evidence', 'glyp-condition_exclusion', 'glyp-condition_exterior', 'glyp-condition_interior', 'glyp-condition_plumbing', 'glyp-condition_prep_storage', 'glyp-condition_rodent_evidence', 'glyp-condition_rodent_exclusion', 'glyp-condition_roof_ceiling', 'glyp-condition_structure', 'glyp-condition_supplies', 'glyp-condition_termites', 'glyp-condition_ventilation', 'glyp-condition_wall_floor', 'glyp-condition_wildlife', 'glyp-conditions', 'glyp-consolidate', 'glyp-construction', 'glyp-contract', 'glyp-contract_cancellation', 'glyp-contract_overview', 'glyp-conversation', 'glyp-copesan', 'glyp-copy', 'glyp-credit_memo', 'glyp-credit_non_revenue', 'glyp-credit_production', 'glyp-credit_prospect', 'glyp-credit_sales_bonus', 'glyp-crew', 'glyp-cumulative', 'glyp-cursor', 'glyp-custom_form', 'glyp-customer', 'glyp-customer_service', 'glyp-dashboard', 'glyp-data_dive', 'glyp-data_dive_query', 'glyp-data_dives', 'glyp-database', 'glyp-dead_animal_removal', 'glyp-default', 'glyp-delete', 'glyp-demo_mode', 'glyp-descending', 'glyp-design', 'glyp-desktop', 'glyp-detail_report', 'glyp-developer', 'glyp-device', 'glyp-device_sync', 'glyp-differential', 'glyp-disable', 'glyp-disabled_filled', 'glyp-distribute_horizontal', 'glyp-distribute_vertical', 'glyp-division', 'glyp-document', 'glyp-documentation', 'glyp-documents', 'glyp-download', 'glyp-driving', 'glyp-duplicate', 'glyp-duplicate_location', 'glyp-duration', 'glyp-edit', 'glyp-email', 'glyp-employment', 'glyp-entertainment_public_venues', 'glyp-equipment_bear_trap', 'glyp-equipment_flying_insect_bait_station', 'glyp-equipment_flying_insect_light_trap', 'glyp-equipment_insect_monitor', 'glyp-equipment_lethal_animal_trap', 'glyp-equipment_live_animal_trap', 'glyp-equipment_live_rodent_trap', 'glyp-equipment_maintenance', 'glyp-equipment_map_viewer', 'glyp-equipment_maps', 'glyp-equipment_mosquito_trap', 'glyp-equipment_other', 'glyp-equipment_pheromone_trap', 'glyp-equipment_pick_up', 'glyp-equipment_rodent_bait', 'glyp-equipment_rodent_trap', 'glyp-equipment_termite_bait_station', 'glyp-equipment_termite_monitor', 'glyp-exclusion', 'glyp-expand', 'glyp-expired', 'glyp-expiring', 'glyp-exterior', 'glyp-extras', 'glyp-facebook', 'glyp-farm', 'glyp-farm_grain_seed', 'glyp-fast_and_frequent', 'glyp-favorite', 'glyp-feedback', 'glyp-field_guide', 'glyp-field_training', 'glyp-file_blank', 'glyp-file_html', 'glyp-file_image', 'glyp-file_pdf', 'glyp-file_printable', 'glyp-file_spreadsheet', 'glyp-file_text', 'glyp-filter', 'glyp-finance', 'glyp-finding', 'glyp-fogging', 'glyp-folder', 'glyp-followup', 'glyp-food_bev_pharma', 'glyp-formula', 'glyp-fuel', 'glyp-fumigation', 'glyp-function', 'glyp-function_aggregate', 'glyp-function_time', 'glyp-gain_loss', 'glyp-generate_invoices', 'glyp-generate_orders', 'glyp-geo', 'glyp-geo_heat_map', 'glyp-google', 'glyp-google_calendar', 'glyp-government', 'glyp-grain_seed', 'glyp-grid', 'glyp-grouped', 'glyp-grouping_combine', 'glyp-grouping_separate', 'glyp-has_many', 'glyp-health_care', 'glyp-heat_map', 'glyp-heat_treatment', 'glyp-help', 'glyp-hidden', 'glyp-hint', 'glyp-honeybee_removal', 'glyp-housing', 'glyp-icon', 'glyp-identifier', 'glyp-import', 'glyp-import_data', 'glyp-in_progress', 'glyp-inbox', 'glyp-incomplete_certificate', 'glyp-industrial', 'glyp-info', 'glyp-information_technology', 'glyp-inspect_map', 'glyp-inspections', 'glyp-insulation', 'glyp-interior', 'glyp-invoice', 'glyp-invoice_review', 'glyp-irrigation_install', 'glyp-irrigation_maintenance', 'glyp-items', 'glyp-job', 'glyp-job_plan', 'glyp-job_plan_history', 'glyp-job_plan_run', 'glyp-join', 'glyp-join_inner', 'glyp-join_left', 'glyp-justice', 'glyp-k9_inspection', 'glyp-key', 'glyp-label_bottom', 'glyp-label_left', 'glyp-label_right', 'glyp-label_top', 'glyp-labor', 'glyp-landscape', 'glyp-landscape_maintenance', 'glyp-laptop', 'glyp-lead', 'glyp-lead_listing', 'glyp-lead_source', 'glyp-leads_report', 'glyp-learning_hub', 'glyp-ledger', 'glyp-legal', 'glyp-license', 'glyp-lifetime', 'glyp-line_cap_arrow', 'glyp-line_cap_bar', 'glyp-line_cap_circle', 'glyp-line_cap_none', 'glyp-line_caps', 'glyp-line_style', 'glyp-link', 'glyp-location', 'glyp-location_charge', 'glyp-location_credit', 'glyp-location_import', 'glyp-location_kind', 'glyp-location_message', 'glyp-location_origin', 'glyp-location_seed', 'glyp-location_tags', 'glyp-locations', 'glyp-locked', 'glyp-lodging', 'glyp-log_in', 'glyp-log_out', 'glyp-log_report', 'glyp-logbook', 'glyp-logbook_documents', 'glyp-lot_number', 'glyp-manager', 'glyp-map', 'glyp-markdown', 'glyp-market', 'glyp-materials', 'glyp-mattress_encasement', 'glyp-merge', 'glyp-message_billing', 'glyp-message_collections', 'glyp-message_complaint', 'glyp-message_misc', 'glyp-message_technician', 'glyp-messages', 'glyp-misc', 'glyp-miscellaneous', 'glyp-move_order', 'glyp-mowing', 'glyp-multi_housing', 'glyp-multi_tech_order', 'glyp-mute', 'glyp-navicon', 'glyp-new_location', 'glyp-new_ticket', 'glyp-no_charge', 'glyp-no_service', 'glyp-note', 'glyp-note_access', 'glyp-note_billing', 'glyp-note_collection', 'glyp-note_complaint', 'glyp-note_directions', 'glyp-note_focused', 'glyp-note_office', 'glyp-note_preservice', 'glyp-note_sales', 'glyp-note_service', 'glyp-notification', 'glyp-number', 'glyp-office', 'glyp-office_government', 'glyp-office_training', 'glyp-on_demand', 'glyp-on_demand_order', 'glyp-open', 'glyp-open_invoice', 'glyp-operations', 'glyp-options', 'glyp-order_actions', 'glyp-order_approved', 'glyp-order_batch', 'glyp-order_editor', 'glyp-order_pending', 'glyp-order_series', 'glyp-order_unapproved', 'glyp-org_structure', 'glyp-org_unit', 'glyp-org_unit_settings', 'glyp-origin', 'glyp-origin_client', 'glyp-origin_tech', 'glyp-outbox', 'glyp-outlook', 'glyp-overlap', 'glyp-password', 'glyp-past_due', 'glyp-paused', 'glyp-pay_brackets', 'glyp-payment', 'glyp-payment_ach', 'glyp-payment_application_apply', 'glyp-payment_application_correction', 'glyp-payment_application_initial', 'glyp-payment_application_refund', 'glyp-payment_application_transfer', 'glyp-payment_application_unapply', 'glyp-payment_application_unapply_all', 'glyp-payment_applications', 'glyp-payment_batch', 'glyp-payment_cash', 'glyp-payment_check', 'glyp-payment_coupon', 'glyp-payment_credit', 'glyp-payment_discount', 'glyp-payment_eft', 'glyp-payment_finance_charge', 'glyp-payments', 'glyp-payroll', 'glyp-pdf', 'glyp-pending', 'glyp-periodic', 'glyp-periodic_assessment', 'glyp-permission', 'glyp-pest', 'glyp-pest_ants', 'glyp-pest_bats', 'glyp-pest_bed_bugs', 'glyp-pest_birds', 'glyp-pest_crawling_insects', 'glyp-pest_dermestids', 'glyp-pest_fall_invaders', 'glyp-pest_flying_insects', 'glyp-pest_moles', 'glyp-pest_mosquitoes', 'glyp-pest_nuisance_animals', 'glyp-pest_ornamental', 'glyp-pest_ornamental_diseases', 'glyp-pest_roaches', 'glyp-pest_rodents', 'glyp-pest_scorpions', 'glyp-pest_snakes', 'glyp-pest_spiders', 'glyp-pest_stinging_insects', 'glyp-pest_stored_product_pests', 'glyp-pest_ticks_and_fleas', 'glyp-pest_viruses_and_bacteria', 'glyp-pest_weeds', 'glyp-pest_wood_destroyers', 'glyp-phone', 'glyp-pick_date', 'glyp-pick_list', 'glyp-platform_android', 'glyp-platform_ios', 'glyp-platform_macos', 'glyp-platform_windows', 'glyp-play', 'glyp-plus', 'glyp-plus_filled', 'glyp-plus_outline', 'glyp-portal', 'glyp-price_increase', 'glyp-price_increase_alt', 'glyp-pricing_table', 'glyp-print', 'glyp-privacy', 'glyp-product_sale', 'glyp-production', 'glyp-professional_consultation', 'glyp-program', 'glyp-program_elements', 'glyp-program_initiation', 'glyp-program_order', 'glyp-program_review', 'glyp-promo', 'glyp-proposal', 'glyp-protection', 'glyp-purchase_order', 'glyp-quality', 'glyp-query', 'glyp-radio_checked', 'glyp-radio_empty', 'glyp-reassign', 'glyp-receipt', 'glyp-recent', 'glyp-recommendation', 'glyp-record_details', 'glyp-recurring_revenue', 'glyp-redo', 'glyp-refresh', 'glyp-refund', 'glyp-region', 'glyp-released', 'glyp-remove', 'glyp-renewal', 'glyp-report', 'glyp-required_input', 'glyp-reschedule', 'glyp-restaurant_bar', 'glyp-revenue', 'glyp-review', 'glyp-rfid', 'glyp-ride_along', 'glyp-rodent_exclusion', 'glyp-route_change', 'glyp-route_optimization', 'glyp-rows', 'glyp-ruler', 'glyp-sales', 'glyp-sales_contest', 'glyp-sales_pipeline', 'glyp-sales_tax', 'glyp-sales_tax_exemption', 'glyp-schedule_lock', 'glyp-schedule_lock_afternoon', 'glyp-schedule_lock_day', 'glyp-schedule_lock_exact', 'glyp-schedule_lock_four_hour', 'glyp-schedule_lock_morning', 'glyp-schedule_lock_none', 'glyp-schedule_lock_two_day', 'glyp-schedule_lock_two_hour', 'glyp-schedule_lock_week', 'glyp-schedule_tyoe_every', 'glyp-schedule_type_every', 'glyp-schedule_type_none', 'glyp-schedule_type_on_demand', 'glyp-schedule_type_schedule', 'glyp-scheduled', 'glyp-scheduling', 'glyp-school_church', 'glyp-script', 'glyp-search', 'glyp-seeding', 'glyp-segment', 'glyp-sent', 'glyp-sentricon', 'glyp-service_agreement', 'glyp-service_digest', 'glyp-service_form', 'glyp-service_miscellaneous', 'glyp-service_reminder', 'glyp-service_report', 'glyp-service_request', 'glyp-services', 'glyp-settings', 'glyp-setup', 'glyp-signature', 'glyp-simulator', 'glyp-site_map', 'glyp-site_map_annotation', 'glyp-site_map_chemical', 'glyp-site_map_edit_details', 'glyp-site_map_edit_geo', 'glyp-site_map_equipment', 'glyp-site_map_exterior', 'glyp-site_map_foundation', 'glyp-site_map_icon', 'glyp-site_map_interior', 'glyp-site_map_label', 'glyp-site_map_perimeter', 'glyp-site_map_settings_left', 'glyp-site_map_settings_right', 'glyp-site_map_template', 'glyp-skip', 'glyp-smart_traps', 'glyp-sms', 'glyp-snow_removal', 'glyp-sort', 'glyp-special', 'glyp-split', 'glyp-spp_scorecard', 'glyp-square_edge', 'glyp-start_sheet', 'glyp-start_time', 'glyp-statement', 'glyp-states', 'glyp-sticky', 'glyp-stop_time', 'glyp-store_material', 'glyp-store_order', 'glyp-store_order_back_order', 'glyp-store_order_cancelled', 'glyp-store_order_complete', 'glyp-store_order_pending', 'glyp-store_order_pending_return', 'glyp-store_order_pre_order', 'glyp-store_order_returned', 'glyp-stores', 'glyp-styling', 'glyp-subscribe', 'glyp-supplemental', 'glyp-support', 'glyp-sync', 'glyp-table', 'glyp-tablet', 'glyp-tablets', 'glyp-tag_manager', 'glyp-tags', 'glyp-task_runs', 'glyp-tech_pest_sightings', 'glyp-technician', 'glyp-technician_approach', 'glyp-template', 'glyp-termite_fumigation', 'glyp-terrier', 'glyp-terrier_hub', 'glyp-territory', 'glyp-text', 'glyp-thermometer', 'glyp-third_party_billing', 'glyp-threshold', 'glyp-ticket', 'glyp-ticket_type', 'glyp-tickets', 'glyp-tidy', 'glyp-time', 'glyp-time_entry', 'glyp-timeline', 'glyp-toolbox', 'glyp-tqi', 'glyp-tracker', 'glyp-tracking', 'glyp-training_course', 'glyp-treatment_split', 'glyp-trends', 'glyp-trip_charge', 'glyp-ui_type', 'glyp-unarchive', 'glyp-unchecked', 'glyp-undo', 'glyp-unfavorite', 'glyp-unit_sweep', 'glyp-unit_tag', 'glyp-university', 'glyp-unlocked', 'glyp-unmute', 'glyp-unscheduled', 'glyp-update_check_positions', 'glyp-upload', 'glyp-user', 'glyp-user_credit', 'glyp-user_tags', 'glyp-users', 'glyp-utility', 'glyp-vacation', 'glyp-vacuum', 'glyp-variant', 'glyp-vendor', 'glyp-versions', 'glyp-video', 'glyp-visible', 'glyp-warehouse', 'glyp-wdo', 'glyp-web_dusting', 'glyp-website', 'glyp-wildlife', 'glyp-wildlife_exclusion', 'glyp-winter_check', 'glyp-wizard', 'glyp-work', 'glyp-work_class', 'glyp-work_code', 'glyp-work_order', 'glyp-work_production', 'glyp-work_progress', 'glyp-work_yield', 'glyp-year', 'glyp-yield', 'glyp-zip_code', 'glyp-zone_adjacent', 'glyp-zone_check', 'glyp-zone_production', 'glyp-zone_remote', 'glyp-zoom_fit'] as const
5
+ const names = ['glyp-abacus', 'glyp-account', 'glyp-accounts_payable', 'glyp-accounts_receivable', 'glyp-action_log', 'glyp-activate', 'glyp-activate_user', 'glyp-active', 'glyp-activity_high', 'glyp-activity_low', 'glyp-activity_medium', 'glyp-activity_none', 'glyp-address1', 'glyp-adjustment', 'glyp-admin', 'glyp-administration', 'glyp-affinity', 'glyp-agency', 'glyp-air_freshener', 'glyp-alert', 'glyp-align_horizontal', 'glyp-align_vertical', 'glyp-anchor', 'glyp-android_phone', 'glyp-android_tablet', 'glyp-annotation', 'glyp-announcement', 'glyp-app_update', 'glyp-append_selection', 'glyp-appointment', 'glyp-appointment_setup', 'glyp-archive', 'glyp-arrow_down', 'glyp-arrow_left', 'glyp-arrow_right', 'glyp-arrow_transfer', 'glyp-arrow_up', 'glyp-ascending', 'glyp-assign', 'glyp-assign_all', 'glyp-attachment', 'glyp-audit', 'glyp-audit_analyzer', 'glyp-audits', 'glyp-autopay', 'glyp-availability', 'glyp-background_batch', 'glyp-background_job', 'glyp-bait_for_demolition', 'glyp-bar_chart', 'glyp-barcode', 'glyp-bat_exclusion', 'glyp-bed_bug_fumigation', 'glyp-begin_service', 'glyp-belongs_to', 'glyp-billing', 'glyp-billing_office', 'glyp-billing_terms', 'glyp-billto', 'glyp-bioremediation', 'glyp-bird_exclusion', 'glyp-black_light', 'glyp-bookmark', 'glyp-branch', 'glyp-branch_bats', 'glyp-branch_birds', 'glyp-branch_general', 'glyp-branch_irrigation', 'glyp-branch_landscape', 'glyp-branch_multi_housing', 'glyp-branch_office', 'glyp-branch_orders', 'glyp-branch_residential', 'glyp-branch_sales', 'glyp-branch_termites', 'glyp-branch_weeds', 'glyp-branch_wildlife', 'glyp-build', 'glyp-business', 'glyp-business_cert', 'glyp-business_cert_type', 'glyp-calculate', 'glyp-calendar', 'glyp-calendar_branch', 'glyp-calendar_map', 'glyp-calendar_rolling', 'glyp-calendar_share', 'glyp-calendar_snap', 'glyp-california', 'glyp-call', 'glyp-callback', 'glyp-camera', 'glyp-canada', 'glyp-cancellation', 'glyp-cancelled', 'glyp-card_american_express', 'glyp-card_discover', 'glyp-card_mastercard', 'glyp-card_visa', 'glyp-catalog', 'glyp-category', 'glyp-caught', 'glyp-cellulose_debris', 'glyp-cert', 'glyp-cert_timeline', 'glyp-cert_type', 'glyp-certificate', 'glyp-certified_summary', 'glyp-certs', 'glyp-ceu', 'glyp-check_all', 'glyp-check_in', 'glyp-check_in_service', 'glyp-checked', 'glyp-checked_check_all', 'glyp-checked_empty', 'glyp-checkmark', 'glyp-checkmark_filled', 'glyp-checkout', 'glyp-chemical', 'glyp-chemical_authorization', 'glyp-chemical_backpack_sprayer', 'glyp-chemical_biological_controls', 'glyp-chemical_disinfectant', 'glyp-chemical_fertilizer', 'glyp-chemical_flying_insect_bait', 'glyp-chemical_fumigants', 'glyp-chemical_insect_aerosol', 'glyp-chemical_insect_bait', 'glyp-chemical_insect_dust', 'glyp-chemical_insect_granules', 'glyp-chemical_insect_spray', 'glyp-chemical_label', 'glyp-chemical_mole_bait', 'glyp-chemical_pest_bird_control', 'glyp-chemical_pheromone_products', 'glyp-chemical_power_sprayer', 'glyp-chemical_rodenticide_block', 'glyp-chemical_rodenticide_non_block', 'glyp-chemical_sds', 'glyp-chemical_tree_products', 'glyp-chemical_weed_control', 'glyp-chemical_wildlife_repellents', 'glyp-chemical_wildlife_toxicants', 'glyp-chevron_down', 'glyp-chevron_left', 'glyp-chevron_right', 'glyp-chevron_up', 'glyp-circle', 'glyp-city', 'glyp-click', 'glyp-client_actions', 'glyp-client_pest_sightings', 'glyp-client_required', 'glyp-clipboard', 'glyp-close', 'glyp-close_empty', 'glyp-cloud', 'glyp-clypboard', 'glyp-clypedia', 'glyp-clypmart', 'glyp-code', 'glyp-code_details', 'glyp-collections', 'glyp-columns', 'glyp-comment', 'glyp-comment_filled', 'glyp-comments', 'glyp-commission_origin', 'glyp-commissions', 'glyp-company_setup', 'glyp-compass', 'glyp-complete', 'glyp-complete_certificate', 'glyp-complete_enrollment', 'glyp-condition_appliance_machinery', 'glyp-condition_customer', 'glyp-condition_device', 'glyp-condition_door_window', 'glyp-condition_dumpster', 'glyp-condition_entry_point', 'glyp-condition_evidence', 'glyp-condition_exclusion', 'glyp-condition_exterior', 'glyp-condition_interior', 'glyp-condition_plumbing', 'glyp-condition_prep_storage', 'glyp-condition_rodent_evidence', 'glyp-condition_rodent_exclusion', 'glyp-condition_roof_ceiling', 'glyp-condition_structure', 'glyp-condition_supplies', 'glyp-condition_termites', 'glyp-condition_ventilation', 'glyp-condition_wall_floor', 'glyp-condition_wildlife', 'glyp-conditions', 'glyp-consolidate', 'glyp-construction', 'glyp-continuing_ed', 'glyp-contract', 'glyp-contract_cancellation', 'glyp-contract_overview', 'glyp-conversation', 'glyp-copesan', 'glyp-copy', 'glyp-credit_memo', 'glyp-credit_non_revenue', 'glyp-credit_production', 'glyp-credit_prospect', 'glyp-credit_sales_bonus', 'glyp-crew', 'glyp-cumulative', 'glyp-curriculum', 'glyp-cursor', 'glyp-custom_form', 'glyp-customer', 'glyp-customer_service', 'glyp-damage', 'glyp-dashboard', 'glyp-data_dive', 'glyp-data_dive_query', 'glyp-data_dives', 'glyp-database', 'glyp-deactivate_user', 'glyp-dead_animal_removal', 'glyp-default', 'glyp-delete', 'glyp-demo_mode', 'glyp-descending', 'glyp-design', 'glyp-desktop', 'glyp-detail_report', 'glyp-developer', 'glyp-device', 'glyp-device_sync', 'glyp-differential', 'glyp-disable', 'glyp-disabled_filled', 'glyp-distribute_horizontal', 'glyp-distribute_vertical', 'glyp-division', 'glyp-document', 'glyp-documentation', 'glyp-documents', 'glyp-download', 'glyp-driving', 'glyp-duplicate', 'glyp-duplicate_location', 'glyp-duration', 'glyp-earth_to_wood', 'glyp-edit', 'glyp-email', 'glyp-employment', 'glyp-entertainment_public_venues', 'glyp-equipment_bear_trap', 'glyp-equipment_flying_insect_bait_station', 'glyp-equipment_flying_insect_light_trap', 'glyp-equipment_insect_monitor', 'glyp-equipment_lethal_animal_trap', 'glyp-equipment_live_animal_trap', 'glyp-equipment_live_rodent_trap', 'glyp-equipment_maintenance', 'glyp-equipment_map_viewer', 'glyp-equipment_maps', 'glyp-equipment_mosquito_trap', 'glyp-equipment_other', 'glyp-equipment_pheromone_trap', 'glyp-equipment_pick_up', 'glyp-equipment_rodent_bait', 'glyp-equipment_rodent_trap', 'glyp-equipment_termite_bait_station', 'glyp-equipment_termite_monitor', 'glyp-escape', 'glyp-exam', 'glyp-exams', 'glyp-exclusion', 'glyp-existing_location', 'glyp-expand', 'glyp-expired', 'glyp-expiring', 'glyp-exterior', 'glyp-extras', 'glyp-facebook', 'glyp-family', 'glyp-farm', 'glyp-farm_grain_seed', 'glyp-fast_and_frequent', 'glyp-favorite', 'glyp-features', 'glyp-feedback', 'glyp-field_guide', 'glyp-field_training', 'glyp-file_blank', 'glyp-file_html', 'glyp-file_image', 'glyp-file_pdf', 'glyp-file_printable', 'glyp-file_spreadsheet', 'glyp-file_text', 'glyp-filter', 'glyp-finance', 'glyp-finding', 'glyp-fogging', 'glyp-folder', 'glyp-followup', 'glyp-food_bev_pharma', 'glyp-formula', 'glyp-fuel', 'glyp-fumigation', 'glyp-function', 'glyp-function_aggregate', 'glyp-function_time', 'glyp-gain_loss', 'glyp-generate_invoices', 'glyp-generate_orders', 'glyp-geo', 'glyp-geo_heat_map', 'glyp-google', 'glyp-google_calendar', 'glyp-government', 'glyp-grain_seed', 'glyp-grid', 'glyp-grouped', 'glyp-grouping_combine', 'glyp-grouping_separate', 'glyp-guide', 'glyp-has_many', 'glyp-health_care', 'glyp-heat_map', 'glyp-heat_treatment', 'glyp-help', 'glyp-hidden', 'glyp-hint', 'glyp-home', 'glyp-honeybee_removal', 'glyp-housing', 'glyp-icon', 'glyp-identifier', 'glyp-image', 'glyp-images', 'glyp-import', 'glyp-import_certs', 'glyp-import_data', 'glyp-import_users', 'glyp-in_progress', 'glyp-inbox', 'glyp-incomplete_certificate', 'glyp-industrial', 'glyp-info', 'glyp-information_technology', 'glyp-inspect_map', 'glyp-inspections', 'glyp-insulation', 'glyp-interior', 'glyp-invoice', 'glyp-invoice_charge', 'glyp-invoice_credit', 'glyp-invoice_paid', 'glyp-invoice_review', 'glyp-ipad', 'glyp-iphone', 'glyp-irrigation_install', 'glyp-irrigation_maintenance', 'glyp-items', 'glyp-job', 'glyp-job_plan', 'glyp-job_plan_history', 'glyp-job_plan_run', 'glyp-join', 'glyp-join_inner', 'glyp-join_left', 'glyp-jump', 'glyp-justice', 'glyp-k9_inspection', 'glyp-key', 'glyp-label_bottom', 'glyp-label_left', 'glyp-label_right', 'glyp-label_top', 'glyp-labor', 'glyp-landscape', 'glyp-landscape_maintenance', 'glyp-laptop', 'glyp-lead', 'glyp-lead_listing', 'glyp-lead_source', 'glyp-leads_report', 'glyp-learning_hub', 'glyp-ledger', 'glyp-legal', 'glyp-license', 'glyp-lifetime', 'glyp-limit', 'glyp-line_cap_arrow', 'glyp-line_cap_bar', 'glyp-line_cap_circle', 'glyp-line_cap_none', 'glyp-line_caps', 'glyp-line_style', 'glyp-link', 'glyp-list', 'glyp-location', 'glyp-location_charge', 'glyp-location_credit', 'glyp-location_import', 'glyp-location_kind', 'glyp-location_message', 'glyp-location_origin', 'glyp-location_seed', 'glyp-location_tags', 'glyp-locations', 'glyp-locked', 'glyp-lodging', 'glyp-log_in', 'glyp-log_out', 'glyp-log_report', 'glyp-logbook', 'glyp-logbook_documents', 'glyp-lot_number', 'glyp-lycensed_simulator', 'glyp-manager', 'glyp-manual', 'glyp-map', 'glyp-markdown', 'glyp-market', 'glyp-materials', 'glyp-mattress_encasement', 'glyp-merge', 'glyp-message_billing', 'glyp-message_collections', 'glyp-message_complaint', 'glyp-message_misc', 'glyp-message_technician', 'glyp-messages', 'glyp-minus_outline', 'glyp-misc', 'glyp-miscellaneous', 'glyp-missing', 'glyp-moisture', 'glyp-move_order', 'glyp-mowing', 'glyp-multi_housing', 'glyp-multi_tech_order', 'glyp-mute', 'glyp-navicon', 'glyp-new_location', 'glyp-new_ticket', 'glyp-no_charge', 'glyp-no_service', 'glyp-note', 'glyp-note_access', 'glyp-note_billing', 'glyp-note_collection', 'glyp-note_complaint', 'glyp-note_directions', 'glyp-note_focused', 'glyp-note_office', 'glyp-note_preservice', 'glyp-note_sales', 'glyp-note_service', 'glyp-notification', 'glyp-nuke', 'glyp-number', 'glyp-occupant', 'glyp-office', 'glyp-office_government', 'glyp-office_training', 'glyp-on_demand', 'glyp-on_demand_order', 'glyp-open', 'glyp-open_invoice', 'glyp-operations', 'glyp-options', 'glyp-order_actions', 'glyp-order_approved', 'glyp-order_batch', 'glyp-order_editor', 'glyp-order_pending', 'glyp-order_series', 'glyp-order_unapproved', 'glyp-org', 'glyp-org_feature', 'glyp-org_settings', 'glyp-org_structure', 'glyp-org_unit', 'glyp-org_unit_settings', 'glyp-orgs', 'glyp-origin', 'glyp-origin_client', 'glyp-origin_tech', 'glyp-outbox', 'glyp-outlier', 'glyp-outlook', 'glyp-overlap', 'glyp-password', 'glyp-past_due', 'glyp-pause', 'glyp-paused', 'glyp-pay_brackets', 'glyp-payment', 'glyp-payment_ach', 'glyp-payment_application_apply', 'glyp-payment_application_correction', 'glyp-payment_application_initial', 'glyp-payment_application_refund', 'glyp-payment_application_transfer', 'glyp-payment_application_unapply', 'glyp-payment_application_unapply_all', 'glyp-payment_applications', 'glyp-payment_batch', 'glyp-payment_cash', 'glyp-payment_check', 'glyp-payment_coupon', 'glyp-payment_credit', 'glyp-payment_discount', 'glyp-payment_eft', 'glyp-payment_finance_charge', 'glyp-payments', 'glyp-payroll', 'glyp-pdf', 'glyp-pending', 'glyp-periodic', 'glyp-periodic_assessment', 'glyp-permission', 'glyp-pest', 'glyp-pest_ants', 'glyp-pest_bats', 'glyp-pest_bed_bugs', 'glyp-pest_birds', 'glyp-pest_crawling_insects', 'glyp-pest_dermestids', 'glyp-pest_fall_invaders', 'glyp-pest_flying_insects', 'glyp-pest_moles', 'glyp-pest_mosquitoes', 'glyp-pest_nuisance_animals', 'glyp-pest_ornamental', 'glyp-pest_ornamental_diseases', 'glyp-pest_roaches', 'glyp-pest_rodents', 'glyp-pest_scorpions', 'glyp-pest_snakes', 'glyp-pest_spiders', 'glyp-pest_stinging_insects', 'glyp-pest_stored_product_pests', 'glyp-pest_ticks_and_fleas', 'glyp-pest_viruses_and_bacteria', 'glyp-pest_weeds', 'glyp-pest_wood_destroyers', 'glyp-phone', 'glyp-pick_date', 'glyp-pick_list', 'glyp-platform_android', 'glyp-platform_ios', 'glyp-platform_macos', 'glyp-platform_windows', 'glyp-play', 'glyp-plus', 'glyp-plus_filled', 'glyp-plus_outline', 'glyp-portal', 'glyp-price_increase', 'glyp-price_increase_alt', 'glyp-pricing', 'glyp-pricing_table', 'glyp-print', 'glyp-privacy', 'glyp-product_sale', 'glyp-production', 'glyp-professional_consultation', 'glyp-profile', 'glyp-program', 'glyp-program_elements', 'glyp-program_initiation', 'glyp-program_order', 'glyp-program_review', 'glyp-promo', 'glyp-proposal', 'glyp-protection', 'glyp-purchase_order', 'glyp-quality', 'glyp-query', 'glyp-radio_checked', 'glyp-radio_empty', 'glyp-reassign', 'glyp-receipt', 'glyp-recent', 'glyp-reciprocity', 'glyp-recommendation', 'glyp-record_details', 'glyp-recurring_revenue', 'glyp-redo', 'glyp-refresh', 'glyp-refund', 'glyp-region', 'glyp-released', 'glyp-remove', 'glyp-renew', 'glyp-renewal', 'glyp-report', 'glyp-required_input', 'glyp-reschedule', 'glyp-restaurant_bar', 'glyp-revenue', 'glyp-review', 'glyp-rfid', 'glyp-ride_along', 'glyp-rodent_exclusion', 'glyp-role_admin', 'glyp-role_customer', 'glyp-role_super', 'glyp-role_tech', 'glyp-roster', 'glyp-route_change', 'glyp-route_optimization', 'glyp-rows', 'glyp-ruby', 'glyp-ruler', 'glyp-sales', 'glyp-sales_contest', 'glyp-sales_pipeline', 'glyp-sales_tax', 'glyp-sales_tax_exemption', 'glyp-schedule_lock', 'glyp-schedule_lock_afternoon', 'glyp-schedule_lock_day', 'glyp-schedule_lock_exact', 'glyp-schedule_lock_four_hour', 'glyp-schedule_lock_morning', 'glyp-schedule_lock_none', 'glyp-schedule_lock_two_day', 'glyp-schedule_lock_two_hour', 'glyp-schedule_lock_week', 'glyp-schedule_tyoe_every', 'glyp-schedule_type_every', 'glyp-schedule_type_none', 'glyp-schedule_type_on_demand', 'glyp-schedule_type_schedule', 'glyp-scheduled', 'glyp-scheduling', 'glyp-school_church', 'glyp-scope', 'glyp-scoreboard', 'glyp-scrape', 'glyp-script', 'glyp-search', 'glyp-seeding', 'glyp-segment', 'glyp-send', 'glyp-sent', 'glyp-sentricon', 'glyp-service_agreement', 'glyp-service_digest', 'glyp-service_form', 'glyp-service_form_new', 'glyp-service_form_settings', 'glyp-service_form_template', 'glyp-service_miscellaneous', 'glyp-service_reminder', 'glyp-service_report', 'glyp-service_request', 'glyp-services', 'glyp-settings', 'glyp-setup', 'glyp-signature', 'glyp-simulator', 'glyp-site_map', 'glyp-site_map_annotation', 'glyp-site_map_chemical', 'glyp-site_map_edit_details', 'glyp-site_map_edit_geo', 'glyp-site_map_equipment', 'glyp-site_map_exterior', 'glyp-site_map_foundation', 'glyp-site_map_icon', 'glyp-site_map_interior', 'glyp-site_map_label', 'glyp-site_map_perimeter', 'glyp-site_map_settings_left', 'glyp-site_map_settings_right', 'glyp-site_map_template', 'glyp-skill', 'glyp-skip', 'glyp-slope', 'glyp-smart_traps', 'glyp-sms', 'glyp-snow_removal', 'glyp-sort', 'glyp-special', 'glyp-split', 'glyp-spp_scorecard', 'glyp-square_edge', 'glyp-start_sheet', 'glyp-start_time', 'glyp-state_ak', 'glyp-state_al', 'glyp-state_ar', 'glyp-state_az', 'glyp-state_ca', 'glyp-state_co', 'glyp-state_ct', 'glyp-state_dc', 'glyp-state_de', 'glyp-state_fl', 'glyp-state_ga', 'glyp-state_hi', 'glyp-state_ia', 'glyp-state_id', 'glyp-state_il', 'glyp-state_in', 'glyp-state_ks', 'glyp-state_ky', 'glyp-state_la', 'glyp-state_ma', 'glyp-state_mb', 'glyp-state_md', 'glyp-state_me', 'glyp-state_mi', 'glyp-state_mn', 'glyp-state_mo', 'glyp-state_ms', 'glyp-state_mt', 'glyp-state_nc', 'glyp-state_nd', 'glyp-state_ne', 'glyp-state_nh', 'glyp-state_nj', 'glyp-state_nm', 'glyp-state_nv', 'glyp-state_ny', 'glyp-state_oh', 'glyp-state_ok', 'glyp-state_or', 'glyp-state_pa', 'glyp-state_ri', 'glyp-state_sc', 'glyp-state_sd', 'glyp-state_tn', 'glyp-state_tx', 'glyp-state_ut', 'glyp-state_va', 'glyp-state_vt', 'glyp-state_wa', 'glyp-state_wi', 'glyp-state_wv', 'glyp-state_wy', 'glyp-statement', 'glyp-states', 'glyp-steps', 'glyp-sticky', 'glyp-stop_time', 'glyp-store_material', 'glyp-store_order', 'glyp-store_order_back_order', 'glyp-store_order_cancelled', 'glyp-store_order_complete', 'glyp-store_order_pending', 'glyp-store_order_pending_return', 'glyp-store_order_pre_order', 'glyp-store_order_returned', 'glyp-stores', 'glyp-styling', 'glyp-subscribe', 'glyp-subscription', 'glyp-supplemental', 'glyp-support', 'glyp-sync', 'glyp-table', 'glyp-tablet', 'glyp-tablets', 'glyp-tag', 'glyp-tag_manager', 'glyp-tags', 'glyp-task_runs', 'glyp-taxability', 'glyp-tech_cert', 'glyp-tech_cert_type', 'glyp-tech_pest_sightings', 'glyp-technician', 'glyp-technician_approach', 'glyp-template', 'glyp-termite_fumigation', 'glyp-terrier', 'glyp-terrier_hub', 'glyp-territory', 'glyp-text', 'glyp-thermometer', 'glyp-third_party', 'glyp-third_party_billing', 'glyp-threshold', 'glyp-ticket', 'glyp-ticket_type', 'glyp-tickets', 'glyp-tidy', 'glyp-time', 'glyp-time_entry', 'glyp-timeline', 'glyp-timer', 'glyp-toolbox', 'glyp-tqi', 'glyp-tracker', 'glyp-tracking', 'glyp-training_course', 'glyp-treatment_split', 'glyp-trends', 'glyp-trial', 'glyp-trip_charge', 'glyp-ui_type', 'glyp-unarchive', 'glyp-unassign', 'glyp-unassign_all', 'glyp-unchecked', 'glyp-undo', 'glyp-unfavorite', 'glyp-unit_sweep', 'glyp-unit_tag', 'glyp-university', 'glyp-unlocked', 'glyp-unmute', 'glyp-unscheduled', 'glyp-update_check_positions', 'glyp-upload', 'glyp-user', 'glyp-user_credit', 'glyp-user_tags', 'glyp-users', 'glyp-utility', 'glyp-vacation', 'glyp-vacuum', 'glyp-variant', 'glyp-vendor', 'glyp-versions', 'glyp-video', 'glyp-visible', 'glyp-warehouse', 'glyp-wdi', 'glyp-wdi_az', 'glyp-wdi_ca', 'glyp-wdi_npma', 'glyp-wdi_nv', 'glyp-wdo', 'glyp-web_dusting', 'glyp-website', 'glyp-wildlife', 'glyp-wildlife_exclusion', 'glyp-winter_check', 'glyp-wizard', 'glyp-work', 'glyp-work_class', 'glyp-work_code', 'glyp-work_order', 'glyp-work_production', 'glyp-work_progress', 'glyp-work_yield', 'glyp-year', 'glyp-yield', 'glyp-zip_code', 'glyp-zone_adjacent', 'glyp-zone_check', 'glyp-zone_production', 'glyp-zone_remote', 'glyp-zoom', 'glyp-zoom_fit'] as const
6
6
 
7
7
  /**
8
8
  * Format a glyp name so that it's suitable to show to the user.
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="currentColor" fill-rule="nonzero"><path d="M27.314 4.686a5 5 0 0 1 0 7.071l-6.364 6.364a5.05 5.05 0 0 1-.47.415 5.99 5.99 0 0 0-.098-2.674l5.517-5.519a3 3 0 1 0-4.242-4.242l-6.364 6.363a3 3 0 0 0 1.29 5.005A1.985 1.985 0 0 1 16 18.83l-.412.413a5 5 0 0 1-1.709-8.191l6.364-6.365a5 5 0 0 1 7.07 0Z"/><path d="M4.686 27.314a5 5 0 0 1 0-7.071l6.364-6.364c.15-.15.307-.288.47-.415a5.99 5.99 0 0 0 .098 2.675L6.1 21.657a3 3 0 0 0 4.242 4.242l6.364-6.363a3 3 0 0 0-1.29-5.005c.011-.493.206-.983.583-1.36l.413-.412a5 5 0 0 1 1.708 8.19l-6.364 6.365a5 5 0 0 1-7.07 0Z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><path fill="currentColor" fill-opacity="0.33" fill-rule="nonzero" d="M5 5h22v22H5z"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M27 27H5V5"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 22 4.4-4 4.4 2 4.4-7 4.4 4L27 9"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="#000" fill-rule="nonzero"><path d="M27.314 4.686a5 5 0 0 1 0 7.071l-6.364 6.364a5.05 5.05 0 0 1-.47.415 5.99 5.99 0 0 0-.098-2.674l5.517-5.519a3 3 0 1 0-4.242-4.242l-6.364 6.363a3 3 0 0 0 1.29 5.005A1.985 1.985 0 0 1 16 18.83l-.412.413a5 5 0 0 1-1.709-8.191l6.364-6.365a5 5 0 0 1 7.07 0Z"/><path d="M4.686 27.314a5 5 0 0 1 0-7.071l6.364-6.364c.15-.15.307-.288.47-.415a5.99 5.99 0 0 0 .098 2.675L6.1 21.657a3 3 0 0 0 4.242 4.242l6.364-6.363a3 3 0 0 0-1.29-5.005c.011-.493.206-.983.583-1.36l.413-.412a5 5 0 0 1 1.708 8.19l-6.364 6.365a5 5 0 0 1-7.07 0Z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><path fill="#000" fill-opacity=".25" fill-rule="nonzero" d="M5 5h22v22H5z"/><path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M27 27H5V5"/><path stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m5 22 4.4-4 4.4 2 4.4-7 4.4 4L27 9"/></g></svg>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>icon-link</title>
4
+ <g id="icon-link" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="Group" transform="translate(16, 16) rotate(45) translate(-16, -16)translate(11, 0)" fill="#000000" fill-rule="nonzero">
6
+ <path d="M5,0 C7.76142375,0 10,2.23857625 10,5 L10,14 C10,14.2118371 9.98682623,14.4205974 9.96125326,14.6255061 C9.74907057,14.3133626 9.50824898,14.0229676 9.24264069,13.7573593 C8.87334228,13.3880609 8.4561268,13.0666796 8.00112026,12.8033414 L8,5 C8,3.34314575 6.65685425,2 5,2 C3.34314575,2 2,3.34314575 2,5 L2,14 C2,15.6568542 3.34314575,17 5,17 C5.5265222,17 6.02136396,16.86436 6.45148858,16.6261166 C6.79165627,16.9830537 7,17.4671962 7,18 L7.0005324,18.5837237 C6.38792967,18.8514665 5.71131077,19 5,19 C2.23857625,19 0,16.7614237 0,14 L0,5 C0,2.23857625 2.23857625,0 5,0 Z" id="Rectangle"></path>
7
+ <path d="M5,13 C7.76142375,13 10,15.2385763 10,18 L10,27 C10,27.2118371 9.98682623,27.4205974 9.96125326,27.6255061 C9.74907057,27.3133626 9.50824898,27.0229676 9.24264069,26.7573593 C8.87306934,26.387788 8.45551005,26.0662045 8.00011131,25.8027576 L8,18 C8,16.3431458 6.65685425,15 5,15 C3.34314575,15 2,16.3431458 2,18 L2,27 C2,28.6568542 3.34314575,30 5,30 C5.5265222,30 6.02136396,29.86436 6.45148858,29.6261166 C6.79165627,29.9830537 7,30.4671962 7,31 L6.99953894,31.5841577 C6.38719818,31.851627 5.71092628,32 5,32 C2.23857625,32 -1.15463195e-13,29.7614237 -1.15463195e-13,27 L-1.15463195e-13,18 C-1.15463195e-13,15.2385763 2.23857625,13 5,13 Z" id="Rectangle-Copy" transform="translate(5, 22.5) rotate(180) translate(-5, -22.5)"></path>
8
+ </g>
9
+ </g>
10
+ </svg>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>icon-plot</title>
4
+ <g id="icon-plot" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <rect id="Rectangle" fill-opacity="0.25" fill="#000000" fill-rule="nonzero" x="5" y="5" width="22" height="22"></rect>
6
+ <polyline id="axes" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="27 27 5 27 5 5"></polyline>
7
+ <polyline id="Path-103" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="5 22 9.4 18 13.8 20 18.2 13 22.6 17 27 9"></polyline>
8
+ </g>
9
+ </svg>